diff --git a/v2/contracts/Revert.sol b/v2/contracts/Revert.sol index 7675f0cf..82a36107 100644 --- a/v2/contracts/Revert.sol +++ b/v2/contracts/Revert.sol @@ -16,10 +16,12 @@ struct RevertOptions { } /// @notice Struct containing revert context passed to onRevert. +/// @param sender Address of account that initiated smart contract call. /// @param asset Address of asset, empty if it's gas token. /// @param amount Amount specified with the transaction. /// @param revertMessage Arbitrary data sent back in onRevert. struct RevertContext { + address sender; address asset; uint64 amount; bytes revertMessage; diff --git a/v2/contracts/evm/GatewayEVM.sol b/v2/contracts/evm/GatewayEVM.sol index 282cf11f..dd5b21ef 100644 --- a/v2/contracts/evm/GatewayEVM.sol +++ b/v2/contracts/evm/GatewayEVM.sol @@ -406,7 +406,7 @@ contract GatewayEVM is /// @param data Calldata to pass to the call. /// @return The result of the call. function _executeArbitraryCall(address destination, bytes calldata data) private returns (bytes memory) { - revertIfAuthenticatedCall(data); + revertIfOnCallOrOnRevert(data); (bool success, bytes memory result) = destination.call{ value: msg.value }(data); if (!success) revert ExecutionFailed(); @@ -429,8 +429,8 @@ contract GatewayEVM is return Callable(destination).onCall{ value: msg.value }(messageContext, data); } - // @dev prevent calling onCall function reserved for authenticated calls - function revertIfAuthenticatedCall(bytes calldata data) private pure { + // @dev prevent spoofing onCall and onRevert functions + function revertIfOnCallOrOnRevert(bytes calldata data) private pure { if (data.length >= 4) { bytes4 functionSelector; assembly { @@ -440,6 +440,10 @@ contract GatewayEVM is if (functionSelector == Callable.onCall.selector) { revert NotAllowedToCallOnCall(); } + + if (functionSelector == Revertable.onRevert.selector) { + revert NotAllowedToCallOnRevert(); + } } } } diff --git a/v2/contracts/evm/interfaces/IGatewayEVM.sol b/v2/contracts/evm/interfaces/IGatewayEVM.sol index 550ca54a..6ef97efa 100644 --- a/v2/contracts/evm/interfaces/IGatewayEVM.sol +++ b/v2/contracts/evm/interfaces/IGatewayEVM.sol @@ -83,6 +83,9 @@ interface IGatewayEVMErrors { /// @notice Error when trying to call onCall method using arbitrary call. error NotAllowedToCallOnCall(); + + /// @notice Error when trying to call onRevert method using arbitrary call. + error NotAllowedToCallOnRevert(); } /// @title IGatewayEVM diff --git a/v2/contracts/zevm/GatewayZEVM.sol b/v2/contracts/zevm/GatewayZEVM.sol index 02783b8d..02e6c961 100644 --- a/v2/contracts/zevm/GatewayZEVM.sol +++ b/v2/contracts/zevm/GatewayZEVM.sol @@ -3,7 +3,7 @@ pragma solidity 0.8.26; import { CallOptions, IGatewayZEVM } from "./interfaces/IGatewayZEVM.sol"; -import { RevertContext, RevertOptions } from "../../contracts/Revert.sol"; +import { RevertContext, RevertOptions, Revertable } from "../../contracts/Revert.sol"; import "./interfaces/IWZETA.sol"; import { IZRC20 } from "./interfaces/IZRC20.sol"; import { UniversalContract, zContext } from "./interfaces/UniversalContract.sol"; @@ -474,7 +474,7 @@ contract GatewayZEVM is function executeRevert(address target, RevertContext calldata revertContext) external onlyProtocol whenNotPaused { if (target == address(0)) revert ZeroAddress(); - UniversalContract(target).onRevert(revertContext); + Revertable(target).onRevert(revertContext); } /// @notice Deposit foreign coins into ZRC20 and revert a user-specified contract on ZEVM. @@ -497,6 +497,6 @@ contract GatewayZEVM is if (target == PROTOCOL_ADDRESS || target == address(this)) revert InvalidTarget(); if (!IZRC20(zrc20).deposit(target, amount)) revert ZRC20DepositFailed(); - UniversalContract(target).onRevert(revertContext); + Revertable(target).onRevert(revertContext); } } diff --git a/v2/contracts/zevm/interfaces/UniversalContract.sol b/v2/contracts/zevm/interfaces/UniversalContract.sol index d539516f..506e6734 100644 --- a/v2/contracts/zevm/interfaces/UniversalContract.sol +++ b/v2/contracts/zevm/interfaces/UniversalContract.sol @@ -29,6 +29,4 @@ interface UniversalContract { bytes calldata message ) external; - - function onRevert(RevertContext calldata revertContext) external; } diff --git a/v2/docs/src/SUMMARY.md b/v2/docs/src/SUMMARY.md index b222ddca..694bd285 100644 --- a/v2/docs/src/SUMMARY.md +++ b/v2/docs/src/SUMMARY.md @@ -9,6 +9,8 @@ - [IGatewayEVMEvents](contracts/evm/interfaces/IGatewayEVM.sol/interface.IGatewayEVMEvents.md) - [IGatewayEVMErrors](contracts/evm/interfaces/IGatewayEVM.sol/interface.IGatewayEVMErrors.md) - [IGatewayEVM](contracts/evm/interfaces/IGatewayEVM.sol/interface.IGatewayEVM.md) + - [MessageContext](contracts/evm/interfaces/IGatewayEVM.sol/struct.MessageContext.md) + - [Callable](contracts/evm/interfaces/IGatewayEVM.sol/interface.Callable.md) - [IZetaConnectorEvents](contracts/evm/interfaces/IZetaConnector.sol/interface.IZetaConnectorEvents.md) - [IZetaNonEthNew](contracts/evm/interfaces/IZetaNonEthNew.sol/interface.IZetaNonEthNew.md) - [ERC20Custody](contracts/evm/ERC20Custody.sol/contract.ERC20Custody.md) @@ -21,6 +23,7 @@ - [IGatewayZEVMEvents](contracts/zevm/interfaces/IGatewayZEVM.sol/interface.IGatewayZEVMEvents.md) - [IGatewayZEVMErrors](contracts/zevm/interfaces/IGatewayZEVM.sol/interface.IGatewayZEVMErrors.md) - [IGatewayZEVM](contracts/zevm/interfaces/IGatewayZEVM.sol/interface.IGatewayZEVM.md) + - [CallOptions](contracts/zevm/interfaces/IGatewayZEVM.sol/struct.CallOptions.md) - [ISystem](contracts/zevm/interfaces/ISystem.sol/interface.ISystem.md) - [IWETH9](contracts/zevm/interfaces/IWZETA.sol/interface.IWETH9.md) - [IZRC20](contracts/zevm/interfaces/IZRC20.sol/interface.IZRC20.md) @@ -31,6 +34,8 @@ - [zContract](contracts/zevm/interfaces/UniversalContract.sol/interface.zContract.md) - [UniversalContract](contracts/zevm/interfaces/UniversalContract.sol/interface.UniversalContract.md) - [GatewayZEVM](contracts/zevm/GatewayZEVM.sol/contract.GatewayZEVM.md) + - [SystemContractErrors](contracts/zevm/SystemContract.sol/interface.SystemContractErrors.md) + - [SystemContract](contracts/zevm/SystemContract.sol/contract.SystemContract.md) - [ZRC20Errors](contracts/zevm/ZRC20.sol/interface.ZRC20Errors.md) - [ZRC20](contracts/zevm/ZRC20.sol/contract.ZRC20.md) - [RevertOptions](contracts/Revert.sol/struct.RevertOptions.md) diff --git a/v2/docs/src/contracts/Revert.sol/interface.Revertable.md b/v2/docs/src/contracts/Revert.sol/interface.Revertable.md index 3da555ca..0e44e885 100644 --- a/v2/docs/src/contracts/Revert.sol/interface.Revertable.md +++ b/v2/docs/src/contracts/Revert.sol/interface.Revertable.md @@ -1,5 +1,5 @@ # Revertable -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/Revert.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/Revert.sol) Interface for contracts that support revertable calls. diff --git a/v2/docs/src/contracts/Revert.sol/struct.RevertContext.md b/v2/docs/src/contracts/Revert.sol/struct.RevertContext.md index 7fd6fba8..ab1ac4d2 100644 --- a/v2/docs/src/contracts/Revert.sol/struct.RevertContext.md +++ b/v2/docs/src/contracts/Revert.sol/struct.RevertContext.md @@ -1,11 +1,12 @@ # RevertContext -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/Revert.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/Revert.sol) Struct containing revert context passed to onRevert. ```solidity struct RevertContext { + address sender; address asset; uint64 amount; bytes revertMessage; @@ -16,6 +17,7 @@ struct RevertContext { |Name|Type|Description| |----|----|-----------| +|`sender`|`address`|Address of account that initiated smart contract call.| |`asset`|`address`|Address of asset, empty if it's gas token.| |`amount`|`uint64`|Amount specified with the transaction.| |`revertMessage`|`bytes`|Arbitrary data sent back in onRevert.| diff --git a/v2/docs/src/contracts/Revert.sol/struct.RevertOptions.md b/v2/docs/src/contracts/Revert.sol/struct.RevertOptions.md index 424d98f4..366e2410 100644 --- a/v2/docs/src/contracts/Revert.sol/struct.RevertOptions.md +++ b/v2/docs/src/contracts/Revert.sol/struct.RevertOptions.md @@ -1,5 +1,5 @@ # RevertOptions -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/Revert.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/Revert.sol) Struct containing revert options 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 04ac4ed6..689e5653 100644 --- a/v2/docs/src/contracts/evm/ERC20Custody.sol/contract.ERC20Custody.md +++ b/v2/docs/src/contracts/evm/ERC20Custody.sol/contract.ERC20Custody.md @@ -1,5 +1,5 @@ # ERC20Custody -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/evm/ERC20Custody.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/evm/ERC20Custody.sol) **Inherits:** [IERC20Custody](/contracts/evm/interfaces/IERC20Custody.sol/interface.IERC20Custody.md), ReentrancyGuard, AccessControl, Pausable 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 8fb54cad..a5e9c818 100644 --- a/v2/docs/src/contracts/evm/GatewayEVM.sol/contract.GatewayEVM.md +++ b/v2/docs/src/contracts/evm/GatewayEVM.sol/contract.GatewayEVM.md @@ -1,5 +1,5 @@ # GatewayEVM -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/evm/GatewayEVM.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/evm/GatewayEVM.sol) **Inherits:** Initializable, AccessControlUpgradeable, UUPSUpgradeable, [IGatewayEVM](/contracts/evm/interfaces/IGatewayEVM.sol/interface.IGatewayEVM.md), ReentrancyGuardUpgradeable, PausableUpgradeable @@ -107,28 +107,6 @@ function _authorizeUpgrade(address newImplementation) internal override onlyRole |`newImplementation`|`address`|Address of the new implementation.| -### _execute - -*Internal function to execute a call to a destination address.* - - -```solidity -function _execute(address destination, bytes calldata data) internal 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.| - - ### pause Pause contract. @@ -177,13 +155,14 @@ function executeRevert( ### execute -Executes a call to a destination address without ERC20 tokens. +Executes an authenticated 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( + MessageContext calldata messageContext, address destination, bytes calldata data ) @@ -196,6 +175,39 @@ function execute( ``` **Parameters** +|Name|Type|Description| +|----|----|-----------| +|`messageContext`|`MessageContext`|Message context containing sender.| +|`destination`|`address`|Address to call.| +|`data`|`bytes`|Calldata to pass to the call.| + +**Returns** + +|Name|Type|Description| +|----|----|-----------| +|``|`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.| @@ -478,3 +490,61 @@ function transferToAssetHandler(address token, uint256 amount) private; |`amount`|`uint256`|Amount of tokens to transfer.| +### _executeArbitraryCall + +*Private function to execute an arbitrary call to a destination address.* + + +```solidity +function _executeArbitraryCall(address destination, bytes calldata data) private 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.| + + +### _executeAuthenticatedCall + +*Private function to execute an authenticated call to a destination address.* + + +```solidity +function _executeAuthenticatedCall( + MessageContext calldata messageContext, + address destination, + bytes calldata data +) + private + returns (bytes memory); +``` +**Parameters** + +|Name|Type|Description| +|----|----|-----------| +|`messageContext`|`MessageContext`|Message context containing sender and arbitrary call flag.| +|`destination`|`address`|Address to call.| +|`data`|`bytes`|Calldata to pass to the call.| + +**Returns** + +|Name|Type|Description| +|----|----|-----------| +|``|`bytes`|The result of the call.| + + +### revertIfOnCallOrOnRevert + + +```solidity +function revertIfOnCallOrOnRevert(bytes calldata data) private pure; +``` + 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 c5f9ff82..bd21e0cc 100644 --- a/v2/docs/src/contracts/evm/ZetaConnectorBase.sol/abstract.ZetaConnectorBase.md +++ b/v2/docs/src/contracts/evm/ZetaConnectorBase.sol/abstract.ZetaConnectorBase.md @@ -1,5 +1,5 @@ # ZetaConnectorBase -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/evm/ZetaConnectorBase.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/evm/ZetaConnectorBase.sol) **Inherits:** [IZetaConnectorEvents](/contracts/evm/interfaces/IZetaConnector.sol/interface.IZetaConnectorEvents.md), ReentrancyGuard, Pausable, AccessControl 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 2ad9ae76..ca5dfa6b 100644 --- a/v2/docs/src/contracts/evm/ZetaConnectorNative.sol/contract.ZetaConnectorNative.md +++ b/v2/docs/src/contracts/evm/ZetaConnectorNative.sol/contract.ZetaConnectorNative.md @@ -1,5 +1,5 @@ # ZetaConnectorNative -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/evm/ZetaConnectorNative.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/evm/ZetaConnectorNative.sol) **Inherits:** [ZetaConnectorBase](/contracts/evm/ZetaConnectorBase.sol/abstract.ZetaConnectorBase.md) 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 03d13b86..1b484436 100644 --- a/v2/docs/src/contracts/evm/ZetaConnectorNonNative.sol/contract.ZetaConnectorNonNative.md +++ b/v2/docs/src/contracts/evm/ZetaConnectorNonNative.sol/contract.ZetaConnectorNonNative.md @@ -1,5 +1,5 @@ # ZetaConnectorNonNative -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/evm/ZetaConnectorNonNative.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/evm/ZetaConnectorNonNative.sol) **Inherits:** [ZetaConnectorBase](/contracts/evm/ZetaConnectorBase.sol/abstract.ZetaConnectorBase.md) 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 ebec536f..0e62cbc7 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 @@ -1,5 +1,5 @@ # IERC20Custody -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/evm/interfaces/IERC20Custody.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/evm/interfaces/IERC20Custody.sol) **Inherits:** [IERC20CustodyEvents](/contracts/evm/interfaces/IERC20Custody.sol/interface.IERC20CustodyEvents.md), [IERC20CustodyErrors](/contracts/evm/interfaces/IERC20Custody.sol/interface.IERC20CustodyErrors.md) diff --git a/v2/docs/src/contracts/evm/interfaces/IERC20Custody.sol/interface.IERC20CustodyErrors.md b/v2/docs/src/contracts/evm/interfaces/IERC20Custody.sol/interface.IERC20CustodyErrors.md index cc69172a..65aa6d6e 100644 --- a/v2/docs/src/contracts/evm/interfaces/IERC20Custody.sol/interface.IERC20CustodyErrors.md +++ b/v2/docs/src/contracts/evm/interfaces/IERC20Custody.sol/interface.IERC20CustodyErrors.md @@ -1,5 +1,5 @@ # IERC20CustodyErrors -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/evm/interfaces/IERC20Custody.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/evm/interfaces/IERC20Custody.sol) Interface for the errors used in the ERC20 custody contract. diff --git a/v2/docs/src/contracts/evm/interfaces/IERC20Custody.sol/interface.IERC20CustodyEvents.md b/v2/docs/src/contracts/evm/interfaces/IERC20Custody.sol/interface.IERC20CustodyEvents.md index 59e99e67..2433e422 100644 --- a/v2/docs/src/contracts/evm/interfaces/IERC20Custody.sol/interface.IERC20CustodyEvents.md +++ b/v2/docs/src/contracts/evm/interfaces/IERC20Custody.sol/interface.IERC20CustodyEvents.md @@ -1,5 +1,5 @@ # IERC20CustodyEvents -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/evm/interfaces/IERC20Custody.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/evm/interfaces/IERC20Custody.sol) Interface for the events emitted by the ERC20 custody contract. diff --git a/v2/docs/src/contracts/evm/interfaces/IGatewayEVM.sol/interface.Callable.md b/v2/docs/src/contracts/evm/interfaces/IGatewayEVM.sol/interface.Callable.md new file mode 100644 index 00000000..057b5550 --- /dev/null +++ b/v2/docs/src/contracts/evm/interfaces/IGatewayEVM.sol/interface.Callable.md @@ -0,0 +1,14 @@ +# Callable +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/evm/interfaces/IGatewayEVM.sol) + +Interface implemented by contracts receiving authenticated calls. + + +## Functions +### onCall + + +```solidity +function onCall(MessageContext calldata context, bytes calldata message) external payable returns (bytes memory); +``` + 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 d6d9d94d..f72c1a06 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 @@ -1,5 +1,5 @@ # IGatewayEVM -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/evm/interfaces/IGatewayEVM.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/evm/interfaces/IGatewayEVM.sol) **Inherits:** [IGatewayEVMErrors](/contracts/evm/interfaces/IGatewayEVM.sol/interface.IGatewayEVMErrors.md), [IGatewayEVMEvents](/contracts/evm/interfaces/IGatewayEVM.sol/interface.IGatewayEVMEvents.md) @@ -73,6 +73,38 @@ function execute(address destination, bytes calldata data) external payable retu |``|`bytes`|The result of the contract call.| +### execute + +Executes a 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( + MessageContext calldata messageContext, + address destination, + bytes calldata data +) + external + payable + returns (bytes memory); +``` +**Parameters** + +|Name|Type|Description| +|----|----|-----------| +|`messageContext`|`MessageContext`|Message context containing sender and arbitrary call flag.| +|`destination`|`address`|Address to call.| +|`data`|`bytes`|Calldata to pass to the call.| + +**Returns** + +|Name|Type|Description| +|----|----|-----------| +|``|`bytes`|The result of the call.| + + ### revertWithERC20 Executes a revertable call to a contract using ERC20 tokens. diff --git a/v2/docs/src/contracts/evm/interfaces/IGatewayEVM.sol/interface.IGatewayEVMErrors.md b/v2/docs/src/contracts/evm/interfaces/IGatewayEVM.sol/interface.IGatewayEVMErrors.md index 079fbd2a..1c0aeeda 100644 --- a/v2/docs/src/contracts/evm/interfaces/IGatewayEVM.sol/interface.IGatewayEVMErrors.md +++ b/v2/docs/src/contracts/evm/interfaces/IGatewayEVM.sol/interface.IGatewayEVMErrors.md @@ -1,5 +1,5 @@ # IGatewayEVMErrors -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/evm/interfaces/IGatewayEVM.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/evm/interfaces/IGatewayEVM.sol) Interface for the errors used in the GatewayEVM contract. @@ -77,3 +77,19 @@ Error when trying to transfer not whitelisted token to custody. error NotWhitelistedInCustody(); ``` +### NotAllowedToCallOnCall +Error when trying to call onCall method using arbitrary call. + + +```solidity +error NotAllowedToCallOnCall(); +``` + +### NotAllowedToCallOnRevert +Error when trying to call onRevert method using arbitrary call. + + +```solidity +error NotAllowedToCallOnRevert(); +``` + diff --git a/v2/docs/src/contracts/evm/interfaces/IGatewayEVM.sol/interface.IGatewayEVMEvents.md b/v2/docs/src/contracts/evm/interfaces/IGatewayEVM.sol/interface.IGatewayEVMEvents.md index a82a0324..a4a9a3a0 100644 --- a/v2/docs/src/contracts/evm/interfaces/IGatewayEVM.sol/interface.IGatewayEVMEvents.md +++ b/v2/docs/src/contracts/evm/interfaces/IGatewayEVM.sol/interface.IGatewayEVMEvents.md @@ -1,5 +1,5 @@ # IGatewayEVMEvents -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/evm/interfaces/IGatewayEVM.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/evm/interfaces/IGatewayEVM.sol) Interface for the events emitted by the GatewayEVM contract. diff --git a/v2/docs/src/contracts/evm/interfaces/IGatewayEVM.sol/struct.MessageContext.md b/v2/docs/src/contracts/evm/interfaces/IGatewayEVM.sol/struct.MessageContext.md new file mode 100644 index 00000000..13bce47a --- /dev/null +++ b/v2/docs/src/contracts/evm/interfaces/IGatewayEVM.sol/struct.MessageContext.md @@ -0,0 +1,18 @@ +# MessageContext +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/evm/interfaces/IGatewayEVM.sol) + +Message context passed to execute function. + + +```solidity +struct MessageContext { + address sender; +} +``` + +**Properties** + +|Name|Type|Description| +|----|----|-----------| +|`sender`|`address`|Sender from omnichain contract.| + diff --git a/v2/docs/src/contracts/evm/interfaces/IZetaConnector.sol/interface.IZetaConnectorEvents.md b/v2/docs/src/contracts/evm/interfaces/IZetaConnector.sol/interface.IZetaConnectorEvents.md index e6141dc0..4e75ea4a 100644 --- a/v2/docs/src/contracts/evm/interfaces/IZetaConnector.sol/interface.IZetaConnectorEvents.md +++ b/v2/docs/src/contracts/evm/interfaces/IZetaConnector.sol/interface.IZetaConnectorEvents.md @@ -1,5 +1,5 @@ # IZetaConnectorEvents -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/evm/interfaces/IZetaConnector.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/evm/interfaces/IZetaConnector.sol) Interface for the events emitted by the ZetaConnector contracts. diff --git a/v2/docs/src/contracts/evm/interfaces/IZetaNonEthNew.sol/interface.IZetaNonEthNew.md b/v2/docs/src/contracts/evm/interfaces/IZetaNonEthNew.sol/interface.IZetaNonEthNew.md index 8c725650..ba9b4f53 100644 --- a/v2/docs/src/contracts/evm/interfaces/IZetaNonEthNew.sol/interface.IZetaNonEthNew.md +++ b/v2/docs/src/contracts/evm/interfaces/IZetaNonEthNew.sol/interface.IZetaNonEthNew.md @@ -1,5 +1,5 @@ # IZetaNonEthNew -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/evm/interfaces/IZetaNonEthNew.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/evm/interfaces/IZetaNonEthNew.sol) **Inherits:** IERC20 diff --git a/v2/docs/src/contracts/evm/interfaces/README.md b/v2/docs/src/contracts/evm/interfaces/README.md index 1c636c76..c5384b21 100644 --- a/v2/docs/src/contracts/evm/interfaces/README.md +++ b/v2/docs/src/contracts/evm/interfaces/README.md @@ -7,5 +7,7 @@ - [IGatewayEVMEvents](IGatewayEVM.sol/interface.IGatewayEVMEvents.md) - [IGatewayEVMErrors](IGatewayEVM.sol/interface.IGatewayEVMErrors.md) - [IGatewayEVM](IGatewayEVM.sol/interface.IGatewayEVM.md) +- [MessageContext](IGatewayEVM.sol/struct.MessageContext.md) +- [Callable](IGatewayEVM.sol/interface.Callable.md) - [IZetaConnectorEvents](IZetaConnector.sol/interface.IZetaConnectorEvents.md) - [IZetaNonEthNew](IZetaNonEthNew.sol/interface.IZetaNonEthNew.md) 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 a12391d3..70ffd85c 100644 --- a/v2/docs/src/contracts/zevm/GatewayZEVM.sol/contract.GatewayZEVM.md +++ b/v2/docs/src/contracts/zevm/GatewayZEVM.sol/contract.GatewayZEVM.md @@ -1,5 +1,5 @@ # GatewayZEVM -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/zevm/GatewayZEVM.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/zevm/GatewayZEVM.sol) **Inherits:** [IGatewayZEVM](/contracts/zevm/interfaces/IGatewayZEVM.sol/interface.IGatewayZEVM.md), Initializable, AccessControlUpgradeable, UUPSUpgradeable, ReentrancyGuardUpgradeable, PausableUpgradeable @@ -10,12 +10,12 @@ The GatewayZEVM contract is the endpoint to call smart contracts on omnichain. ## State Variables -### FUNGIBLE_MODULE_ADDRESS -The constant address of the Fungible module. +### PROTOCOL_ADDRESS +The constant address of the protocol ```solidity -address public constant FUNGIBLE_MODULE_ADDRESS = 0x735b14BB79463307AAcBED86DAf3322B1e6226aB; +address public constant PROTOCOL_ADDRESS = 0x735b14BB79463307AAcBED86DAf3322B1e6226aB; ``` @@ -38,13 +38,13 @@ bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); ## Functions -### onlyFungible +### onlyProtocol -*Only Fungible module address allowed modifier.* +*Only protocol address allowed modifier.* ```solidity -modifier onlyFungible(); +modifier onlyProtocol(); ``` ### constructor @@ -224,6 +224,36 @@ function withdrawAndCall( |`revertOptions`|`RevertOptions`|Revert options.| +### withdrawAndCall + +Withdraw ZRC20 tokens and call a smart contract on an external chain. + + +```solidity +function withdrawAndCall( + bytes memory receiver, + uint256 amount, + address zrc20, + bytes calldata message, + CallOptions calldata callOptions, + RevertOptions calldata revertOptions +) + external + nonReentrant + whenNotPaused; +``` +**Parameters** + +|Name|Type|Description| +|----|----|-----------| +|`receiver`|`bytes`|The receiver address on the external chain.| +|`amount`|`uint256`|The amount of tokens to withdraw.| +|`zrc20`|`address`|The address of the ZRC20 token.| +|`message`|`bytes`|The calldata to pass to the contract call.| +|`callOptions`|`CallOptions`|Call options including gas limit and arbirtrary call flag.| +|`revertOptions`|`RevertOptions`|Revert options.| + + ### withdraw Withdraw ZETA tokens to an external chain. @@ -278,6 +308,64 @@ function withdrawAndCall( |`revertOptions`|`RevertOptions`|Revert options.| +### withdrawAndCall + +Withdraw ZETA tokens and call a smart contract on an external chain. + + +```solidity +function withdrawAndCall( + bytes memory receiver, + uint256 amount, + uint256 chainId, + bytes calldata message, + CallOptions calldata callOptions, + RevertOptions calldata revertOptions +) + external + nonReentrant + whenNotPaused; +``` +**Parameters** + +|Name|Type|Description| +|----|----|-----------| +|`receiver`|`bytes`|The receiver address on the external chain.| +|`amount`|`uint256`|The amount of tokens to withdraw.| +|`chainId`|`uint256`|Chain id of the external chain.| +|`message`|`bytes`|The calldata to pass to the contract call.| +|`callOptions`|`CallOptions`|Call options including gas limit and arbirtrary call flag.| +|`revertOptions`|`RevertOptions`|Revert options.| + + +### call + +Call a smart contract on an external chain without asset transfer. + + +```solidity +function call( + bytes memory receiver, + address zrc20, + bytes calldata message, + CallOptions calldata callOptions, + RevertOptions calldata revertOptions +) + external + nonReentrant + whenNotPaused; +``` +**Parameters** + +|Name|Type|Description| +|----|----|-----------| +|`receiver`|`bytes`|The receiver address on the external chain.| +|`zrc20`|`address`|Address of zrc20 to pay fees.| +|`message`|`bytes`|The calldata to pass to the contract call.| +|`callOptions`|`CallOptions`|Call options including gas limit and arbirtrary call flag.| +|`revertOptions`|`RevertOptions`|Revert options.| + + ### call Call a smart contract on an external chain without asset transfer. @@ -306,13 +394,27 @@ function call( |`revertOptions`|`RevertOptions`|Revert options.| +### _call + + +```solidity +function _call( + bytes memory receiver, + address zrc20, + bytes calldata message, + CallOptions memory callOptions, + RevertOptions memory revertOptions +) + internal; +``` + ### deposit Deposit foreign coins into ZRC20. ```solidity -function deposit(address zrc20, uint256 amount, address target) external onlyFungible whenNotPaused; +function deposit(address zrc20, uint256 amount, address target) external onlyProtocol whenNotPaused; ``` **Parameters** @@ -337,7 +439,7 @@ function execute( bytes calldata message ) external - onlyFungible + onlyProtocol whenNotPaused; ``` **Parameters** @@ -365,7 +467,7 @@ function depositAndCall( bytes calldata message ) external - onlyFungible + onlyProtocol whenNotPaused; ``` **Parameters** @@ -392,7 +494,7 @@ function depositAndCall( bytes calldata message ) external - onlyFungible + onlyProtocol whenNotPaused; ``` **Parameters** @@ -411,7 +513,7 @@ Revert a user-specified contract on ZEVM. ```solidity -function executeRevert(address target, RevertContext calldata revertContext) external onlyFungible whenNotPaused; +function executeRevert(address target, RevertContext calldata revertContext) external onlyProtocol whenNotPaused; ``` **Parameters** @@ -434,7 +536,7 @@ function depositAndRevert( RevertContext calldata revertContext ) external - onlyFungible + onlyProtocol whenNotPaused; ``` **Parameters** diff --git a/v2/docs/src/contracts/zevm/README.md b/v2/docs/src/contracts/zevm/README.md index 6bff934d..b676773e 100644 --- a/v2/docs/src/contracts/zevm/README.md +++ b/v2/docs/src/contracts/zevm/README.md @@ -3,5 +3,7 @@ # Contents - [interfaces](/contracts/zevm/interfaces) - [GatewayZEVM](GatewayZEVM.sol/contract.GatewayZEVM.md) +- [SystemContractErrors](SystemContract.sol/interface.SystemContractErrors.md) +- [SystemContract](SystemContract.sol/contract.SystemContract.md) - [ZRC20Errors](ZRC20.sol/interface.ZRC20Errors.md) - [ZRC20](ZRC20.sol/contract.ZRC20.md) diff --git a/v2/docs/src/contracts/zevm/SystemContract.sol/contract.SystemContract.md b/v2/docs/src/contracts/zevm/SystemContract.sol/contract.SystemContract.md new file mode 100644 index 00000000..240cbdd4 --- /dev/null +++ b/v2/docs/src/contracts/zevm/SystemContract.sol/contract.SystemContract.md @@ -0,0 +1,278 @@ +# SystemContract +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/zevm/SystemContract.sol) + +**Inherits:** +[SystemContractErrors](/contracts/zevm/SystemContract.sol/interface.SystemContractErrors.md) + +*The system contract it's called by the protocol to interact with the blockchain. +Also includes a lot of tools to make easier to interact with ZetaChain.* + + +## State Variables +### gasPriceByChainId +Map to know the gas price of each chain given a chain id. + + +```solidity +mapping(uint256 => uint256) public gasPriceByChainId; +``` + + +### gasCoinZRC20ByChainId +Map to know the ZRC20 address of a token given a chain id, ex zETH, zBNB etc. + + +```solidity +mapping(uint256 => address) public gasCoinZRC20ByChainId; +``` + + +### gasZetaPoolByChainId + +```solidity +mapping(uint256 => address) public gasZetaPoolByChainId; +``` + + +### FUNGIBLE_MODULE_ADDRESS +Fungible address is always the same, it's on protocol level. + + +```solidity +address public constant FUNGIBLE_MODULE_ADDRESS = 0x735b14BB79463307AAcBED86DAf3322B1e6226aB; +``` + + +### uniswapv2FactoryAddress +Uniswap V2 addresses. + + +```solidity +address public immutable uniswapv2FactoryAddress; +``` + + +### uniswapv2Router02Address + +```solidity +address public immutable uniswapv2Router02Address; +``` + + +### wZetaContractAddress +Address of the wrapped ZETA to interact with Uniswap V2. + + +```solidity +address public wZetaContractAddress; +``` + + +### zetaConnectorZEVMAddress +Address of ZEVM Zeta Connector. + + +```solidity +address public zetaConnectorZEVMAddress; +``` + + +## Functions +### constructor + +*Only fungible module can deploy a system contract.* + + +```solidity +constructor(address wzeta_, address uniswapv2Factory_, address uniswapv2Router02_); +``` + +### depositAndCall + +*Deposit foreign coins into ZRC20 and call user specified contract on zEVM.* + + +```solidity +function depositAndCall( + zContext calldata context, + address zrc20, + uint256 amount, + address target, + bytes calldata message +) + external; +``` +**Parameters** + +|Name|Type|Description| +|----|----|-----------| +|`context`|`zContext`|| +|`zrc20`|`address`|| +|`amount`|`uint256`|| +|`target`|`address`|| +|`message`|`bytes`|| + + +### sortTokens + +*Sort token addresses lexicographically. Used to handle return values from pairs sorted in the order.* + + +```solidity +function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1); +``` +**Parameters** + +|Name|Type|Description| +|----|----|-----------| +|`tokenA`|`address`|| +|`tokenB`|`address`|| + +**Returns** + +|Name|Type|Description| +|----|----|-----------| +|`token0`|`address`|token1, returns sorted token addresses,.| +|`token1`|`address`|| + + +### uniswapv2PairFor + +*Calculates the CREATE2 address for a pair without making any external calls.* + + +```solidity +function uniswapv2PairFor(address factory, address tokenA, address tokenB) public pure returns (address pair); +``` +**Parameters** + +|Name|Type|Description| +|----|----|-----------| +|`factory`|`address`|| +|`tokenA`|`address`|| +|`tokenB`|`address`|| + +**Returns** + +|Name|Type|Description| +|----|----|-----------| +|`pair`|`address`|tokens pair address.| + + +### setGasPrice + +*Fungible module updates the gas price oracle periodically.* + + +```solidity +function setGasPrice(uint256 chainID, uint256 price) external; +``` +**Parameters** + +|Name|Type|Description| +|----|----|-----------| +|`chainID`|`uint256`|| +|`price`|`uint256`|| + + +### setGasCoinZRC20 + +*Setter for gasCoinZRC20ByChainId map.* + + +```solidity +function setGasCoinZRC20(uint256 chainID, address zrc20) external; +``` +**Parameters** + +|Name|Type|Description| +|----|----|-----------| +|`chainID`|`uint256`|| +|`zrc20`|`address`|| + + +### setGasZetaPool + +*Set the pool wzeta/erc20 address.* + + +```solidity +function setGasZetaPool(uint256 chainID, address erc20) external; +``` +**Parameters** + +|Name|Type|Description| +|----|----|-----------| +|`chainID`|`uint256`|| +|`erc20`|`address`|| + + +### setWZETAContractAddress + +*Setter for wrapped ZETA address.* + + +```solidity +function setWZETAContractAddress(address addr) external; +``` +**Parameters** + +|Name|Type|Description| +|----|----|-----------| +|`addr`|`address`|| + + +### setConnectorZEVMAddress + +*Setter for zetaConnector ZEVM Address* + + +```solidity +function setConnectorZEVMAddress(address addr) external; +``` +**Parameters** + +|Name|Type|Description| +|----|----|-----------| +|`addr`|`address`|| + + +## Events +### SystemContractDeployed +Custom SystemContract errors. + + +```solidity +event SystemContractDeployed(); +``` + +### SetGasPrice + +```solidity +event SetGasPrice(uint256, uint256); +``` + +### SetGasCoin + +```solidity +event SetGasCoin(uint256, address); +``` + +### SetGasZetaPool + +```solidity +event SetGasZetaPool(uint256, address); +``` + +### SetWZeta + +```solidity +event SetWZeta(address); +``` + +### SetConnectorZEVM + +```solidity +event SetConnectorZEVM(address); +``` + diff --git a/v2/docs/src/contracts/zevm/SystemContract.sol/interface.SystemContractErrors.md b/v2/docs/src/contracts/zevm/SystemContract.sol/interface.SystemContractErrors.md new file mode 100644 index 00000000..ee11a49d --- /dev/null +++ b/v2/docs/src/contracts/zevm/SystemContract.sol/interface.SystemContractErrors.md @@ -0,0 +1,37 @@ +# SystemContractErrors +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/zevm/SystemContract.sol) + +*Custom errors for SystemContract* + + +## Errors +### CallerIsNotFungibleModule + +```solidity +error CallerIsNotFungibleModule(); +``` + +### InvalidTarget + +```solidity +error InvalidTarget(); +``` + +### CantBeIdenticalAddresses + +```solidity +error CantBeIdenticalAddresses(); +``` + +### CantBeZeroAddress + +```solidity +error CantBeZeroAddress(); +``` + +### ZeroAddress + +```solidity +error ZeroAddress(); +``` + diff --git a/v2/docs/src/contracts/zevm/ZRC20.sol/contract.ZRC20.md b/v2/docs/src/contracts/zevm/ZRC20.sol/contract.ZRC20.md index 596fffdf..028af2aa 100644 --- a/v2/docs/src/contracts/zevm/ZRC20.sol/contract.ZRC20.md +++ b/v2/docs/src/contracts/zevm/ZRC20.sol/contract.ZRC20.md @@ -1,5 +1,5 @@ # ZRC20 -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/zevm/ZRC20.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/zevm/ZRC20.sol) **Inherits:** [IZRC20Metadata](/contracts/zevm/interfaces/IZRC20.sol/interface.IZRC20Metadata.md), [ZRC20Errors](/contracts/zevm/ZRC20.sol/interface.ZRC20Errors.md), [ZRC20Events](/contracts/zevm/interfaces/IZRC20.sol/interface.ZRC20Events.md) diff --git a/v2/docs/src/contracts/zevm/ZRC20.sol/interface.ZRC20Errors.md b/v2/docs/src/contracts/zevm/ZRC20.sol/interface.ZRC20Errors.md index 46bd4854..0697b96f 100644 --- a/v2/docs/src/contracts/zevm/ZRC20.sol/interface.ZRC20Errors.md +++ b/v2/docs/src/contracts/zevm/ZRC20.sol/interface.ZRC20Errors.md @@ -1,5 +1,5 @@ # ZRC20Errors -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/zevm/ZRC20.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/zevm/ZRC20.sol) *Custom errors for ZRC20* diff --git a/v2/docs/src/contracts/zevm/interfaces/IGatewayZEVM.sol/interface.IGatewayZEVM.md b/v2/docs/src/contracts/zevm/interfaces/IGatewayZEVM.sol/interface.IGatewayZEVM.md index 95cd5ecb..30ec1677 100644 --- a/v2/docs/src/contracts/zevm/interfaces/IGatewayZEVM.sol/interface.IGatewayZEVM.md +++ b/v2/docs/src/contracts/zevm/interfaces/IGatewayZEVM.sol/interface.IGatewayZEVM.md @@ -1,5 +1,5 @@ # IGatewayZEVM -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/zevm/interfaces/IGatewayZEVM.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/zevm/interfaces/IGatewayZEVM.sol) **Inherits:** [IGatewayZEVMErrors](/contracts/zevm/interfaces/IGatewayZEVM.sol/interface.IGatewayZEVMErrors.md), [IGatewayZEVMEvents](/contracts/zevm/interfaces/IGatewayZEVM.sol/interface.IGatewayZEVMEvents.md) @@ -86,6 +86,60 @@ function withdrawAndCall( |`revertOptions`|`RevertOptions`|Revert options.| +### withdrawAndCall + +Withdraw ZRC20 tokens and call a smart contract on an external chain. + + +```solidity +function withdrawAndCall( + bytes memory receiver, + uint256 amount, + address zrc20, + bytes calldata message, + CallOptions calldata callOptions, + RevertOptions calldata revertOptions +) + external; +``` +**Parameters** + +|Name|Type|Description| +|----|----|-----------| +|`receiver`|`bytes`|The receiver address on the external chain.| +|`amount`|`uint256`|The amount of tokens to withdraw.| +|`zrc20`|`address`|The address of the ZRC20 token.| +|`message`|`bytes`|The calldata to pass to the contract call.| +|`callOptions`|`CallOptions`|Call options including gas limit and arbirtrary call flag.| +|`revertOptions`|`RevertOptions`|Revert options.| + + +### withdrawAndCall + +Withdraw ZETA tokens and call a smart contract on an external chain. + + +```solidity +function withdrawAndCall( + bytes memory receiver, + uint256 amount, + uint256 chainId, + bytes calldata message, + RevertOptions calldata revertOptions +) + external; +``` +**Parameters** + +|Name|Type|Description| +|----|----|-----------| +|`receiver`|`bytes`|The receiver address on the external chain.| +|`amount`|`uint256`|The amount of tokens to withdraw.| +|`chainId`|`uint256`|Chain id of the external chain.| +|`message`|`bytes`|The calldata to pass to the contract call.| +|`revertOptions`|`RevertOptions`|Revert options.| + + ### withdrawAndCall Withdraw ZETA tokens and call a smart contract on an external chain. @@ -97,6 +151,7 @@ function withdrawAndCall( uint256 amount, uint256 chainId, bytes calldata message, + CallOptions calldata callOptions, RevertOptions calldata revertOptions ) external; @@ -109,6 +164,33 @@ function withdrawAndCall( |`amount`|`uint256`|The amount of tokens to withdraw.| |`chainId`|`uint256`|Chain id of the external chain.| |`message`|`bytes`|The calldata to pass to the contract call.| +|`callOptions`|`CallOptions`|Call options including gas limit and arbirtrary call flag.| +|`revertOptions`|`RevertOptions`|Revert options.| + + +### call + +Call a smart contract on an external chain without asset transfer. + + +```solidity +function call( + bytes memory receiver, + address zrc20, + bytes calldata message, + CallOptions calldata callOptions, + RevertOptions calldata revertOptions +) + external; +``` +**Parameters** + +|Name|Type|Description| +|----|----|-----------| +|`receiver`|`bytes`|The receiver address on the external chain.| +|`zrc20`|`address`|Address of zrc20 to pay fees.| +|`message`|`bytes`|The calldata to pass to the contract call.| +|`callOptions`|`CallOptions`|Call options including gas limit and arbirtrary call flag.| |`revertOptions`|`RevertOptions`|Revert options.| diff --git a/v2/docs/src/contracts/zevm/interfaces/IGatewayZEVM.sol/interface.IGatewayZEVMErrors.md b/v2/docs/src/contracts/zevm/interfaces/IGatewayZEVM.sol/interface.IGatewayZEVMErrors.md index db85fdc4..3c6a6819 100644 --- a/v2/docs/src/contracts/zevm/interfaces/IGatewayZEVM.sol/interface.IGatewayZEVMErrors.md +++ b/v2/docs/src/contracts/zevm/interfaces/IGatewayZEVM.sol/interface.IGatewayZEVMErrors.md @@ -1,5 +1,5 @@ # IGatewayZEVMErrors -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/zevm/interfaces/IGatewayZEVM.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/zevm/interfaces/IGatewayZEVM.sol) Interface for the errors used in the GatewayZEVM contract. @@ -61,12 +61,12 @@ Error indicating a failure to transfer gas fee. error GasFeeTransferFailed(); ``` -### CallerIsNotFungibleModule -Error indicating that the caller is not the Fungible module. +### CallerIsNotProtocol +Error indicating that the caller is not the protocol account. ```solidity -error CallerIsNotFungibleModule(); +error CallerIsNotProtocol(); ``` ### InvalidTarget @@ -85,12 +85,12 @@ Error indicating a failure to send ZETA tokens. error FailedZetaSent(); ``` -### OnlyWZETAOrFungible -Error indicating that only WZETA or the Fungible module can call the function. +### OnlyWZETAOrProtocol +Error indicating that only WZETA or the protocol address can call the function. ```solidity -error OnlyWZETAOrFungible(); +error OnlyWZETAOrProtocol(); ``` ### EmptyMessage diff --git a/v2/docs/src/contracts/zevm/interfaces/IGatewayZEVM.sol/interface.IGatewayZEVMEvents.md b/v2/docs/src/contracts/zevm/interfaces/IGatewayZEVM.sol/interface.IGatewayZEVMEvents.md index ba43d1ae..aa9bf0e0 100644 --- a/v2/docs/src/contracts/zevm/interfaces/IGatewayZEVM.sol/interface.IGatewayZEVMEvents.md +++ b/v2/docs/src/contracts/zevm/interfaces/IGatewayZEVM.sol/interface.IGatewayZEVMEvents.md @@ -1,5 +1,5 @@ # IGatewayZEVMEvents -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/zevm/interfaces/IGatewayZEVM.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/zevm/interfaces/IGatewayZEVM.sol) Interface for the events emitted by the GatewayZEVM contract. @@ -15,7 +15,7 @@ event Called( address indexed zrc20, bytes receiver, bytes message, - uint256 gasLimit, + CallOptions callOptions, RevertOptions revertOptions ); ``` @@ -28,7 +28,7 @@ event Called( |`zrc20`|`address`|Address of zrc20 to pay fees.| |`receiver`|`bytes`|The receiver address on the external chain.| |`message`|`bytes`|The calldata passed to the contract call.| -|`gasLimit`|`uint256`|Gas limit.| +|`callOptions`|`CallOptions`|Call options including gas limit and arbirtrary call flag.| |`revertOptions`|`RevertOptions`|Revert options.| ### Withdrawn @@ -45,7 +45,7 @@ event Withdrawn( uint256 gasfee, uint256 protocolFlatFee, bytes message, - uint256 gasLimit, + CallOptions callOptions, RevertOptions revertOptions ); ``` @@ -62,6 +62,6 @@ event Withdrawn( |`gasfee`|`uint256`|The gas fee for the withdrawal.| |`protocolFlatFee`|`uint256`|The protocol flat fee for the withdrawal.| |`message`|`bytes`|The calldata passed to the contract call.| -|`gasLimit`|`uint256`|Gas limit.| +|`callOptions`|`CallOptions`|Call options including gas limit and arbirtrary call flag.| |`revertOptions`|`RevertOptions`|Revert options.| diff --git a/v2/docs/src/contracts/zevm/interfaces/IGatewayZEVM.sol/struct.CallOptions.md b/v2/docs/src/contracts/zevm/interfaces/IGatewayZEVM.sol/struct.CallOptions.md new file mode 100644 index 00000000..ee90dcd7 --- /dev/null +++ b/v2/docs/src/contracts/zevm/interfaces/IGatewayZEVM.sol/struct.CallOptions.md @@ -0,0 +1,20 @@ +# CallOptions +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/zevm/interfaces/IGatewayZEVM.sol) + +CallOptions struct passed to call and withdrawAndCall functions. + + +```solidity +struct CallOptions { + uint256 gasLimit; + bool isArbitraryCall; +} +``` + +**Properties** + +|Name|Type|Description| +|----|----|-----------| +|`gasLimit`|`uint256`|Gas limit.| +|`isArbitraryCall`|`bool`|Indicates if call should be arbitrary or authenticated.| + diff --git a/v2/docs/src/contracts/zevm/interfaces/ISystem.sol/interface.ISystem.md b/v2/docs/src/contracts/zevm/interfaces/ISystem.sol/interface.ISystem.md index 3e362e66..bc60fa8f 100644 --- a/v2/docs/src/contracts/zevm/interfaces/ISystem.sol/interface.ISystem.md +++ b/v2/docs/src/contracts/zevm/interfaces/ISystem.sol/interface.ISystem.md @@ -1,5 +1,5 @@ # ISystem -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/zevm/interfaces/ISystem.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/zevm/interfaces/ISystem.sol) Interface for the System contract. diff --git a/v2/docs/src/contracts/zevm/interfaces/IWZETA.sol/interface.IWETH9.md b/v2/docs/src/contracts/zevm/interfaces/IWZETA.sol/interface.IWETH9.md index 81afcef2..698ca481 100644 --- a/v2/docs/src/contracts/zevm/interfaces/IWZETA.sol/interface.IWETH9.md +++ b/v2/docs/src/contracts/zevm/interfaces/IWZETA.sol/interface.IWETH9.md @@ -1,5 +1,5 @@ # IWETH9 -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/zevm/interfaces/IWZETA.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/zevm/interfaces/IWZETA.sol) Interface for the Weth9 contract. diff --git a/v2/docs/src/contracts/zevm/interfaces/IZRC20.sol/enum.CoinType.md b/v2/docs/src/contracts/zevm/interfaces/IZRC20.sol/enum.CoinType.md index 5b727e96..0020dfc6 100644 --- a/v2/docs/src/contracts/zevm/interfaces/IZRC20.sol/enum.CoinType.md +++ b/v2/docs/src/contracts/zevm/interfaces/IZRC20.sol/enum.CoinType.md @@ -1,5 +1,5 @@ # CoinType -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/zevm/interfaces/IZRC20.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/zevm/interfaces/IZRC20.sol) *Coin types for ZRC20. Zeta value should not be used.* diff --git a/v2/docs/src/contracts/zevm/interfaces/IZRC20.sol/interface.IZRC20.md b/v2/docs/src/contracts/zevm/interfaces/IZRC20.sol/interface.IZRC20.md index f21f134b..d37b0c16 100644 --- a/v2/docs/src/contracts/zevm/interfaces/IZRC20.sol/interface.IZRC20.md +++ b/v2/docs/src/contracts/zevm/interfaces/IZRC20.sol/interface.IZRC20.md @@ -1,5 +1,5 @@ # IZRC20 -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/zevm/interfaces/IZRC20.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/zevm/interfaces/IZRC20.sol) Interface for the ZRC20 token contract. diff --git a/v2/docs/src/contracts/zevm/interfaces/IZRC20.sol/interface.IZRC20Metadata.md b/v2/docs/src/contracts/zevm/interfaces/IZRC20.sol/interface.IZRC20Metadata.md index 999ee681..f503d704 100644 --- a/v2/docs/src/contracts/zevm/interfaces/IZRC20.sol/interface.IZRC20Metadata.md +++ b/v2/docs/src/contracts/zevm/interfaces/IZRC20.sol/interface.IZRC20Metadata.md @@ -1,5 +1,5 @@ # IZRC20Metadata -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/zevm/interfaces/IZRC20.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/zevm/interfaces/IZRC20.sol) **Inherits:** [IZRC20](/contracts/zevm/interfaces/IZRC20.sol/interface.IZRC20.md) diff --git a/v2/docs/src/contracts/zevm/interfaces/IZRC20.sol/interface.ZRC20Events.md b/v2/docs/src/contracts/zevm/interfaces/IZRC20.sol/interface.ZRC20Events.md index 5bd4bd99..fc49e913 100644 --- a/v2/docs/src/contracts/zevm/interfaces/IZRC20.sol/interface.ZRC20Events.md +++ b/v2/docs/src/contracts/zevm/interfaces/IZRC20.sol/interface.ZRC20Events.md @@ -1,5 +1,5 @@ # ZRC20Events -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/zevm/interfaces/IZRC20.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/zevm/interfaces/IZRC20.sol) Interface for the ZRC20 events. diff --git a/v2/docs/src/contracts/zevm/interfaces/README.md b/v2/docs/src/contracts/zevm/interfaces/README.md index b412a802..27c982d5 100644 --- a/v2/docs/src/contracts/zevm/interfaces/README.md +++ b/v2/docs/src/contracts/zevm/interfaces/README.md @@ -4,6 +4,7 @@ - [IGatewayZEVMEvents](IGatewayZEVM.sol/interface.IGatewayZEVMEvents.md) - [IGatewayZEVMErrors](IGatewayZEVM.sol/interface.IGatewayZEVMErrors.md) - [IGatewayZEVM](IGatewayZEVM.sol/interface.IGatewayZEVM.md) +- [CallOptions](IGatewayZEVM.sol/struct.CallOptions.md) - [ISystem](ISystem.sol/interface.ISystem.md) - [IWETH9](IWZETA.sol/interface.IWETH9.md) - [IZRC20](IZRC20.sol/interface.IZRC20.md) diff --git a/v2/docs/src/contracts/zevm/interfaces/UniversalContract.sol/interface.UniversalContract.md b/v2/docs/src/contracts/zevm/interfaces/UniversalContract.sol/interface.UniversalContract.md index d07b4e44..900df737 100644 --- a/v2/docs/src/contracts/zevm/interfaces/UniversalContract.sol/interface.UniversalContract.md +++ b/v2/docs/src/contracts/zevm/interfaces/UniversalContract.sol/interface.UniversalContract.md @@ -1,5 +1,5 @@ # UniversalContract -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/zevm/interfaces/UniversalContract.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/zevm/interfaces/UniversalContract.sol) ## Functions @@ -10,10 +10,3 @@ function onCrossChainCall(zContext calldata context, address zrc20, uint256 amount, bytes calldata message) external; ``` -### onRevert - - -```solidity -function onRevert(RevertContext calldata revertContext) external; -``` - 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 2720253a..3aa62bb9 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,5 +1,5 @@ # zContract -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/zevm/interfaces/UniversalContract.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/zevm/interfaces/UniversalContract.sol) ## Functions 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 12e5bae8..f15fa3b7 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,5 +1,5 @@ # zContext -[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/92837ac9178ca835368558d37c2ae9322f290363/contracts/zevm/interfaces/UniversalContract.sol) +[Git Source](https://github.com/zeta-chain/protocol-contracts/blob/3a274ce7bad045a879c73669586611d35509cbce/contracts/zevm/interfaces/UniversalContract.sol) ```solidity diff --git a/v2/docs/src/index.md b/v2/docs/src/index.md index acd4a97f..fa2538bd 100644 --- a/v2/docs/src/index.md +++ b/v2/docs/src/index.md @@ -75,6 +75,8 @@ $ cast --help - [IGatewayEVMEvents](protocol/contracts/evm/interfaces/IGatewayEVM.sol/interface.IGatewayEVMEvents.md) - [IGatewayEVMErrors](protocol/contracts/evm/interfaces/IGatewayEVM.sol/interface.IGatewayEVMErrors.md) - [IGatewayEVM](protocol/contracts/evm/interfaces/IGatewayEVM.sol/interface.IGatewayEVM.md) + - [MessageContext](protocol/contracts/evm/interfaces/IGatewayEVM.sol/struct.MessageContext.md) + - [Callable](protocol/contracts/evm/interfaces/IGatewayEVM.sol/interface.Callable.md) - [IZetaConnectorEvents](protocol/contracts/evm/interfaces/IZetaConnector.sol/interface.IZetaConnectorEvents.md) - [IZetaNonEthNew](protocol/contracts/evm/interfaces/IZetaNonEthNew.sol/interface.IZetaNonEthNew.md) - [ERC20Custody](protocol/contracts/evm/ERC20Custody.sol/contract.ERC20Custody.md) @@ -87,6 +89,7 @@ $ cast --help - [IGatewayZEVMEvents](protocol/contracts/zevm/interfaces/IGatewayZEVM.sol/interface.IGatewayZEVMEvents.md) - [IGatewayZEVMErrors](protocol/contracts/zevm/interfaces/IGatewayZEVM.sol/interface.IGatewayZEVMErrors.md) - [IGatewayZEVM](protocol/contracts/zevm/interfaces/IGatewayZEVM.sol/interface.IGatewayZEVM.md) + - [CallOptions](protocol/contracts/zevm/interfaces/IGatewayZEVM.sol/struct.CallOptions.md) - [ISystem](protocol/contracts/zevm/interfaces/ISystem.sol/interface.ISystem.md) - [IWETH9](protocol/contracts/zevm/interfaces/IWZETA.sol/interface.IWETH9.md) - [IZRC20](protocol/contracts/zevm/interfaces/IZRC20.sol/interface.IZRC20.md) @@ -97,6 +100,8 @@ $ cast --help - [zContract](protocol/contracts/zevm/interfaces/UniversalContract.sol/interface.zContract.md) - [UniversalContract](protocol/contracts/zevm/interfaces/UniversalContract.sol/interface.UniversalContract.md) - [GatewayZEVM](protocol/contracts/zevm/GatewayZEVM.sol/contract.GatewayZEVM.md) + - [SystemContractErrors](protocol/contracts/zevm/SystemContract.sol/interface.SystemContractErrors.md) + - [SystemContract](protocol/contracts/zevm/SystemContract.sol/contract.SystemContract.md) - [ZRC20Errors](protocol/contracts/zevm/ZRC20.sol/interface.ZRC20Errors.md) - [ZRC20](protocol/contracts/zevm/ZRC20.sol/contract.ZRC20.md) - [RevertOptions](protocol/contracts/Revert.sol/struct.RevertOptions.md) diff --git a/v2/pkg/erc20custody.sol/erc20custody.go b/v2/pkg/erc20custody.sol/erc20custody.go index c59679a6..54213a07 100644 --- a/v2/pkg/erc20custody.sol/erc20custody.go +++ b/v2/pkg/erc20custody.sol/erc20custody.go @@ -31,6 +31,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -38,8 +39,8 @@ type RevertContext struct { // ERC20CustodyMetaData contains all meta data concerning the ERC20Custody contract. var ERC20CustodyMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"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\":\"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\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyMethodsNotSupported\",\"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\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a060405234801561001057600080fd5b50604051611eb9380380611eb983398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611e998339815191528261014c565b50610143600080516020611e998339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b608051611c22610277600039600081816101ca01528181610597015281816105f901528181610a280152610a8a0152611c226000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806385f438c1116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103fc578063e63ab1e91461040f578063eab103df1461043657600080fd5b8063d547741f146103b3578063d936547e146103c6578063d9caed12146103e957600080fd5b80639b19251a116100bd5780639b19251a14610385578063a217fddf14610398578063c709ab6e146103a057600080fd5b806385f438c11461030557806391d148541461032c5780639a5904271461037257600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102d25780635c975abb146102f25780638456cb59146102fd57600080fd5b806336568abe146102905780633f4ba83a146102a3578063570618e1146102ab57600080fd5b8063248a9ca311610176578063248a9ca314610226578063252f07bf146102585780632f2ff15d1461027d57600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610211575b600080fd5b6101b06101ab3660046115ca565b610449565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b61022461021f366004611677565b6104e2565b005b61024a6102343660046116ea565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61022461028b366004611703565b6106e3565b61022461029e366004611703565b61070f565b61022461076d565b61024a7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff166101b0565b6102246107a2565b61024a7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b061033a366004611703565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610224610380366004611733565b6107d4565b610224610393366004611733565b6108a2565b61024a600081565b6102246103ae366004611750565b610973565b6102246103c1366004611703565b610b79565b6101b06103d4366004611733565b60036020526000908152604090205460ff1681565b6102246103f73660046117f3565b610b9f565b61022461040a366004611834565b610ccb565b61024a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102246104443660046118d3565b610f2b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104dc57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104ea610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461051481610fc4565b61051c610fce565b73ffffffffffffffffffffffffffffffffffffffff851660009081526003602052604090205460ff1661057b576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bc73ffffffffffffffffffffffffffffffffffffffff86167f00000000000000000000000000000000000000000000000000000000000000008661100d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106369088908a90899089908990600401611939565b600060405180830381600087803b15801561065057600080fd5b505af1158015610664573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d58686866040516106c993929190611996565b60405180910390a3506106dc6001600055565b5050505050565b600082815260016020819052604090912001546106ff81610fc4565b610709838361108e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461075e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610768828261113b565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61079781610fc4565b61079f6111dc565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107cc81610fc4565b61079f61123b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107fe81610fc4565b73ffffffffffffffffffffffffffffffffffffffff821661084b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6108cc81610fc4565b73ffffffffffffffffffffffffffffffffffffffff8216610919576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61097b610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109a581610fc4565b6109ad610fce565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610a0c576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a4d73ffffffffffffffffffffffffffffffffffffffff87167f00000000000000000000000000000000000000000000000000000000000000008761100d565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610ac99089908b908a908a908a908a90600401611a77565b600060405180830381600087803b158015610ae357600080fd5b505af1158015610af7573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b87878787604051610b5e9493929190611ae8565b60405180910390a350610b716001600055565b505050505050565b60008281526001602081905260409091200154610b9581610fc4565b610709838361113b565b610ba7610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610bd181610fc4565b610bd9610fce565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205460ff16610c38576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5973ffffffffffffffffffffffffffffffffffffffff8416858461100d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610cb891815260200190565b60405180910390a3506107686001600055565b610cd3610f81565b610cdb610fce565b60045474010000000000000000000000000000000000000000900460ff16610d2f576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610d8e576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8616906370a0823190602401602060405180830381865afa158015610dfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1f9190611b14565b9050610e4373ffffffffffffffffffffffffffffffffffffffff8616333087611278565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efb9190611b14565b610f059190611b2d565b8787604051610f18959493929190611b67565b60405180910390a250610b716001600055565b6000610f3681610fc4565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610fbd576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61079f81336112be565b60025460ff161561100b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261076891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061134f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661113357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104dc565b5060006104dc565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561113357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104dc565b6111e46113e5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611243610fce565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112113390565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526107099186918216906323b872dd90608401611047565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661134b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b600061137173ffffffffffffffffffffffffffffffffffffffff841683611421565b905080516000141580156113965750808060200190518101906113949190611ba0565b155b15610768576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401611342565b60025460ff1661100b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061142f83836000611436565b9392505050565b606081471015611474576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611342565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161149d9190611bbd565b60006040518083038185875af1925050503d80600081146114da576040519150601f19603f3d011682016040523d82523d6000602084013e6114df565b606091505b50915091506114ef8683836114f9565b9695505050505050565b60608261150e5761150982611588565b61142f565b8151158015611532575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611581576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401611342565b508061142f565b8051156115985780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156115dc57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461142f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461079f57600080fd5b60008083601f84011261164057600080fd5b50813567ffffffffffffffff81111561165857600080fd5b60208301915083602082850101111561167057600080fd5b9250929050565b60008060008060006080868803121561168f57600080fd5b853561169a8161160c565b945060208601356116aa8161160c565b935060408601359250606086013567ffffffffffffffff8111156116cd57600080fd5b6116d98882890161162e565b969995985093965092949392505050565b6000602082840312156116fc57600080fd5b5035919050565b6000806040838503121561171657600080fd5b8235915060208301356117288161160c565b809150509250929050565b60006020828403121561174557600080fd5b813561142f8161160c565b60008060008060008060a0878903121561176957600080fd5b86356117748161160c565b955060208701356117848161160c565b945060408701359350606087013567ffffffffffffffff8111156117a757600080fd5b6117b389828a0161162e565b909450925050608087013567ffffffffffffffff8111156117d357600080fd5b87016060818a0312156117e557600080fd5b809150509295509295509295565b60008060006060848603121561180857600080fd5b83356118138161160c565b925060208401356118238161160c565b929592945050506040919091013590565b6000806000806000806080878903121561184d57600080fd5b863567ffffffffffffffff81111561186457600080fd5b61187089828a0161162e565b90975095505060208701356118848161160c565b935060408701359250606087013567ffffffffffffffff8111156118a757600080fd5b6118b389828a0161162e565b979a9699509497509295939492505050565b801515811461079f57600080fd5b6000602082840312156118e557600080fd5b813561142f816118c5565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061198b6080830184866118f0565b979650505050505050565b8381526040602082015260006119b06040830184866118f0565b95945050505050565b600081356119c68161160c565b73ffffffffffffffffffffffffffffffffffffffff168352602082013567ffffffffffffffff81168082146119fa57600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112611a3657600080fd5b820160208101903567ffffffffffffffff811115611a5357600080fd5b803603821315611a6257600080fd5b606060408601526119b06060860182846118f0565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a060608201526000611ac960a0830185876118f0565b8281036080840152611adb81856119b9565b9998505050505050505050565b848152606060208201526000611b026060830185876118f0565b828103604084015261198b81856119b9565b600060208284031215611b2657600080fd5b5051919050565b818103818111156104dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606081526000611b7b6060830187896118f0565b8560208401528281036040840152611b948185876118f0565b98975050505050505050565b600060208284031215611bb257600080fd5b815161142f816118c5565b6000825160005b81811015611bde5760208186018101518583015201611bc4565b50600092019182525091905056fea264697066735822122029d8a02c5c60bae7d404d08786de2b2dd6b37e11d10fa76c968c7809ff06f3b864736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"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\":\"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\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyMethodsNotSupported\",\"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\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a060405234801561001057600080fd5b50604051611c7f380380611c7f83398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611c5f8339815191528261014c565b50610143600080516020611c5f8339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b6080516119e8610277600039600081816101ca01528181610556015281816105ab015281816107c8015261081d01526119e86000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638456cb59116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103d5578063e63ab1e9146103e8578063eab103df1461040f57600080fd5b8063d547741f1461038c578063d936547e1461039f578063d9caed12146103c257600080fd5b80639a590427116100bd5780639a5904271461035e5780639b19251a14610371578063a217fddf1461038457600080fd5b80638456cb59146102f657806385f438c1146102fe57806391d148541461032557600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102c55780635c975abb146102d85780635eb72e15146102e357600080fd5b806336568abe146102835780633f4ba83a14610296578063570618e11461029e57600080fd5b8063248a9ca311610176578063248a9ca314610219578063252f07bf1461024b5780632f2ff15d1461027057600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610204575b600080fd5b6101b06101ab3660046113c2565b610422565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bc565b610217610212366004611462565b6104bb565b005b61023d6102273660046114d5565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61021761027e3660046114ee565b61067b565b6102176102913660046114ee565b6106a7565b6102176106f8565b61023d7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec906001600160a01b031681565b60025460ff166101b0565b6102176102f136600461151e565b61072d565b6102176108f2565b61023d7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b06103333660046114ee565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61021761036c3660046115c1565b610924565b61021761037f3660046115c1565b6109d8565b61023d600081565b61021761039a3660046114ee565b610a8f565b6101b06103ad3660046115c1565b60036020526000908152604090205460ff1681565b6102176103d03660046115de565b610ab5565b6102176103e336600461161f565b610bad565b61023d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61021761041d3660046116be565b610dd9565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104b557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104c3610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104ed81610e72565b6104f5610e7c565b6001600160a01b03851660009081526003602052604090205460ff16610547576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61057b6001600160a01b0386167f000000000000000000000000000000000000000000000000000000000000000086610ebb565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906105e89088908a90899089908990600401611724565b600060405180830381600087803b15801561060257600080fd5b505af1158015610616573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161066193929190611767565b60405180910390a3506106746001600055565b5050505050565b6000828152600160208190526040909120015461069781610e72565b6106a18383610f2f565b50505050565b6001600160a01b03811633146106e9576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106f38282610fc2565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61072281610e72565b61072a611049565b50565b610735610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461075f81610e72565b610767610e7c565b6001600160a01b03861660009081526003602052604090205460ff166107b9576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107ed6001600160a01b0387167f000000000000000000000000000000000000000000000000000000000000000087610ebb565b6040517f36c99f3b0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b9061085c9089908b908a908a908a908a90600401611857565b600060405180830381600087803b15801561087657600080fd5b505af115801561088a573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37878787876040516108d794939291906118ae565b60405180910390a3506108ea6001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61091c81610e72565b61072a61109b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61094e81610e72565b6001600160a01b03821661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a0281610e72565b6001600160a01b038216610a42576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610aab81610e72565b6106a18383610fc2565b610abd610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ae781610e72565b610aef610e7c565b6001600160a01b03831660009081526003602052604090205460ff16610b41576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b556001600160a01b0384168584610ebb565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610b9a91815260200190565b60405180910390a3506106f36001600055565b610bb5610e2f565b610bbd610e7c565b60045474010000000000000000000000000000000000000000900460ff16610c11576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610c63576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce791906118da565b9050610cfe6001600160a01b0386163330876110d8565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610d85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da991906118da565b610db391906118f3565b8787604051610dc695949392919061192d565b60405180910390a2506108ea6001600055565b6000610de481610e72565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610e6b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61072a8133611111565b60025460ff1615610eb9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b038381166024830152604482018390526106f391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611188565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16610fba5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104b5565b5060006104b5565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1615610fba5760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104b5565b611051611204565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6110a3610e7c565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861107e3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106a19186918216906323b872dd90608401610ee8565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611184576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b600061119d6001600160a01b03841683611240565b905080516000141580156111c25750808060200190518101906111c09190611966565b155b156106f3576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161117b565b60025460ff16610eb9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061124e83836000611255565b9392505050565b606081471015611293576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161117b565b600080856001600160a01b031684866040516112af9190611983565b60006040518083038185875af1925050503d80600081146112ec576040519150601f19603f3d011682016040523d82523d6000602084013e6112f1565b606091505b509150915061130186838361130b565b9695505050505050565b6060826113205761131b82611380565b61124e565b815115801561133757506001600160a01b0384163b155b15611379576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161117b565b508061124e565b8051156113905780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156113d457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461124e57600080fd5b6001600160a01b038116811461072a57600080fd5b60008083601f84011261142b57600080fd5b50813567ffffffffffffffff81111561144357600080fd5b60208301915083602082850101111561145b57600080fd5b9250929050565b60008060008060006080868803121561147a57600080fd5b853561148581611404565b9450602086013561149581611404565b935060408601359250606086013567ffffffffffffffff8111156114b857600080fd5b6114c488828901611419565b969995985093965092949392505050565b6000602082840312156114e757600080fd5b5035919050565b6000806040838503121561150157600080fd5b82359150602083013561151381611404565b809150509250929050565b60008060008060008060a0878903121561153757600080fd5b863561154281611404565b9550602087013561155281611404565b945060408701359350606087013567ffffffffffffffff81111561157557600080fd5b61158189828a01611419565b909450925050608087013567ffffffffffffffff8111156115a157600080fd5b87016080818a0312156115b357600080fd5b809150509295509295509295565b6000602082840312156115d357600080fd5b813561124e81611404565b6000806000606084860312156115f357600080fd5b83356115fe81611404565b9250602084013561160e81611404565b929592945050506040919091013590565b6000806000806000806080878903121561163857600080fd5b863567ffffffffffffffff81111561164f57600080fd5b61165b89828a01611419565b909750955050602087013561166f81611404565b935060408701359250606087013567ffffffffffffffff81111561169257600080fd5b61169e89828a01611419565b979a9699509497509295939492505050565b801515811461072a57600080fd5b6000602082840312156116d057600080fd5b813561124e816116b0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061175c6080830184866116db565b979650505050505050565b8381526040602082015260006117816040830184866116db565b95945050505050565b6000813561179781611404565b6001600160a01b0316835260208201356117b081611404565b6001600160a01b03166020840152604082013567ffffffffffffffff81168082146117da57600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261181657600080fd5b820160208101903567ffffffffffffffff81111561183357600080fd5b80360382131561184257600080fd5b608060608601526117816080860182846116db565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061188f60a0830185876116db565b82810360808401526118a1818561178a565b9998505050505050505050565b8481526060602082015260006118c86060830185876116db565b828103604084015261175c818561178a565b6000602082840312156118ec57600080fd5b5051919050565b818103818111156104b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006119416060830187896116db565b856020840152828103604084015261195a8185876116db565b98975050505050505050565b60006020828403121561197857600080fd5b815161124e816116b0565b6000825160005b818110156119a4576020818601810151858301520161198a565b50600092019182525091905056fea2646970667358221220dc0b6596b7b61441087636724be59e8874b026b619128cbecb229a5609d1f02d64736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a", } // ERC20CustodyABI is the input ABI used to generate the binding from. @@ -812,23 +813,23 @@ func (_ERC20Custody *ERC20CustodyTransactorSession) WithdrawAndCall(to common.Ad return _ERC20Custody.Contract.WithdrawAndCall(&_ERC20Custody.TransactOpts, to, token, amount, data) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xc709ab6e. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x5eb72e15. // -// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) returns() func (_ERC20Custody *ERC20CustodyTransactor) WithdrawAndRevert(opts *bind.TransactOpts, to common.Address, token common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _ERC20Custody.contract.Transact(opts, "withdrawAndRevert", to, token, amount, data, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xc709ab6e. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x5eb72e15. // -// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) returns() func (_ERC20Custody *ERC20CustodySession) WithdrawAndRevert(to common.Address, token common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _ERC20Custody.Contract.WithdrawAndRevert(&_ERC20Custody.TransactOpts, to, token, amount, data, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xc709ab6e. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x5eb72e15. // -// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) returns() func (_ERC20Custody *ERC20CustodyTransactorSession) WithdrawAndRevert(to common.Address, token common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _ERC20Custody.Contract.WithdrawAndRevert(&_ERC20Custody.TransactOpts, to, token, amount, data, revertContext) } @@ -2408,9 +2409,9 @@ type ERC20CustodyWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ERC20Custody *ERC20CustodyFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*ERC20CustodyWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -2429,9 +2430,9 @@ func (_ERC20Custody *ERC20CustodyFilterer) FilterWithdrawnAndReverted(opts *bind return &ERC20CustodyWithdrawnAndRevertedIterator{contract: _ERC20Custody.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ERC20Custody *ERC20CustodyFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyWithdrawnAndReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2475,9 +2476,9 @@ func (_ERC20Custody *ERC20CustodyFilterer) WatchWithdrawnAndReverted(opts *bind. }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ERC20Custody *ERC20CustodyFilterer) ParseWithdrawnAndReverted(log types.Log) (*ERC20CustodyWithdrawnAndReverted, error) { event := new(ERC20CustodyWithdrawnAndReverted) if err := _ERC20Custody.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { diff --git a/v2/pkg/erc20custody.t.sol/erc20custodytest.go b/v2/pkg/erc20custody.t.sol/erc20custodytest.go index be5164c3..da94ef64 100644 --- a/v2/pkg/erc20custody.t.sol/erc20custodytest.go +++ b/v2/pkg/erc20custody.t.sol/erc20custodytest.go @@ -31,6 +31,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -65,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\":\"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\":\"testNewCustodyFailsIfAddressesAreZero\",\"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\":\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"LegacyMethodsNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5062011d0f806200003e6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c806385f438c11161019c578063ba414fa6116100ee578063f0c8e7e011610097578063fa7626d411610071578063fa7626d41461056c578063fb176c1214610579578063fe8e5f1b1461058157600080fd5b8063f0c8e7e014610554578063f4221f081461055c578063fa2a70741461056457600080fd5b8063e20c9f71116100c8578063e20c9f711461051d578063e63ab1e914610525578063eb1ce7f91461054c57600080fd5b8063ba414fa6146104f5578063c713f8271461050d578063cbd57e2f1461051557600080fd5b8063a3f9d0e011610150578063b0464fdc1161012a578063b0464fdc146104dd578063b421ca70146104e5578063b5508aa9146104ed57600080fd5b8063a3f9d0e0146104a6578063a4943deb146104ae578063a783c789146104b657600080fd5b8063916a17c611610181578063916a17c6146104815780639918c1c2146104965780639fc7fd551461049e57600080fd5b806385f438c1146104525780639158c6231461047957600080fd5b806349c783dd116102605780636a621854116102095780637e91c50f116101e35780637e91c50f1461042d57806382c529921461043557806385226c811461043d57600080fd5b80636a621854146104155780637099d6f81461041d57806371149c941461042557600080fd5b8063570618e11161023a578063570618e1146103a45780635d62c860146103d957806366d9a9a01461040057600080fd5b806349c783dd1461038c5780634b5838d21461039457806351ecdf3c1461039c57600080fd5b80632ade3880116102c25780633e73ecb41161029c5780633e73ecb4146103745780633ee929231461037c5780633f7286f41461038457600080fd5b80632ade38801461034f5780632be6a162146103645780633e5e3c231461036c57600080fd5b80631779672f116102f35780631779672f146103215780631ed7831c14610329578063284cb9291461034757600080fd5b80630a9254e41461030f5780630eee72a914610319575b600080fd5b610317610589565b005b610317610fe7565b61031761128c565b6103316113dd565b60405161033e919061b1a4565b60405180910390f35b61031761143f565b610357611723565b60405161033e919061b240565b610317611865565b610331611a57565b610317611ab7565b61031761202c565b6103316120fb565b61031761215b565b610317612498565b6103176127b6565b6103cb7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60405190815260200161033e565b6103cb7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b610408612987565b60405161033e919061b3a6565b610317612b09565b610317612bd5565b610317612e82565b610317613697565b610317613822565b610445613a96565b60405161033e919061b444565b6103cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610317613b66565b610489613c34565b60405161033e919061b4bb565b610317613d2f565b610317614029565b6103176140f7565b6103176146ff565b6103cb7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b610489614927565b610317614a22565b610445614f57565b6104fd615027565b604051901515815260200161033e565b6103176150fb565b610317615d9e565b610331615e5f565b6103cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b610317615ebf565b610317615fcb565b61031761618d565b6103176163fa565b601f546104fd9060ff1681565b6103176166d8565b610317616d56565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516105db9061b0b3565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610660573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516106a59061b0b3565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610729573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260285460265492519085166024820152604481019390935292166064820152610818919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052616f47565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906108a49061b0c1565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156108e0573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061093b9061b0cf565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801561097f573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516109c49061b0dd565b604051809103906000f0801580156109e0573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a8c57600080fd5b505af1158015610aa0573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610b1657600080fd5b505af1158015610b2a573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610b9057600080fd5b505af1158015610ba4573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610c0a57600080fd5b505af1158015610c1e573d6000803e3d6000fd5b5050602254602480546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639b19251a925001600060405180830381600087803b158015610c8357600080fd5b505af1158015610c97573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610cf957600080fd5b505af1158015610d0d573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610d7e57600080fd5b505af1158015610d92573d6000803e3d6000fd5b50506025546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b158015610e0157600080fd5b505af1158015610e15573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610e8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eaf919061b552565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610f3057600080fd5b505af1158015610f44573d6000803e3d6000fd5b5050604080516060810182526024546001600160a01b039081168252600160208084019182528451908101855260008152938301849052825160298054925167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090931691909316171781559093509150602a90610fe2908261b637565b505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc513169100000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156110cc57600080fd5b505af11580156110e0573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506111cb919060040161b6f6565b600060405180830381600087803b1580156111e557600080fd5b505af11580156111f9573d6000803e3d6000fd5b50506022546021546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506112569392831692909116908790879060040161b709565b600060405180830381600087803b15801561127057600080fd5b505af1158015611284573d6000803e3d6000fd5b505050505050565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b15801561136e57600080fd5b505af1158015611382573d6000803e3d6000fd5b5050604051630618f58760e51b81527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016111cb565b6060601680548060200260200160405190810160405280929190818152602001828054801561143557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611417575b5050505050905090565b6022546025546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600092919091169063d936547e90602401602060405180830381865afa1580156114a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114cd919061b552565b90506114da600082616f66565b6022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561154f57600080fd5b505af1158015611563573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549150600090a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156115f857600080fd5b505af115801561160c573d6000803e3d6000fd5b50506022546025546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b15801561167257600080fd5b505af1158015611686573d6000803e3d6000fd5b50506022546025546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063d936547e9150602401602060405180830381865afa1580156116ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611713919061b552565b9050611720600182616f66565b50565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561185c57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156118455783829060005260206000200180546117b89061b5a3565b80601f01602080910402602001604051908101604052809291908181526020018280546117e49061b5a3565b80156118315780601f1061180657610100808354040283529160200191611831565b820191906000526020600020905b81548152906001019060200180831161181457829003601f168201915b505050505081526020019060010190611799565b505050508152505081526020019060010190611747565b50505050905090565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156118b357600080fd5b505af11580156118c7573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506119a8919060040161b6f6565b600060405180830381600087803b1580156119c257600080fd5b505af11580156119d6573d6000803e3d6000fd5b50506022546025546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a91506024015b600060405180830381600087803b158015611a3d57600080fd5b505af1158015611a51573d6000803e3d6000fd5b50505050565b60606018805480602002602001604051908101604052809291908181526020018280548015611435576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611417575050505050905090565b602480546027546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa158015611b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b30919061b740565b9050611b3d816000616fe8565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb1919061b740565b6027546040516001600160a01b0390911660248201526044810185905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611c94916001600160a01b039190911690600090869060040161b759565b600060405180830381600087803b158015611cae57600080fd5b505af1158015611cc2573d6000803e3d6000fd5b50506022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611d3b57600080fd5b505af1158015611d4f573d6000803e3d6000fd5b50506024546027546040518881526001600160a01b039283169450911691507fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb9060200160405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611df457600080fd5b505af1158015611e08573d6000803e3d6000fd5b5050602254602754602480546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015290831691810191909152604481018990529116925063d9caed129150606401600060405180830381600087803b158015611e8357600080fd5b505af1158015611e97573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0d919061b740565b9050611f198186616fe8565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611f69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8d919061b740565b9050611fa281611f9d888761b7b0565b616fe8565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611ff2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612016919061b740565b9050612023816000616fe8565b50505050505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024016110b2565b60606017805480602002602001604051908101604052809291908181526020018280548015611435576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611417575050505050905090565b6022546040517feab103df000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169063eab103df90602401600060405180830381600087803b1580156121ba57600080fd5b505af11580156121ce573d6000803e3d6000fd5b5050602480546022546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42409381019390935216925063095ea7b391506044016020604051808303816000875af1158015612244573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612268919061b552565b506025546022546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240602482015291169063095ea7b3906044016020604051808303816000875af11580156122d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122fd919061b552565b50604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025820192839052630618f58760e51b9092527f73cba663000000000000000000000000000000000000000000000000000000006029820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906049015b600060405180830381600087803b1580156123a557600080fd5b505af11580156123b9573d6000803e3d6000fd5b505060225460275460405160609190911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208201526001600160a01b03909116925063e609055e915060340160408051601f19818403018152908290526024547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352612463926001600160a01b03909116906103e890879060040161b7c3565b600060405180830381600087803b15801561247d57600080fd5b505af1158015612491573d6000803e3d6000fd5b5050505050565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561250457600080fd5b505af1158015612518573d6000803e3d6000fd5b5050602854602654604051600094508493506001600160a01b0392831692909116906125439061b0c1565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561257f573d6000803e3d6000fd5b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156125ef57600080fd5b505af1158015612603573d6000803e3d6000fd5b50506020546026546040516001600160a01b0392831694506000935091169061262b9061b0c1565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015612667573d6000803e3d6000fd5b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156126d757600080fd5b505af11580156126eb573d6000803e3d6000fd5b50506020546028546040516001600160a01b039283169450911691506000906127139061b0c1565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561274f573d6000803e3d6000fd5b506020546028546026546040519394506001600160a01b039283169391831692169061277a9061b0c1565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610fe2573d6000803e3d6000fd5b6024805460275460405160019381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561289857600080fd5b505af11580156128ac573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561291c57600080fd5b505af1158015612930573d6000803e3d6000fd5b50506022546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321fc65f293506112569260009216908790879060040161b709565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561185c57838290600052602060002090600202016040518060400160405290816000820180546129de9061b5a3565b80601f0160208091040260200160405190810160405280929190818152602001828054612a0a9061b5a3565b8015612a575780601f10612a2c57610100808354040283529160200191612a57565b820191906000526020600020905b815481529060010190602001808311612a3a57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015612af157602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612a9e5790505b505050505081525050815260200190600101906129ab565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc513169100000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611354565b6022546040517feab103df000000000000000000000000000000000000000000000000000000008152600160048201526001600160a01b039091169063eab103df90602401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b158015612cad57600080fd5b505af1158015612cc1573d6000803e3d6000fd5b5050602480546022546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42409381019390935216925063095ea7b391506044016020604051808303816000875af1158015612d37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d5b919061b552565b506025546022546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240602482015291169063095ea7b3906044016020604051808303816000875af1158015612dcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df0919061b552565b50604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025820192839052630618f58760e51b9092527f584a7938000000000000000000000000000000000000000000000000000000006029820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e09060490161238b565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015612f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f39919061b740565b9050612f46816000616fe8565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612f96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fba919061b740565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161309d916001600160a01b039190911690600090869060040161b759565b600060405180830381600087803b1580156130b757600080fd5b505af11580156130cb573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561314457600080fd5b505af1158015613158573d6000803e3d6000fd5b50506020546040517f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e935061319c92506001600160a01b039091169060299061b8d2565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561321957600080fd5b505af115801561322d573d6000803e3d6000fd5b50506024546021546040516001600160a01b039283169450911691507f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b14369061327b908990899060299061b8f4565b60405180910390a36022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156132f857600080fd5b505af115801561330c573d6000803e3d6000fd5b50506024546021546040516001600160a01b039283169450911691507f2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b9061335a908990899060299061b8f4565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156133bb57600080fd5b505af11580156133cf573d6000803e3d6000fd5b50506022546021546024546040517fc709ab6e0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c709ab6e945061342f9392831692909116908a908a9060299060040161b91f565b600060405180830381600087803b15801561344957600080fd5b505af115801561345d573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156134b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d4919061b740565b90506134e08187616fe8565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613530573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613554919061b740565b905061356481611f9d898761b7b0565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156135da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135fe919061b740565b905061360b816000616fe8565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561365b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061367f919061b740565b905061368c816000616fe8565b505050505050505050565b6040517f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260019060009060250160408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561373057600080fd5b505af1158015613744573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156137b457600080fd5b505af11580156137c8573d6000803e3d6000fd5b50506022546024546040517fc709ab6e0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c709ab6e93506112569260009216908790879060299060040161b91f565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b15801561390d57600080fd5b505af1158015613921573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561399157600080fd5b505af11580156139a5573d6000803e3d6000fd5b5050602254602754602480546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015290831691810191909152600160448201529116925063d9caed129150606401600060405180830381600087803b158015613a2057600080fd5b505af1158015613a34573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611a3d57600080fd5b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561185c578382906000526020600020018054613ad99061b5a3565b80601f0160208091040260200160405190810160405280929190818152602001828054613b059061b5a3565b8015613b525780601f10613b2757610100808354040283529160200191613b52565b820191906000526020600020905b815481529060010190602001808311613b3557829003601f168201915b505050505081526020019060010190613aba565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613bd257600080fd5b505af1158015613be6573d6000803e3d6000fd5b50506022546040517f9a590427000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169250639a5904279150602401611a23565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561185c5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015613d1757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411613cc45790505b50505050508152505081526020019060010190613c58565b602480546027546040516001938101939093526001600160a01b03918216604484015216606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260285490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015613e2a57600080fd5b505af1158015613e3e573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b158015613ea357600080fd5b505af1158015613eb7573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613f2757600080fd5b505af1158015613f3b573d6000803e3d6000fd5b50506022546021546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450613f99939283169290911690600190879060040161b709565b600060405180830381600087803b158015613fb357600080fd5b505af1158015613fc7573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561247d57600080fd5b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561409557600080fd5b505af11580156140a9573d6000803e3d6000fd5b50506022546040517f9b19251a000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169250639b19251a9150602401611a23565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052805460275494516370a0823160e01b81526001600160a01b0395861693810193909352620186a0946000939116916370a082319101602060405180830381865afa1580156141a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141c5919061b740565b90506141d2816000616fe8565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614222573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614246919061b740565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614329916001600160a01b039190911690600090869060040161b759565b600060405180830381600087803b15801561434357600080fd5b505af1158015614357573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156143d057600080fd5b505af11580156143e4573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561449d57600080fd5b505af11580156144b1573d6000803e3d6000fd5b50506024546021546040516001600160a01b039283169450911691507f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d5906144fc908990899061b974565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561455d57600080fd5b505af1158015614571573d6000803e3d6000fd5b50506022546021546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506145ce9392831692909116908a908a9060040161b709565b600060405180830381600087803b1580156145e857600080fd5b505af11580156145fc573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561464e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614672919061b740565b905061467f816000616fe8565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156146cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146f3919061b740565b90506135648185616fe8565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561479a57600080fd5b505af11580156147ae573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614899919060040161b6f6565b600060405180830381600087803b1580156148b357600080fd5b505af11580156148c7573d6000803e3d6000fd5b50506022546021546024546040517fc709ab6e0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c709ab6e94506112569392831692909116908790879060299060040161b91f565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561185c5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015614a0a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116149b75790505b5050505050815250508152602001906001019061494b565b6022546040517feab103df000000000000000000000000000000000000000000000000000000008152600160048201526103e8916001600160a01b03169063eab103df90602401600060405180830381600087803b158015614a8357600080fd5b505af1158015614a97573d6000803e3d6000fd5b5050602480546022546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42409381019390935216925063095ea7b391506044016020604051808303816000875af1158015614b0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b31919061b552565b506025546022546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240602482015291169063095ea7b3906044016020604051808303816000875af1158015614ba2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bc6919061b552565b50602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614c17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c3b919061b740565b6025546028546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015614c8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cb1919061b740565b90506000604051602001614ce8907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f19018152908290526022546381bad6f360e01b8352600160048401819052602484018190526044840181905260648401526001600160a01b031660848301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614d6b57600080fd5b505af1158015614d7f573d6000803e3d6000fd5b505060245460275460405160609190911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208201526001600160a01b0390911692507f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae915060340160408051601f1981840301815290829052614e08918890869061b98d565b60405180910390a26022546027546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051808303601401815260348301918290526024547fe609055e000000000000000000000000000000000000000000000000000000009092526001600160a01b039384169363e609055e93614ea79391909116908990879060380161b7c3565b600060405180830381600087803b158015614ec157600080fd5b505af1158015614ed5573d6000803e3d6000fd5b50505050611a518484614ee8919061b9b8565b602480546022546040516370a0823160e01b81526001600160a01b0391821660048201529116916370a082319101602060405180830381865afa158015614f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9d919061b740565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561185c578382906000526020600020018054614f9a9061b5a3565b80601f0160208091040260200160405190810160405280929190818152602001828054614fc69061b5a3565b80156150135780601f10614fe857610100808354040283529160200191615013565b820191906000526020600020905b815481529060010190602001808311614ff657829003601f168201915b505050505081526020019060010190614f7b565b60085460009060ff161561503f575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156150d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150f4919061b740565b1415905090565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561515457600080fd5b505af1158015615168573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250615253919060040161b6f6565b600060405180830381600087803b15801561526d57600080fd5b505af1158015615281573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156152d557600080fd5b505af11580156152e9573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561534657600080fd5b505af115801561535a573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250615445919060040161b6f6565b600060405180830381600087803b15801561545f57600080fd5b505af1158015615473573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156154c757600080fd5b505af11580156154db573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561553857600080fd5b505af115801561554c573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156155a057600080fd5b505af11580156155b4573d6000803e3d6000fd5b505060248054602754604051620186a09381018490526001600160a01b039283166044820152911660648201529092506000915060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905251630618f58760e51b81527fd93c0665000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156156b057600080fd5b505af11580156156c4573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561572157600080fd5b505af1158015615735573d6000803e3d6000fd5b50506022546021546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506157929392831692909116908790879060040161b709565b600060405180830381600087803b1580156157ac57600080fd5b505af11580156157c0573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561581d57600080fd5b505af1158015615831573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561588557600080fd5b505af1158015615899573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156158ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615910919061b740565b905061591d816000616fe8565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561596d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615991919061b740565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391615a74916001600160a01b039190911690600090869060040161b759565b600060405180830381600087803b158015615a8e57600080fd5b505af1158015615aa2573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015615b1b57600080fd5b505af1158015615b2f573d6000803e3d6000fd5b505060208054602454602754604080516001600160a01b0394851681529485018c905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015615c0557600080fd5b505af1158015615c19573d6000803e3d6000fd5b50506024546021546040516001600160a01b039283169450911691507f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d590615c64908990899061b974565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615cc557600080fd5b505af1158015615cd9573d6000803e3d6000fd5b50506022546021546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450615d369392831692909116908a908a9060040161b709565b600060405180830381600087803b158015615d5057600080fd5b505af1158015615d64573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101613493565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a0823191016158cf565b60606015805480602002602001604051908101604052809291908181526020018280548015611435576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611417575050505050905090565b600080604051602001615ef5907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615f5c57600080fd5b505af1158015615f70573d6000803e3d6000fd5b5050604051630618f58760e51b81527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401614899565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561601957600080fd5b505af115801561602d573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061610e919060040161b6f6565b600060405180830381600087803b15801561612857600080fd5b505af115801561613c573d6000803e3d6000fd5b50506022546025546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401611a23565b602480546027546040516001938101939093526001600160a01b03918216604484015216606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260285490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561628857600080fd5b505af115801561629c573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b15801561630157600080fd5b505af1158015616315573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561638557600080fd5b505af1158015616399573d6000803e3d6000fd5b50506022546021546024546040517fc709ab6e0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c709ab6e9450613f99939283169290911690600190879060299060040161b91f565b602254602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600093919091169163d936547e9101602060405180830381865afa158015616463573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616487919061b552565b9050616494600182616f66565b6022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561650957600080fd5b505af115801561651d573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919150600090a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156165b257600080fd5b505af11580156165c6573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b15801561662b57600080fd5b505af115801561663f573d6000803e3d6000fd5b5050602254602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529216935063d936547e925001602060405180830381865afa1580156166a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906166cb919061b552565b9050611720600082616f66565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa1580156167b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906167d5919061b740565b90506167e2816000616fe8565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015616832573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616856919061b740565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391616939916001600160a01b039190911690600090869060040161b759565b600060405180830381600087803b15801561695357600080fd5b505af1158015616967573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156169e057600080fd5b505af11580156169f4573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050616a3260028861b9cb565b602454602754604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015616ae157600080fd5b505af1158015616af5573d6000803e3d6000fd5b50506024546021546040516001600160a01b039283169450911691507f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d590616b40908990899061b974565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015616ba157600080fd5b505af1158015616bb5573d6000803e3d6000fd5b50506022546021546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450616c129392831692909116908a908a9060040161b709565b600060405180830381600087803b158015616c2c57600080fd5b505af1158015616c40573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015616c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616cb6919061b740565b9050616cc781611f9d60028961b9cb565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015616d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616d3b919061b740565b905061356481616d4c60028a61b9cb565b611f9d908761b7b0565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015616db457600080fd5b505af1158015616dc8573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250616eb3919060040161b6f6565b600060405180830381600087803b158015616ecd57600080fd5b505af1158015616ee1573d6000803e3d6000fd5b5050602254602754602480546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015290831691810191909152604481018690529116925063d9caed129150606401612463565b6000616f5161b0eb565b616f5c848483617040565b9150505b92915050565b6040517ff7fe347700000000000000000000000000000000000000000000000000000000815282151560048201528115156024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f7fe3477906044015b60006040518083038186803b158015616fd457600080fd5b505afa158015611284573d6000803e3d6000fd5b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c5490604401616fbc565b60008061704d85846170bb565b90506170b06040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161709b92919061ba06565b604051602081830303815290604052856170c7565b9150505b9392505050565b60006170b483836170f5565b60c081015151600090156170eb576170e484848460c00151617110565b90506170b4565b6170e484846172b6565b600061710183836173a1565b6170b4838360200151846170c7565b60008061711b6173b1565b905060006171298683617484565b90506000617140826060015183602001518561792a565b9050600061715083838989617b3c565b9050600061715d826189b9565b602081015181519192509060030b156171d05789826040015160405160200161718792919061ba28565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526171c79160040161b6f6565b60405180910390fd5b60006172136040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001618b88565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061726690849060040161b6f6565b602060405180830381865afa158015617283573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906172a7919061baa9565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061730b90879060040161b6f6565b600060405180830381865afa158015617328573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617350919081019061bb8b565b9050600061737e828560405160200161736a92919061bbc0565b604051602081830303815290604052618d88565b90506001600160a01b038116616f5c57848460405160200161718792919061bbef565b6173ad82826000618d9b565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061743890849060040161bc9a565b600060405180830381865afa158015617455573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261747d919081019061bce1565b9250505090565b6174b66040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506175016040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61750a85618e9e565b6020820152600061751a86619283565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561755c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617584919081019061bce1565b8683856020015160405160200161759e949392919061bd2a565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906175f690859060040161b6f6565b600060405180830381865afa158015617613573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261763b919081019061bce1565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061768390849060040161be2e565b602060405180830381865afa1580156176a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906176c4919061b552565b6176d95781604051602001617187919061be80565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061771e90849060040161bf12565b600060405180830381865afa15801561773b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617763919081019061bce1565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906177aa90849060040161bf64565b602060405180830381865afa1580156177c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906177eb919061b552565b15617880576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061783590849060040161bf64565b600060405180830381865afa158015617852573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261787a919081019061bce1565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016178a5919061bfb6565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016178d192919061c022565b600060405180830381865afa1580156178ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617916919081019061bce1565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816179465790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106179a6576179a661c047565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106179fa576179fa61c047565b602002602001018190525084604051602001617a16919061c076565b60405160208183030381529060405281600281518110617a3857617a3861c047565b602002602001018190525082604051602001617a54919061c0e2565b60405160208183030381529060405281600381518110617a7657617a7661c047565b60200260200101819052506000617a8c826189b9565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250617b1d9060408051808201825260008082526020918201528151808301909252845182528085019082015290619506565b617b325785604051602001617187919061c123565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015617b8c565b511590565b617d0057826020015115617c48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016171c7565b8260c0015115617d00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016171c7565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081617d1957905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280617d749061c1b4565b935060ff1681518110617d8957617d8961c047565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001617dda919061c1d3565b604051602081830303815290604052828280617df59061c1b4565b935060ff1681518110617e0a57617e0a61c047565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280617e579061c1b4565b935060ff1681518110617e6c57617e6c61c047565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280617eb99061c1b4565b935060ff1681518110617ece57617ece61c047565b60200260200101819052508760200151828280617eea9061c1b4565b935060ff1681518110617eff57617eff61c047565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280617f4c9061c1b4565b935060ff1681518110617f6157617f6161c047565b602090810291909101015287518282617f798161c1b4565b935060ff1681518110617f8e57617f8e61c047565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280617fdb9061c1b4565b935060ff1681518110617ff057617ff061c047565b602002602001018190525061800446619567565b828261800f8161c1b4565b935060ff16815181106180245761802461c047565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806180719061c1b4565b935060ff16815181106180865761808661c047565b60200260200101819052508682828061809e9061c1b4565b935060ff16815181106180b3576180b361c047565b60209081029190910101528551156181da5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826181048161c1b4565b935060ff16815181106181195761811961c047565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061816990899060040161b6f6565b600060405180830381865afa158015618186573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526181ae919081019061bce1565b82826181b98161c1b4565b935060ff16815181106181ce576181ce61c047565b60200260200101819052505b8460200151156182aa5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826182238161c1b4565b935060ff16815181106182385761823861c047565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806182859061c1b4565b935060ff168151811061829a5761829a61c047565b6020026020010181905250618471565b6182e2617b878660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6183755760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826183258161c1b4565b935060ff168151811061833a5761833a61c047565b60200260200101819052508460a0015160405160200161835a919061c076565b6040516020818303038152906040528282806182859061c1b4565b8460c001511580156183b85750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526183b690511590565b155b156184715760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826183fc8161c1b4565b935060ff16815181106184115761841161c047565b602002602001018190525061842588619607565b604051602001618435919061c076565b6040516020818303038152906040528282806184509061c1b4565b935060ff16815181106184655761846561c047565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526184a590511590565b61853a5760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826184e88161c1b4565b935060ff16815181106184fd576184fd61c047565b602002602001018190525084604001518282806185199061c1b4565b935060ff168151811061852e5761852e61c047565b60200260200101819052505b60608501511561865b5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826185838161c1b4565b935060ff16815181106185985761859861c047565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015618607573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261862f919081019061bce1565b828261863a8161c1b4565b935060ff168151811061864f5761864f61c047565b60200260200101819052505b60e085015151156187025760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826186a58161c1b4565b935060ff16815181106186ba576186ba61c047565b60200260200101819052506186d68560e0015160000151619567565b82826186e18161c1b4565b935060ff16815181106186f6576186f661c047565b60200260200101819052505b60e085015160200151156187ac5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261874f8161c1b4565b935060ff16815181106187645761876461c047565b60200260200101819052506187808560e0015160200151619567565b828261878b8161c1b4565b935060ff16815181106187a0576187a061c047565b60200260200101819052505b60e085015160400151156188565760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826187f98161c1b4565b935060ff168151811061880e5761880e61c047565b602002602001018190525061882a8560e0015160400151619567565b82826188358161c1b4565b935060ff168151811061884a5761884a61c047565b60200260200101819052505b60e085015160600151156189005760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826188a38161c1b4565b935060ff16815181106188b8576188b861c047565b60200260200101819052506188d48560e0015160600151619567565b82826188df8161c1b4565b935060ff16815181106188f4576188f461c047565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561891e5761891e61b574565b60405190808252806020026020018201604052801561895157816020015b606081526020019060019003908161893c5790505b50905060005b8260ff168160ff1610156189aa57838160ff168151811061897a5761897a61c047565b6020026020010151828260ff16815181106189975761899761c047565b6020908102919091010152600101618957565b5093505050505b949350505050565b6189e06040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91618a669186910161c23e565b600060405180830381865afa158015618a83573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618aab919081019061bce1565b90506000618ab9868361a0f6565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401618ae9919061b444565b6000604051808303816000875af1158015618b08573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618b30919081019061c285565b805190915060030b15801590618b495750602081015151155b8015618b585750604081015151155b15617b325781600081518110618b7057618b7061c047565b6020026020010151604051602001617187919061c33b565b60606000618bbd8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150618bf49082905b9061a24b565b15618d51576000618c7182618c6b84618c65618c378a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061a272565b9061a2d4565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618cd590829061a24b565b15618d3f57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d3c905b829061a359565b90505b618d488161a37f565b925050506170b4565b8215618d6a57848460405160200161718792919061c527565b50506040805160208101909152600081526170b4565b509392505050565b6000808251602084016000f09392505050565b8160a0015115618daa57505050565b6000618db784848461a3e8565b90506000618dc4826189b9565b602081015181519192509060030b158015618e605750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e6090604080518082018252600080825260209182015281518083019092528451825280850190820152618bee565b15618e6d57505050505050565b60408201515115618e8d578160400151604051602001617187919061c5ce565b80604051602001617187919061c62c565b60606000618ed38360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618f38905b8290619506565b15618fa757604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170b490618fa290839061a983565b61a37f565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619009905b829061aa0d565b6001036190d657604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261906f90618d35565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170b490618fa2905b839061a359565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261913590618f31565b1561926c57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061919d90839061aaa7565b9050600081600183516191b0919061b7b0565b815181106191c0576191c061c047565b60200260200101519050619263618fa26192366040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061a983565b95945050505050565b82604051602001617187919061c697565b50919050565b606060006192b88360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061931a90618f31565b15619328576170b48161a37f565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261938790619002565b6001036193f157604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170b490618fa2906190cf565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261945090618f31565b1561926c57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906194b890839061aaa7565b90506001815111156194f45780600282516194d3919061b7b0565b815181106194e3576194e361c047565b602002602001015192505050919050565b5082604051602001617187919061c697565b80518251600091111561951b57506000616f60565b815183516020850151600092916195319161b9b8565b61953b919061b7b0565b905082602001518103619552576001915050616f60565b82516020840151819020912014905092915050565b606060006195748361ab4c565b600101905060008167ffffffffffffffff8111156195945761959461b574565b6040519080825280601f01601f1916602001820160405280156195be576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846195c857509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091619693905b829061ac2e565b156196d357505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526197329061968c565b1561977257505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526197d19061968c565b1561981157505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526198709061968c565b806198d55750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526198d59061968c565b1561991557505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526199749061968c565b806199d95750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526199d99061968c565b15619a1957505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619a789061968c565b80619add5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619add9061968c565b15619b1d57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619b7c9061968c565b80619be15750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619be19061968c565b15619c2157505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619c809061968c565b15619cc057505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619d1f9061968c565b15619d5f57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619dbe9061968c565b15619dfe57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619e5d9061968c565b15619e9d57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619efc9061968c565b15619f3c57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619f9b9061968c565b8061a0005750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a0009061968c565b1561a04057505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a09f9061968c565b1561a0df57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151617187929060200161c775565b60608060005b845181101561a181578185828151811061a1185761a11861c047565b602002602001015160405160200161a13192919061bbc0565b60405160208183030381529060405291506001855161a150919061b7b0565b811461a179578160405160200161a167919061c8de565b60405160208183030381529060405291505b60010161a0fc565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161a19a579050509050838160008151811061a1c55761a1c561c047565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061a2195761a21961c047565b6020026020010181905250818160028151811061a2385761a23861c047565b6020908102919091010152949350505050565b602080830151835183519284015160009361a269929184919061ac42565b14159392505050565b6040805180820190915260008082526020820152600061a2a4846000015185602001518560000151866020015161ad53565b905083602001518161a2b6919061b7b0565b8451859061a2c590839061b7b0565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561a2f9575081616f60565b602080830151908401516001911461a3205750815160208481015190840151829020919020145b801561a3515782518451859061a33790839061b7b0565b905250825160208501805161a34d90839061b9b8565b9052505b509192915050565b604080518082019091526000808252602082015261a37883838361ae73565b5092915050565b60606000826000015167ffffffffffffffff81111561a3a05761a3a061b574565b6040519080825280601f01601f19166020018201604052801561a3ca576020820181803683370190505b509050600060208201905061a378818560200151866000015161af1e565b6060600061a3f46173b1565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161a41157905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061a46c9061c1b4565b935060ff168151811061a4815761a48161c047565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161a4d2919061c91f565b60405160208183030381529060405282828061a4ed9061c1b4565b935060ff168151811061a5025761a50261c047565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061a54f9061c1b4565b935060ff168151811061a5645761a56461c047565b60200260200101819052508260405160200161a580919061c0e2565b60405160208183030381529060405282828061a59b9061c1b4565b935060ff168151811061a5b05761a5b061c047565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061a5fd9061c1b4565b935060ff168151811061a6125761a61261c047565b602002602001018190525061a627878461af98565b828261a6328161c1b4565b935060ff168151811061a6475761a64761c047565b60209081029190910101528551511561a6f35760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261a6998161c1b4565b935060ff168151811061a6ae5761a6ae61c047565b602002602001018190525061a6c786600001518461af98565b828261a6d28161c1b4565b935060ff168151811061a6e75761a6e761c047565b60200260200101819052505b85608001511561a7615760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261a73c8161c1b4565b935060ff168151811061a7515761a75161c047565b602002602001018190525061a7c7565b841561a7c75760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261a7a68161c1b4565b935060ff168151811061a7bb5761a7bb61c047565b60200260200101819052505b6040860151511561a8635760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261a8118161c1b4565b935060ff168151811061a8265761a82661c047565b6020026020010181905250856040015182828061a8429061c1b4565b935060ff168151811061a8575761a85761c047565b60200260200101819052505b85606001511561a8cd5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261a8ac8161c1b4565b935060ff168151811061a8c15761a8c161c047565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561a8eb5761a8eb61b574565b60405190808252806020026020018201604052801561a91e57816020015b606081526020019060019003908161a9095790505b50905060005b8260ff168160ff16101561a97757838160ff168151811061a9475761a94761c047565b6020026020010151828260ff168151811061a9645761a96461c047565b602090810291909101015260010161a924565b50979650505050505050565b604080518082019091526000808252602082015281518351101561a9a8575081616f60565b8151835160208501516000929161a9be9161b9b8565b61a9c8919061b7b0565b6020840151909150600190821461a9e9575082516020840151819020908220145b801561aa045783518551869061aa0090839061b7b0565b9052505b50929392505050565b600080826000015161aa31856000015186602001518660000151876020015161ad53565b61aa3b919061b9b8565b90505b8351602085015161aa4f919061b9b8565b811161a378578161aa5f8161c964565b925050826000015161aa9685602001518361aa7a919061b7b0565b865161aa86919061b7b0565b838660000151876020015161ad53565b61aaa0919061b9b8565b905061aa3e565b6060600061aab5848461aa0d565b61aac090600161b9b8565b67ffffffffffffffff81111561aad85761aad861b574565b60405190808252806020026020018201604052801561ab0b57816020015b606081526020019060019003908161aaf65790505b50905060005b8151811015618d805761ab27618fa2868661a359565b82828151811061ab395761ab3961c047565b602090810291909101015260010161ab11565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061ab95577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061abc1576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061abdf57662386f26fc10000830492506010015b6305f5e100831061abf7576305f5e100830492506008015b612710831061ac0b57612710830492506004015b6064831061ac1d576064830492506002015b600a8310616f605760010192915050565b600061ac3a838361afd8565b159392505050565b60008085841161ad49576020841161acf5576000841561ac8d57600161ac6986602061b7b0565b61ac7490600861c97e565b61ac7f90600261ca7c565b61ac89919061b7b0565b1990505b835181168561ac9c898961b9b8565b61aca6919061b7b0565b805190935082165b81811461ace05787841161acc857879450505050506189b1565b8361acd28161ca88565b94505082845116905061acae565b61acea878561b9b8565b9450505050506189b1565b83832061ad02858861b7b0565b61ad0c908761b9b8565b91505b85821061ad475784822080820361ad345761ad2a868461b9b8565b93505050506189b1565b61ad3f60018461b7b0565b92505061ad0f565b505b5092949350505050565b6000838186851161ae5e576020851161ae0d576000851561ad9f57600161ad7b87602061b7b0565b61ad8690600861c97e565b61ad9190600261ca7c565b61ad9b919061b7b0565b1990505b8451811660008761adb08b8b61b9b8565b61adba919061b7b0565b855190915083165b82811461adff5781861061ade75761adda8b8b61b9b8565b96505050505050506189b1565b8561adf18161c964565b96505083865116905061adc2565b8596505050505050506189b1565b508383206000905b61ae1f868961b7b0565b821161ae5c5785832080820361ae3b57839450505050506189b1565b61ae4660018561b9b8565b935050818061ae549061c964565b92505061ae15565b505b61ae68878761b9b8565b979650505050505050565b6040805180820190915260008082526020820152600061aea5856000015186602001518660000151876020015161ad53565b60208087018051918601919091525190915061aec1908261b7b0565b83528451602086015161aed4919061b9b8565b810361aee3576000855261af15565b8351835161aef1919061b9b8565b8551869061af0090839061b7b0565b905250835161af0f908261b9b8565b60208601525b50909392505050565b6020811061af56578151835261af3560208461b9b8565b925061af4260208361b9b8565b915061af4f60208261b7b0565b905061af1e565b600019811561af8557600161af6c83602061b7b0565b61af789061010061ca7c565b61af82919061b7b0565b90505b9151835183169219169190911790915250565b6060600061afa68484617484565b805160208083015160405193945061afc09390910161ca9f565b60405160208183030381529060405291505092915050565b815181516000919081111561afeb575081515b6020808501519084015160005b8381101561b0a4578251825180821461b07457600019602087101561b0535760018461b02589602061b7b0565b61b02f919061b9b8565b61b03a90600861c97e565b61b04590600261ca7c565b61b04f919061b7b0565b1990505b818116838216818103911461b071579750616f609650505050505050565b50505b61b07f60208661b9b8565b945061b08c60208561b9b8565b9350505060208161b09d919061b9b8565b905061aff8565b5084518651617b32919061caf7565b610c9f806200cb1883390190565b611eb9806200d7b783390190565b611783806200f67083390190565b610ee78062010df383390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161b12e61b133565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161b12e6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561b1e55783516001600160a01b031683526020938401939092019160010161b1be565b509095945050505050565b60005b8381101561b20b57818101518382015260200161b1f3565b50506000910152565b6000815180845261b22c81602086016020860161b1f0565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561b33c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561b322577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261b30c84865161b214565b602095860195909450929092019160010161b2d2565b50919750505060209485019492909201915060010161b268565b50929695505050505050565b600081518084526020840193506020830160005b8281101561b39c5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161b35c565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561b33c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261b412604088018261b214565b905060208201519150868103602088015261b42d818361b348565b96505050602093840193919091019060010161b3ce565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561b33c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261b4a685835161b214565b9450602093840193919091019060010161b46c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561b33c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261b53c604087018261b348565b955050602093840193919091019060010161b4e3565b60006020828403121561b56457600080fd5b815180151581146170b457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061b5b757607f821691505b60208210810361927d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610fe257806000526020600020601f840160051c8101602085101561b6175750805b601f840160051c820191505b81811015612491576000815560010161b623565b815167ffffffffffffffff81111561b6515761b65161b574565b61b6658161b65f845461b5a3565b8461b5f0565b6020601f82116001811461b699576000831561b6815750848201515b600019600385901b1c1916600184901b178455612491565b600084815260208120601f198516915b8281101561b6c9578785015182556020948501946001909201910161b6a9565b508482101561b6e75786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6020815260006170b4602083018461b214565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000617b32608083018461b214565b60006020828403121561b75257600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000619263606083018461b214565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115616f6057616f6061b781565b60808152600061b7d6608083018761b214565b6001600160a01b0386166020840152846040840152828103606084015261ae68818561b214565b600081546001600160a01b038116845267ffffffffffffffff8160a01c1660208501525060018201606060408501526000815461b8398161b5a3565b806060880152600182166000811461b858576001811461b8925761b8c6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166080890152608082151560051b890101935061b8c6565b84600052602060002060005b8381101561b8bd5781548a82016080015260019091019060200161b89e565b89016080019450505b50919695505050505050565b6001600160a01b03831681526040602082015260006189b1604083018461b7fd565b83815260606020820152600061b90d606083018561b214565b8281036040840152617b32818561b7fd565b6001600160a01b03861681526001600160a01b038516602082015283604082015260a06060820152600061b95660a083018561b214565b828103608084015261b968818561b7fd565b98975050505050505050565b8281526040602082015260006189b1604083018461b214565b60608152600061b9a0606083018661b214565b8460208401528281036040840152617b32818561b214565b80820180821115616f6057616f6061b781565b60008261ba01577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006189b1604083018461b214565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ba6081601a85016020880161b1f0565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161ba9d81601c84016020880161b1f0565b01601c01949350505050565b60006020828403121561babb57600080fd5b81516001600160a01b03811681146170b457600080fd5b6040516060810167ffffffffffffffff8111828210171561baf55761baf561b574565b60405290565b60008067ffffffffffffffff84111561bb165761bb1661b574565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561bb455761bb4561b574565b60405283815290508082840185101561bb5d57600080fd5b618d8084602083018561b1f0565b600082601f83011261bb7c57600080fd5b6170b48383516020850161bafb565b60006020828403121561bb9d57600080fd5b815167ffffffffffffffff81111561bbb457600080fd5b616f5c8482850161bb6b565b6000835161bbd281846020880161b1f0565b83519083019061bbe681836020880161b1f0565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161bc2781601a85016020880161b1f0565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161bc6481603384016020880161b1f0565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006170b4608083018461b214565b60006020828403121561bcf357600080fd5b815167ffffffffffffffff81111561bd0a57600080fd5b8201601f8101841361bd1b57600080fd5b616f5c8482516020840161bafb565b6000855161bd3c818460208a0161b1f0565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161bd76816001840160208a0161b1f0565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161bdb481600284016020890161b1f0565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161bdf681600284016020880161b1f0565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061be41604083018461b214565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161beb881601f85016020870161b1f0565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061bf25604083018461b214565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061bf77604083018461b214565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161bfee81601485016020870161b1f0565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061c035604083018561b214565b82810360208401526170b0818561b214565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161c0ae81600185016020870161b1f0565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161c0f481846020870161b1f0565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161c1a781604b85016020870161b1f0565b91909101604b0192915050565b600060ff821660ff810361c1ca5761c1ca61b781565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161c23181602985016020870161b1f0565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006170b4608083018461b214565b60006020828403121561c29757600080fd5b815167ffffffffffffffff81111561c2ae57600080fd5b82016060818503121561c2c057600080fd5b61c2c861bad2565b81518060030b811461c2d957600080fd5b8152602082015167ffffffffffffffff81111561c2f557600080fd5b61c3018682850161bb6b565b602083015250604082015167ffffffffffffffff81111561c32157600080fd5b61c32d8682850161bb6b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161c39981602185016020870161b1f0565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161c58581602185016020880161b1f0565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161c5c281602e84016020880161b1f0565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161c23181602985016020870161b1f0565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161c68a81602285016020870161b1f0565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161c6cf81600e85016020870161b1f0565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161c7ad81601885016020880161b1f0565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161c7ea81601c84016020880161b1f0565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161c8f081846020870161b1f0565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161c95781601c85016020870161b1f0565b91909101601c0192915050565b6000600019820361c9775761c97761b781565b5060010190565b8082028115828204841417616f6057616f6061b781565b6001815b600184111561c9d05780850481111561c9b45761c9b461b781565b600184161561c9c257908102905b60019390931c92800261c999565b935093915050565b60008261c9e757506001616f60565b8161c9f457506000616f60565b816001811461ca0a576002811461ca145761ca30565b6001915050616f60565b60ff84111561ca255761ca2561b781565b50506001821b616f60565b5060208310610133831016604e8410600b841016171561ca53575081810a616f60565b61ca60600019848461c995565b806000190482111561ca745761ca7461b781565b029392505050565b60006170b4838361c9d8565b60008161ca975761ca9761b781565b506000190190565b6000835161cab181846020880161b1f0565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161caeb81600184016020880161b1f0565b01600101949350505050565b818103600083128015838313168383128216171561a3785761a37861b78156fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a003360a060405234801561001057600080fd5b50604051611eb9380380611eb983398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611e998339815191528261014c565b50610143600080516020611e998339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b608051611c22610277600039600081816101ca01528181610597015281816105f901528181610a280152610a8a0152611c226000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806385f438c1116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103fc578063e63ab1e91461040f578063eab103df1461043657600080fd5b8063d547741f146103b3578063d936547e146103c6578063d9caed12146103e957600080fd5b80639b19251a116100bd5780639b19251a14610385578063a217fddf14610398578063c709ab6e146103a057600080fd5b806385f438c11461030557806391d148541461032c5780639a5904271461037257600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102d25780635c975abb146102f25780638456cb59146102fd57600080fd5b806336568abe146102905780633f4ba83a146102a3578063570618e1146102ab57600080fd5b8063248a9ca311610176578063248a9ca314610226578063252f07bf146102585780632f2ff15d1461027d57600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610211575b600080fd5b6101b06101ab3660046115ca565b610449565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b61022461021f366004611677565b6104e2565b005b61024a6102343660046116ea565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61022461028b366004611703565b6106e3565b61022461029e366004611703565b61070f565b61022461076d565b61024a7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff166101b0565b6102246107a2565b61024a7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b061033a366004611703565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610224610380366004611733565b6107d4565b610224610393366004611733565b6108a2565b61024a600081565b6102246103ae366004611750565b610973565b6102246103c1366004611703565b610b79565b6101b06103d4366004611733565b60036020526000908152604090205460ff1681565b6102246103f73660046117f3565b610b9f565b61022461040a366004611834565b610ccb565b61024a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102246104443660046118d3565b610f2b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104dc57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104ea610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461051481610fc4565b61051c610fce565b73ffffffffffffffffffffffffffffffffffffffff851660009081526003602052604090205460ff1661057b576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bc73ffffffffffffffffffffffffffffffffffffffff86167f00000000000000000000000000000000000000000000000000000000000000008661100d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106369088908a90899089908990600401611939565b600060405180830381600087803b15801561065057600080fd5b505af1158015610664573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d58686866040516106c993929190611996565b60405180910390a3506106dc6001600055565b5050505050565b600082815260016020819052604090912001546106ff81610fc4565b610709838361108e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461075e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610768828261113b565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61079781610fc4565b61079f6111dc565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107cc81610fc4565b61079f61123b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107fe81610fc4565b73ffffffffffffffffffffffffffffffffffffffff821661084b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6108cc81610fc4565b73ffffffffffffffffffffffffffffffffffffffff8216610919576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61097b610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109a581610fc4565b6109ad610fce565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610a0c576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a4d73ffffffffffffffffffffffffffffffffffffffff87167f00000000000000000000000000000000000000000000000000000000000000008761100d565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610ac99089908b908a908a908a908a90600401611a77565b600060405180830381600087803b158015610ae357600080fd5b505af1158015610af7573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b87878787604051610b5e9493929190611ae8565b60405180910390a350610b716001600055565b505050505050565b60008281526001602081905260409091200154610b9581610fc4565b610709838361113b565b610ba7610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610bd181610fc4565b610bd9610fce565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205460ff16610c38576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5973ffffffffffffffffffffffffffffffffffffffff8416858461100d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610cb891815260200190565b60405180910390a3506107686001600055565b610cd3610f81565b610cdb610fce565b60045474010000000000000000000000000000000000000000900460ff16610d2f576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610d8e576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8616906370a0823190602401602060405180830381865afa158015610dfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1f9190611b14565b9050610e4373ffffffffffffffffffffffffffffffffffffffff8616333087611278565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efb9190611b14565b610f059190611b2d565b8787604051610f18959493929190611b67565b60405180910390a250610b716001600055565b6000610f3681610fc4565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610fbd576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61079f81336112be565b60025460ff161561100b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261076891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061134f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661113357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104dc565b5060006104dc565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561113357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104dc565b6111e46113e5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611243610fce565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112113390565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526107099186918216906323b872dd90608401611047565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661134b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b600061137173ffffffffffffffffffffffffffffffffffffffff841683611421565b905080516000141580156113965750808060200190518101906113949190611ba0565b155b15610768576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401611342565b60025460ff1661100b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061142f83836000611436565b9392505050565b606081471015611474576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611342565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161149d9190611bbd565b60006040518083038185875af1925050503d80600081146114da576040519150601f19603f3d011682016040523d82523d6000602084013e6114df565b606091505b50915091506114ef8683836114f9565b9695505050505050565b60608261150e5761150982611588565b61142f565b8151158015611532575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611581576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401611342565b508061142f565b8051156115985780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156115dc57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461142f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461079f57600080fd5b60008083601f84011261164057600080fd5b50813567ffffffffffffffff81111561165857600080fd5b60208301915083602082850101111561167057600080fd5b9250929050565b60008060008060006080868803121561168f57600080fd5b853561169a8161160c565b945060208601356116aa8161160c565b935060408601359250606086013567ffffffffffffffff8111156116cd57600080fd5b6116d98882890161162e565b969995985093965092949392505050565b6000602082840312156116fc57600080fd5b5035919050565b6000806040838503121561171657600080fd5b8235915060208301356117288161160c565b809150509250929050565b60006020828403121561174557600080fd5b813561142f8161160c565b60008060008060008060a0878903121561176957600080fd5b86356117748161160c565b955060208701356117848161160c565b945060408701359350606087013567ffffffffffffffff8111156117a757600080fd5b6117b389828a0161162e565b909450925050608087013567ffffffffffffffff8111156117d357600080fd5b87016060818a0312156117e557600080fd5b809150509295509295509295565b60008060006060848603121561180857600080fd5b83356118138161160c565b925060208401356118238161160c565b929592945050506040919091013590565b6000806000806000806080878903121561184d57600080fd5b863567ffffffffffffffff81111561186457600080fd5b61187089828a0161162e565b90975095505060208701356118848161160c565b935060408701359250606087013567ffffffffffffffff8111156118a757600080fd5b6118b389828a0161162e565b979a9699509497509295939492505050565b801515811461079f57600080fd5b6000602082840312156118e557600080fd5b813561142f816118c5565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061198b6080830184866118f0565b979650505050505050565b8381526040602082015260006119b06040830184866118f0565b95945050505050565b600081356119c68161160c565b73ffffffffffffffffffffffffffffffffffffffff168352602082013567ffffffffffffffff81168082146119fa57600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112611a3657600080fd5b820160208101903567ffffffffffffffff811115611a5357600080fd5b803603821315611a6257600080fd5b606060408601526119b06060860182846118f0565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a060608201526000611ac960a0830185876118f0565b8281036080840152611adb81856119b9565b9998505050505050505050565b848152606060208201526000611b026060830185876118f0565b828103604084015261198b81856119b9565b600060208284031215611b2657600080fd5b5051919050565b818103818111156104dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606081526000611b7b6060830187896118f0565b8560208401528281036040840152611b948185876118f0565b98975050505050505050565b600060208284031215611bb257600080fd5b815161142f816118c5565b6000825160005b81811015611bde5760208186018101518583015201611bc4565b50600092019182525091905056fea264697066735822122029d8a02c5c60bae7d404d08786de2b2dd6b37e11d10fa76c968c7809ff06f3b864736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161178338038061178383398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516114ab6102d86000396000818161021d01528181610531015281816108290152818161099a01528181610aef0152610c110152600081816101d1015281816104a1015281816105040152818161079901526107fc01526114ab6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c578063057e0f25146101a4575b600080fd5b61018f61018a366004610fd3565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b236600461108e565b610462565b005b6101b76101c7366004611126565b6105fc565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d366004611159565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611172565b6106a1565b6101b7610291366004611172565b6106cc565b6101b7610725565b60015460ff1661018f565b6101b76102b736600461119e565b61075a565b6101b76102ca366004611159565b6108ef565b6101b76102dd366004611159565b61095d565b6101b7610a07565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611172565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611172565b610a39565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610aa1565b61049c610aab565b6104c77f00000000000000000000000000000000000000000000000000000000000000008785610aea565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610563907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161130e565b600060405180830381600087803b15801561057d57600080fd5b505af1158015610591573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c878787866040516105e1949392919061137f565b60405180910390a2506105f46001600055565b505050505050565b610604610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062e81610aa1565b610636610aab565b610641848484610aea565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161068991815260200190565b60405180910390a25061069c6001600055565b505050565b6000828152600260205260409020600101546106bc81610aa1565b6106c68383610c72565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461071b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61069c8282610d72565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074f81610aa1565b610757610e31565b50565b610762610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078c81610aa1565b610794610aab565b6107bf7f00000000000000000000000000000000000000000000000000000000000000008684610aea565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610859907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016113b6565b600060405180830381600087803b15801561087357600080fd5b505af1158015610887573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d8686866040516108d593929190611408565b60405180910390a2506108e86001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61091981610aa1565b610921610aab565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610965610aab565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109f357600080fd5b505af11580156108e8573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3181610aa1565b610757610eae565b600082815260026020526040902060010154610a5481610aa1565b6106c68383610d72565b600260005403610a9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107578133610f07565b60015460ff1615610ae8576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7c9190611422565b610b86908461143b565b1115610bbe576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d083390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e39610f97565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610eb6610aab565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e84565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f93576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ae8576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fe557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461101557600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461104057600080fd5b919050565b60008083601f84011261105757600080fd5b50813567ffffffffffffffff81111561106f57600080fd5b60208301915083602082850101111561108757600080fd5b9250929050565b60008060008060008060a087890312156110a757600080fd5b6110b08761101c565b955060208701359450604087013567ffffffffffffffff8111156110d357600080fd5b6110df89828a01611045565b90955093505060608701359150608087013567ffffffffffffffff81111561110657600080fd5b87016060818a03121561111857600080fd5b809150509295509295509295565b60008060006060848603121561113b57600080fd5b6111448461101c565b95602085013595506040909401359392505050565b60006020828403121561116b57600080fd5b5035919050565b6000806040838503121561118557600080fd5b823591506111956020840161101c565b90509250929050565b6000806000806000608086880312156111b657600080fd5b6111bf8661101c565b945060208601359350604086013567ffffffffffffffff8111156111e257600080fd5b6111ee88828901611045565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff6112678261101c565b1682526000602082013567ffffffffffffffff811680821461128857600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126112c457600080fd5b820160208101903567ffffffffffffffff8111156112e157600080fd5b8036038213156112f057600080fd5b60606040860152611305606086018284611200565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061136060a083018587611200565b82810360808401526113728185611249565b9998505050505050505050565b848152606060208201526000611399606083018587611200565b82810360408401526113ab8185611249565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ab608083018486611200565b838152604060208201526000611305604083018486611200565b60006020828403121561143457600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212208052a0b07c987cb20e29d9c7c23109b8ff8b4b966ca2e18c207a88e5b4d79d4264736f6c634300081a00336080604052348015600f57600080fd5b506001600055610ec3806100246000396000f3fe60806040526004361061006e5760003560e01c80636ed701691161004b5780636ed70169146100e0578063c5131691146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063660b9de014610097578063676cc054146100b757005b3661007557005b005b34801561008357600080fd5b50610075610092366004610724565b610148565b3480156100a357600080fd5b506100756100b2366004610760565b6101de565b6100ca6100c536600461079b565b61021a565b6040516100d79190610896565b60405180910390f35b3480156100ec57600080fd5b5061007561024d565b34801561010157600080fd5b50610075610110366004610724565b610282565b6100756101233660046109ce565b61035d565b34801561013457600080fd5b50610075610143366004610aba565b6103a1565b6101506103d6565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610419565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b7f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e338260405161020f929190610bed565b60405180910390a150565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a19392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61028a6103d6565b6000610297600285610ccc565b9050806000036102d3576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102f573ffffffffffffffffffffffffffffffffffffffff8416338484610419565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610394959493929190610d07565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103949493929190610d91565b600260005403610412576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104ae9085906104b4565b50505050565b60006104d673ffffffffffffffffffffffffffffffffffffffff84168361054f565b905080516000141580156104fb5750808060200190518101906104f99190610e54565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061055d83836000610564565b9392505050565b6060814710156105a2576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610546565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105cb9190610e71565b60006040518083038185875af1925050503d8060008114610608576040519150601f19603f3d011682016040523d82523d6000602084013e61060d565b606091505b509150915061061d868383610627565b9695505050505050565b60608261063c57610637826106b6565b61055d565b8151158015610660575073ffffffffffffffffffffffffffffffffffffffff84163b155b156106af576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610546565b508061055d565b8051156106c65780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461071f57600080fd5b919050565b60008060006060848603121561073957600080fd5b83359250610749602085016106fb565b9150610757604085016106fb565b90509250925092565b60006020828403121561077257600080fd5b813567ffffffffffffffff81111561078957600080fd5b82016060818503121561055d57600080fd5b600080600083850360408112156107b157600080fd5b60208112156107bf57600080fd5b50839250602084013567ffffffffffffffff8111156107dd57600080fd5b8401601f810186136107ee57600080fd5b803567ffffffffffffffff81111561080557600080fd5b86602082840101111561081757600080fd5b939660209190910195509293505050565b60005b8381101561084357818101518382015260200161082b565b50506000910152565b60008151808452610864816020860160208601610828565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061055d602083018461084c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561091f5761091f6108a9565b604052919050565b600082601f83011261093857600080fd5b813567ffffffffffffffff811115610952576109526108a9565b61098360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108d8565b81815284602083860101111561099857600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106f857600080fd5b803561071f816109b5565b6000806000606084860312156109e357600080fd5b833567ffffffffffffffff8111156109fa57600080fd5b610a0686828701610927565b935050602084013591506040840135610a1e816109b5565b809150509250925092565b600067ffffffffffffffff821115610a4357610a436108a9565b5060051b60200190565b600082601f830112610a5e57600080fd5b8135610a71610a6c82610a29565b6108d8565b8082825260208201915060208360051b860101925085831115610a9357600080fd5b602085015b83811015610ab0578035835260209283019201610a98565b5095945050505050565b600080600060608486031215610acf57600080fd5b833567ffffffffffffffff811115610ae657600080fd5b8401601f81018613610af757600080fd5b8035610b05610a6c82610a29565b8082825260208201915060208360051b850101925088831115610b2757600080fd5b602084015b83811015610b6957803567ffffffffffffffff811115610b4b57600080fd5b610b5a8b602083890101610927565b84525060209283019201610b2c565b509550505050602084013567ffffffffffffffff811115610b8957600080fd5b610b9586828701610a4d565b925050610757604085016109c3565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2b836106fb565b1660408201526000602083013567ffffffffffffffff8116808214610c4f57600080fd5b6060840152506040830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610c8b57600080fd5b830160208101903567ffffffffffffffff811115610ca857600080fd5b803603821315610cb757600080fd5b6060608085015261061d60a085018284610ba4565b600082610d02577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d3c60a083018661084c565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610d87578151865260209586019590910190600101610d69565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e0f85835161084c565b94506020938401939190910190600101610dd5565b505050508281036040840152610e3a8186610d55565b915050610e4b606083018415159052565b95945050505050565b600060208284031215610e6657600080fd5b815161055d816109b5565b60008251610e83818460208701610828565b919091019291505056fea2646970667358221220d537f023478b5746f5f67760e722db6f4a51db89700ac69d6ba33759b8ac342f64736f6c634300081a0033a264697066735822122014db815adea1e0d88b4d23b5ea42d7361ec0f7eee70de31cb29e10ec8d307f3e64736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_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\":\"testNewCustodyFailsIfAddressesAreZero\",\"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\":\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5062011b7a806200003e6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c806385f438c11161019c578063ba414fa6116100ee578063f0c8e7e011610097578063fa7626d411610071578063fa7626d41461056c578063fb176c1214610579578063fe8e5f1b1461058157600080fd5b8063f0c8e7e014610554578063f4221f081461055c578063fa2a70741461056457600080fd5b8063e20c9f71116100c8578063e20c9f711461051d578063e63ab1e914610525578063eb1ce7f91461054c57600080fd5b8063ba414fa6146104f5578063c713f8271461050d578063cbd57e2f1461051557600080fd5b8063a3f9d0e011610150578063b0464fdc1161012a578063b0464fdc146104dd578063b421ca70146104e5578063b5508aa9146104ed57600080fd5b8063a3f9d0e0146104a6578063a4943deb146104ae578063a783c789146104b657600080fd5b8063916a17c611610181578063916a17c6146104815780639918c1c2146104965780639fc7fd551461049e57600080fd5b806385f438c1146104525780639158c6231461047957600080fd5b806349c783dd116102605780636a621854116102095780637e91c50f116101e35780637e91c50f1461042d57806382c529921461043557806385226c811461043d57600080fd5b80636a621854146104155780637099d6f81461041d57806371149c941461042557600080fd5b8063570618e11161023a578063570618e1146103a45780635d62c860146103d957806366d9a9a01461040057600080fd5b806349c783dd1461038c5780634b5838d21461039457806351ecdf3c1461039c57600080fd5b80632ade3880116102c25780633e73ecb41161029c5780633e73ecb4146103745780633ee929231461037c5780633f7286f41461038457600080fd5b80632ade38801461034f5780632be6a162146103645780633e5e3c231461036c57600080fd5b80631779672f116102f35780631779672f146103215780631ed7831c14610329578063284cb9291461034757600080fd5b80630a9254e41461030f5780630eee72a914610319575b600080fd5b610317610589565b005b61031761102b565b6103176112d0565b610331611421565b60405161033e919061b1e8565b60405180910390f35b610317611483565b610357611767565b60405161033e919061b284565b6103176118a9565b610331611a9b565b610317611afb565b610317612070565b61033161213f565b61031761219f565b6103176124dc565b6103176127fa565b6103cb7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60405190815260200161033e565b6103cb7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6104086129cb565b60405161033e919061b3ea565b610317612b4d565b610317612c19565b610317612ec6565b6103176136db565b610317613866565b610445613ada565b60405161033e919061b488565b6103cb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610317613baa565b610489613c78565b60405161033e919061b4ff565b610317613d73565b61031761406d565b61031761413b565b610317614743565b6103cb7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61048961496b565b610317614a66565b610445614f9b565b6104fd61506b565b604051901515815260200161033e565b61031761513f565b610317615de2565b610331615ea3565b6103cb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b610317615f03565b61031761600f565b6103176161d1565b61031761643e565b601f546104fd9060ff1681565b61031761671c565b610317616d9a565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880549091166156781790556040516105db9061b0f7565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610660573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516106a59061b0f7565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610729573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260285460265492519085166024820152604481019390935292166064820152610818919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052616f8b565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906108a49061b105565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156108e0573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061093b9061b113565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801561097f573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516109c49061b121565b604051809103906000f0801580156109e0573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a8c57600080fd5b505af1158015610aa0573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610b1657600080fd5b505af1158015610b2a573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610b9057600080fd5b505af1158015610ba4573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610c0a57600080fd5b505af1158015610c1e573d6000803e3d6000fd5b5050602254602480546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639b19251a925001600060405180830381600087803b158015610c8357600080fd5b505af1158015610c97573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610cf957600080fd5b505af1158015610d0d573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610d7e57600080fd5b505af1158015610d92573d6000803e3d6000fd5b50506025546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b158015610e0157600080fd5b505af1158015610e15573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610e8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eaf919061b596565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610f3057600080fd5b505af1158015610f44573d6000803e3d6000fd5b5050604080516080810182526026546001600160a01b039081168252602454811660208084019182526001848601908152855191820190955260008152606084018190528351602980549185167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911781559151602a8054965167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009097169190941617949094179091559093509150602b90611026908261b67b565b505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc513169100000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b15801561111057600080fd5b505af1158015611124573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061120f919060040161b73a565b600060405180830381600087803b15801561122957600080fd5b505af115801561123d573d6000803e3d6000fd5b50506022546021546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f2945061129a9392831692909116908790879060040161b74d565b600060405180830381600087803b1580156112b457600080fd5b505af11580156112c8573d6000803e3d6000fd5b505050505050565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156113b257600080fd5b505af11580156113c6573d6000803e3d6000fd5b5050604051630618f58760e51b81527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e0915060240161120f565b6060601680548060200260200160405190810160405280929190818152602001828054801561147957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161145b575b5050505050905090565b6022546025546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600092919091169063d936547e90602401602060405180830381865afa1580156114ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611511919061b596565b905061151e600082616faa565b6022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561159357600080fd5b505af11580156115a7573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549150600090a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561163c57600080fd5b505af1158015611650573d6000803e3d6000fd5b50506022546025546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b1580156116b657600080fd5b505af11580156116ca573d6000803e3d6000fd5b50506022546025546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063d936547e9150602401602060405180830381865afa158015611733573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611757919061b596565b9050611764600182616faa565b50565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156118a057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156118895783829060005260206000200180546117fc9061b5e7565b80601f01602080910402602001604051908101604052809291908181526020018280546118289061b5e7565b80156118755780601f1061184a57610100808354040283529160200191611875565b820191906000526020600020905b81548152906001019060200180831161185857829003601f168201915b5050505050815260200190600101906117dd565b50505050815250508152602001906001019061178b565b50505050905090565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156118f757600080fd5b505af115801561190b573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506119ec919060040161b73a565b600060405180830381600087803b158015611a0657600080fd5b505af1158015611a1a573d6000803e3d6000fd5b50506022546025546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a91506024015b600060405180830381600087803b158015611a8157600080fd5b505af1158015611a95573d6000803e3d6000fd5b50505050565b60606018805480602002602001604051908101604052809291908181526020018280548015611479576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161145b575050505050905090565b602480546027546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa158015611b50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b74919061b784565b9050611b8181600061702c565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf5919061b784565b6027546040516001600160a01b0390911660248201526044810185905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611cd8916001600160a01b039190911690600090869060040161b79d565b600060405180830381600087803b158015611cf257600080fd5b505af1158015611d06573d6000803e3d6000fd5b50506022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611d7f57600080fd5b505af1158015611d93573d6000803e3d6000fd5b50506024546027546040518881526001600160a01b039283169450911691507fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb9060200160405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611e3857600080fd5b505af1158015611e4c573d6000803e3d6000fd5b5050602254602754602480546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015290831691810191909152604481018990529116925063d9caed129150606401600060405180830381600087803b158015611ec757600080fd5b505af1158015611edb573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f51919061b784565b9050611f5d818661702c565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611fad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd1919061b784565b9050611fe681611fe1888761b7f4565b61702c565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205a919061b784565b905061206781600061702c565b50505050505050565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024016110f6565b60606017805480602002602001604051908101604052809291908181526020018280548015611479576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161145b575050505050905090565b6022546040517feab103df000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169063eab103df90602401600060405180830381600087803b1580156121fe57600080fd5b505af1158015612212573d6000803e3d6000fd5b5050602480546022546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42409381019390935216925063095ea7b391506044016020604051808303816000875af1158015612288573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ac919061b596565b506025546022546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240602482015291169063095ea7b3906044016020604051808303816000875af115801561231d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612341919061b596565b50604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025820192839052630618f58760e51b9092527f73cba663000000000000000000000000000000000000000000000000000000006029820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906049015b600060405180830381600087803b1580156123e957600080fd5b505af11580156123fd573d6000803e3d6000fd5b505060225460275460405160609190911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208201526001600160a01b03909116925063e609055e915060340160408051601f19818403018152908290526024547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526124a7926001600160a01b03909116906103e890879060040161b807565b600060405180830381600087803b1580156124c157600080fd5b505af11580156124d5573d6000803e3d6000fd5b5050505050565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561254857600080fd5b505af115801561255c573d6000803e3d6000fd5b5050602854602654604051600094508493506001600160a01b0392831692909116906125879061b105565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156125c3573d6000803e3d6000fd5b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561263357600080fd5b505af1158015612647573d6000803e3d6000fd5b50506020546026546040516001600160a01b0392831694506000935091169061266f9061b105565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156126ab573d6000803e3d6000fd5b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561271b57600080fd5b505af115801561272f573d6000803e3d6000fd5b50506020546028546040516001600160a01b039283169450911691506000906127579061b105565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015612793573d6000803e3d6000fd5b506020546028546026546040519394506001600160a01b03928316939183169216906127be9061b105565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015611026573d6000803e3d6000fd5b6024805460275460405160019381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156128dc57600080fd5b505af11580156128f0573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561296057600080fd5b505af1158015612974573d6000803e3d6000fd5b50506022546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321fc65f2935061129a9260009216908790879060040161b74d565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156118a05783829060005260206000209060020201604051806040016040529081600082018054612a229061b5e7565b80601f0160208091040260200160405190810160405280929190818152602001828054612a4e9061b5e7565b8015612a9b5780601f10612a7057610100808354040283529160200191612a9b565b820191906000526020600020905b815481529060010190602001808311612a7e57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015612b3557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ae25790505b505050505081525050815260200190600101906129ef565b6024805460275460405160009381018490526001600160a01b03928316604482015291166064820152819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc513169100000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611398565b6022546040517feab103df000000000000000000000000000000000000000000000000000000008152600160048201526001600160a01b039091169063eab103df90602401600060405180830381600087803b158015612c7857600080fd5b505af1158015612c8c573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b158015612cf157600080fd5b505af1158015612d05573d6000803e3d6000fd5b5050602480546022546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42409381019390935216925063095ea7b391506044016020604051808303816000875af1158015612d7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9f919061b596565b506025546022546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240602482015291169063095ea7b3906044016020604051808303816000875af1158015612e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e34919061b596565b50604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025820192839052630618f58760e51b9092527f584a7938000000000000000000000000000000000000000000000000000000006029820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906049016123cf565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015612f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7d919061b784565b9050612f8a81600061702c565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015612fda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ffe919061b784565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916130e1916001600160a01b039190911690600090869060040161b79d565b600060405180830381600087803b1580156130fb57600080fd5b505af115801561310f573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561318857600080fd5b505af115801561319c573d6000803e3d6000fd5b50506020546040517f8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e26493506131e092506001600160a01b039091169060299061b929565b60405180910390a16020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561325d57600080fd5b505af1158015613271573d6000803e3d6000fd5b50506024546021546040516001600160a01b039283169450911691507ff196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b906132bf908990899060299061b94b565b60405180910390a36022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561333c57600080fd5b505af1158015613350573d6000803e3d6000fd5b50506024546021546040516001600160a01b039283169450911691507f84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b379061339e908990899060299061b94b565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156133ff57600080fd5b505af1158015613413573d6000803e3d6000fd5b50506022546021546024546040517f5eb72e150000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635eb72e1594506134739392831692909116908a908a9060299060040161b976565b600060405180830381600087803b15801561348d57600080fd5b505af11580156134a1573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156134f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613518919061b784565b9050613524818761702c565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613574573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613598919061b784565b90506135a881611fe1898761b7f4565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa15801561361e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613642919061b784565b905061364f81600061702c565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561369f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c3919061b784565b90506136d081600061702c565b505050505050505050565b6040517f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260019060009060250160408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561377457600080fd5b505af1158015613788573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156137f857600080fd5b505af115801561380c573d6000803e3d6000fd5b50506022546024546040517f5eb72e150000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635eb72e15935061129a9260009216908790879060299060040161b976565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156138d857600080fd5b505af11580156138ec573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b15801561395157600080fd5b505af1158015613965573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156139d557600080fd5b505af11580156139e9573d6000803e3d6000fd5b5050602254602754602480546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015290831691810191909152600160448201529116925063d9caed129150606401600060405180830381600087803b158015613a6457600080fd5b505af1158015613a78573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611a8157600080fd5b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156118a0578382906000526020600020018054613b1d9061b5e7565b80601f0160208091040260200160405190810160405280929190818152602001828054613b499061b5e7565b8015613b965780601f10613b6b57610100808354040283529160200191613b96565b820191906000526020600020905b815481529060010190602001808311613b7957829003601f168201915b505050505081526020019060010190613afe565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613c1657600080fd5b505af1158015613c2a573d6000803e3d6000fd5b50506022546040517f9a590427000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169250639a5904279150602401611a67565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156118a05760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015613d5b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411613d085790505b50505050508152505081526020019060010190613c9c565b602480546027546040516001938101939093526001600160a01b03918216604484015216606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260285490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015613e6e57600080fd5b505af1158015613e82573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b158015613ee757600080fd5b505af1158015613efb573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613f6b57600080fd5b505af1158015613f7f573d6000803e3d6000fd5b50506022546021546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450613fdd939283169290911690600190879060040161b74d565b600060405180830381600087803b158015613ff757600080fd5b505af115801561400b573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156124c157600080fd5b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156140d957600080fd5b505af11580156140ed573d6000803e3d6000fd5b50506022546040517f9b19251a000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169250639b19251a9150602401611a67565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052805460275494516370a0823160e01b81526001600160a01b0395861693810193909352620186a0946000939116916370a082319101602060405180830381865afa1580156141e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614209919061b784565b905061421681600061702c565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061428a919061b784565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161436d916001600160a01b039190911690600090869060040161b79d565b600060405180830381600087803b15801561438757600080fd5b505af115801561439b573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561441457600080fd5b505af1158015614428573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156144e157600080fd5b505af11580156144f5573d6000803e3d6000fd5b50506024546021546040516001600160a01b039283169450911691507f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d590614540908990899061b9cb565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156145a157600080fd5b505af11580156145b5573d6000803e3d6000fd5b50506022546021546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506146129392831692909116908a908a9060040161b74d565b600060405180830381600087803b15801561462c57600080fd5b505af1158015614640573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015614692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146b6919061b784565b90506146c381600061702c565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614713573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614737919061b784565b90506135a8818561702c565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156147de57600080fd5b505af11580156147f2573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506148dd919060040161b73a565b600060405180830381600087803b1580156148f757600080fd5b505af115801561490b573d6000803e3d6000fd5b50506022546021546024546040517f5eb72e150000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635eb72e15945061129a9392831692909116908790879060299060040161b976565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156118a05760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015614a4e57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116149fb5790505b5050505050815250508152602001906001019061498f565b6022546040517feab103df000000000000000000000000000000000000000000000000000000008152600160048201526103e8916001600160a01b03169063eab103df90602401600060405180830381600087803b158015614ac757600080fd5b505af1158015614adb573d6000803e3d6000fd5b5050602480546022546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42409381019390935216925063095ea7b391506044016020604051808303816000875af1158015614b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b75919061b596565b506025546022546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240602482015291169063095ea7b3906044016020604051808303816000875af1158015614be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c0a919061b596565b50602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015614c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c7f919061b784565b6025546028546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015614cd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cf5919061b784565b90506000604051602001614d2c907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f19018152908290526022546381bad6f360e01b8352600160048401819052602484018190526044840181905260648401526001600160a01b031660848301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614daf57600080fd5b505af1158015614dc3573d6000803e3d6000fd5b505060245460275460405160609190911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208201526001600160a01b0390911692507f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae915060340160408051601f1981840301815290829052614e4c918890869061b9e4565b60405180910390a26022546027546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051808303601401815260348301918290526024547fe609055e000000000000000000000000000000000000000000000000000000009092526001600160a01b039384169363e609055e93614eeb9391909116908990879060380161b807565b600060405180830381600087803b158015614f0557600080fd5b505af1158015614f19573d6000803e3d6000fd5b50505050611a958484614f2c919061ba0f565b602480546022546040516370a0823160e01b81526001600160a01b0391821660048201529116916370a082319101602060405180830381865afa158015614f77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe1919061b784565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156118a0578382906000526020600020018054614fde9061b5e7565b80601f016020809104026020016040519081016040528092919081815260200182805461500a9061b5e7565b80156150575780601f1061502c57610100808354040283529160200191615057565b820191906000526020600020905b81548152906001019060200180831161503a57829003601f168201915b505050505081526020019060010190614fbf565b60085460009060ff1615615083575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015615114573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615138919061b784565b1415905090565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561519857600080fd5b505af11580156151ac573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250615297919060040161b73a565b600060405180830381600087803b1580156152b157600080fd5b505af11580156152c5573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561531957600080fd5b505af115801561532d573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561538a57600080fd5b505af115801561539e573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250615489919060040161b73a565b600060405180830381600087803b1580156154a357600080fd5b505af11580156154b7573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561550b57600080fd5b505af115801561551f573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561557c57600080fd5b505af1158015615590573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156155e457600080fd5b505af11580156155f8573d6000803e3d6000fd5b505060248054602754604051620186a09381018490526001600160a01b039283166044820152911660648201529092506000915060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905251630618f58760e51b81527fd93c0665000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156156f457600080fd5b505af1158015615708573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561576557600080fd5b505af1158015615779573d6000803e3d6000fd5b50506022546021546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506157d69392831692909116908790879060040161b74d565b600060405180830381600087803b1580156157f057600080fd5b505af1158015615804573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561586157600080fd5b505af1158015615875573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156158c957600080fd5b505af11580156158dd573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015615930573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615954919061b784565b905061596181600061702c565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156159b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906159d5919061b784565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391615ab8916001600160a01b039190911690600090869060040161b79d565b600060405180830381600087803b158015615ad257600080fd5b505af1158015615ae6573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015615b5f57600080fd5b505af1158015615b73573d6000803e3d6000fd5b505060208054602454602754604080516001600160a01b0394851681529485018c905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015615c4957600080fd5b505af1158015615c5d573d6000803e3d6000fd5b50506024546021546040516001600160a01b039283169450911691507f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d590615ca8908990899061b9cb565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615d0957600080fd5b505af1158015615d1d573d6000803e3d6000fd5b50506022546021546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450615d7a9392831692909116908a908a9060040161b74d565b600060405180830381600087803b158015615d9457600080fd5b505af1158015615da8573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191016134d7565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101615913565b60606015805480602002602001604051908101604052809291908181526020018280548015611479576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161145b575050505050905090565b600080604051602001615f39907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615fa057600080fd5b505af1158015615fb4573d6000803e3d6000fd5b5050604051630618f58760e51b81527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016148dd565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561605d57600080fd5b505af1158015616071573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250616152919060040161b73a565b600060405180830381600087803b15801561616c57600080fd5b505af1158015616180573d6000803e3d6000fd5b50506022546025546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401611a67565b602480546027546040516001938101939093526001600160a01b03918216604484015216606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260285490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156162cc57600080fd5b505af11580156162e0573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b15801561634557600080fd5b505af1158015616359573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156163c957600080fd5b505af11580156163dd573d6000803e3d6000fd5b50506022546021546024546040517f5eb72e150000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635eb72e159450613fdd939283169290911690600190879060299060040161b976565b602254602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600093919091169163d936547e9101602060405180830381865afa1580156164a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906164cb919061b596565b90506164d8600182616faa565b6022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561654d57600080fd5b505af1158015616561573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919150600090a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156165f657600080fd5b505af115801561660a573d6000803e3d6000fd5b5050602254602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a590427925001600060405180830381600087803b15801561666f57600080fd5b505af1158015616683573d6000803e3d6000fd5b5050602254602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529216935063d936547e925001602060405180830381865afa1580156166eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061670f919061b596565b9050611764600082616faa565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460275492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa1580156167f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616819919061b784565b905061682681600061702c565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015616876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061689a919061b784565b6020546040516001600160a01b0390911660248201526044810186905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161697d916001600160a01b039190911690600090869060040161b79d565b600060405180830381600087803b15801561699757600080fd5b505af11580156169ab573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015616a2457600080fd5b505af1158015616a38573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050616a7660028861ba22565b602454602754604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015616b2557600080fd5b505af1158015616b39573d6000803e3d6000fd5b50506024546021546040516001600160a01b039283169450911691507f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d590616b84908990899061b9cb565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015616be557600080fd5b505af1158015616bf9573d6000803e3d6000fd5b50506022546021546024546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450616c569392831692909116908a908a9060040161b74d565b600060405180830381600087803b158015616c7057600080fd5b505af1158015616c84573d6000803e3d6000fd5b5050602480546027546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015616cd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616cfa919061b784565b9050616d0b81611fe160028961ba22565b602480546022546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015616d5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616d7f919061b784565b90506135a881616d9060028a61ba22565b611fe1908761b7f4565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015616df857600080fd5b505af1158015616e0c573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250616ef7919060040161b73a565b600060405180830381600087803b158015616f1157600080fd5b505af1158015616f25573d6000803e3d6000fd5b5050602254602754602480546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015290831691810191909152604481018690529116925063d9caed1291506064016124a7565b6000616f9561b12f565b616fa0848483617084565b9150505b92915050565b6040517ff7fe347700000000000000000000000000000000000000000000000000000000815282151560048201528115156024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f7fe3477906044015b60006040518083038186803b15801561701857600080fd5b505afa1580156112c8573d6000803e3d6000fd5b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c5490604401617000565b60008061709185846170ff565b90506170f46040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016170df92919061ba5d565b6040516020818303038152906040528561710b565b9150505b9392505050565b60006170f88383617139565b60c0810151516000901561712f5761712884848460c00151617154565b90506170f8565b61712884846172fa565b600061714583836173e5565b6170f88383602001518461710b565b60008061715f6173f5565b9050600061716d86836174c8565b90506000617184826060015183602001518561796e565b9050600061719483838989617b80565b905060006171a1826189fd565b602081015181519192509060030b15617214578982604001516040516020016171cb92919061ba7f565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261720b9160040161b73a565b60405180910390fd5b60006172576040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001618bcc565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906172aa90849060040161b73a565b602060405180830381865afa1580156172c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906172eb919061bb00565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061734f90879060040161b73a565b600060405180830381865afa15801561736c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617394919081019061bbe2565b905060006173c282856040516020016173ae92919061bc17565b604051602081830303815290604052618dcc565b90506001600160a01b038116616fa05784846040516020016171cb92919061bc46565b6173f182826000618ddf565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061747c90849060040161bcf1565b600060405180830381865afa158015617499573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526174c1919081019061bd38565b9250505090565b6174fa6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506175456040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61754e85618ee2565b6020820152600061755e866192c7565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156175a0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526175c8919081019061bd38565b868385602001516040516020016175e2949392919061bd81565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061763a90859060040161b73a565b600060405180830381865afa158015617657573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261767f919081019061bd38565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906176c790849060040161be85565b602060405180830381865afa1580156176e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190617708919061b596565b61771d57816040516020016171cb919061bed7565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061776290849060040161bf69565b600060405180830381865afa15801561777f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526177a7919081019061bd38565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906177ee90849060040161bfbb565b602060405180830381865afa15801561780b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061782f919061b596565b156178c4576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061787990849060040161bfbb565b600060405180830381865afa158015617896573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526178be919081019061bd38565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016178e9919061c00d565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161791592919061c079565b600060405180830381865afa158015617932573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261795a919081019061bd38565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161798a5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106179ea576179ea61c09e565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110617a3e57617a3e61c09e565b602002602001018190525084604051602001617a5a919061c0cd565b60405160208183030381529060405281600281518110617a7c57617a7c61c09e565b602002602001018190525082604051602001617a98919061c139565b60405160208183030381529060405281600381518110617aba57617aba61c09e565b60200260200101819052506000617ad0826189fd565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250617b61906040805180820182526000808252602091820152815180830190925284518252808501908201529061954a565b617b7657856040516020016171cb919061c17a565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015617bd0565b511590565b617d4457826020015115617c8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161720b565b8260c0015115617d44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161720b565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081617d5d57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280617db89061c20b565b935060ff1681518110617dcd57617dcd61c09e565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001617e1e919061c22a565b604051602081830303815290604052828280617e399061c20b565b935060ff1681518110617e4e57617e4e61c09e565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280617e9b9061c20b565b935060ff1681518110617eb057617eb061c09e565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280617efd9061c20b565b935060ff1681518110617f1257617f1261c09e565b60200260200101819052508760200151828280617f2e9061c20b565b935060ff1681518110617f4357617f4361c09e565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280617f909061c20b565b935060ff1681518110617fa557617fa561c09e565b602090810291909101015287518282617fbd8161c20b565b935060ff1681518110617fd257617fd261c09e565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061801f9061c20b565b935060ff16815181106180345761803461c09e565b6020026020010181905250618048466195ab565b82826180538161c20b565b935060ff16815181106180685761806861c09e565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806180b59061c20b565b935060ff16815181106180ca576180ca61c09e565b6020026020010181905250868282806180e29061c20b565b935060ff16815181106180f7576180f761c09e565b602090810291909101015285511561821e5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826181488161c20b565b935060ff168151811061815d5761815d61c09e565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906181ad90899060040161b73a565b600060405180830381865afa1580156181ca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526181f2919081019061bd38565b82826181fd8161c20b565b935060ff16815181106182125761821261c09e565b60200260200101819052505b8460200151156182ee5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826182678161c20b565b935060ff168151811061827c5761827c61c09e565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806182c99061c20b565b935060ff16815181106182de576182de61c09e565b60200260200101819052506184b5565b618326617bcb8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6183b95760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826183698161c20b565b935060ff168151811061837e5761837e61c09e565b60200260200101819052508460a0015160405160200161839e919061c0cd565b6040516020818303038152906040528282806182c99061c20b565b8460c001511580156183fc5750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526183fa90511590565b155b156184b55760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826184408161c20b565b935060ff16815181106184555761845561c09e565b60200260200101819052506184698861964b565b604051602001618479919061c0cd565b6040516020818303038152906040528282806184949061c20b565b935060ff16815181106184a9576184a961c09e565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526184e990511590565b61857e5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261852c8161c20b565b935060ff16815181106185415761854161c09e565b6020026020010181905250846040015182828061855d9061c20b565b935060ff16815181106185725761857261c09e565b60200260200101819052505b60608501511561869f5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826185c78161c20b565b935060ff16815181106185dc576185dc61c09e565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561864b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618673919081019061bd38565b828261867e8161c20b565b935060ff16815181106186935761869361c09e565b60200260200101819052505b60e085015151156187465760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826186e98161c20b565b935060ff16815181106186fe576186fe61c09e565b602002602001018190525061871a8560e00151600001516195ab565b82826187258161c20b565b935060ff168151811061873a5761873a61c09e565b60200260200101819052505b60e085015160200151156187f05760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826187938161c20b565b935060ff16815181106187a8576187a861c09e565b60200260200101819052506187c48560e00151602001516195ab565b82826187cf8161c20b565b935060ff16815181106187e4576187e461c09e565b60200260200101819052505b60e0850151604001511561889a5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261883d8161c20b565b935060ff16815181106188525761885261c09e565b602002602001018190525061886e8560e00151604001516195ab565b82826188798161c20b565b935060ff168151811061888e5761888e61c09e565b60200260200101819052505b60e085015160600151156189445760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826188e78161c20b565b935060ff16815181106188fc576188fc61c09e565b60200260200101819052506189188560e00151606001516195ab565b82826189238161c20b565b935060ff16815181106189385761893861c09e565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156189625761896261b5b8565b60405190808252806020026020018201604052801561899557816020015b60608152602001906001900390816189805790505b50905060005b8260ff168160ff1610156189ee57838160ff16815181106189be576189be61c09e565b6020026020010151828260ff16815181106189db576189db61c09e565b602090810291909101015260010161899b565b5093505050505b949350505050565b618a246040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91618aaa9186910161c295565b600060405180830381865afa158015618ac7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618aef919081019061bd38565b90506000618afd868361a13a565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401618b2d919061b488565b6000604051808303816000875af1158015618b4c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618b74919081019061c2dc565b805190915060030b15801590618b8d5750602081015151155b8015618b9c5750604081015151155b15617b765781600081518110618bb457618bb461c09e565b60200260200101516040516020016171cb919061c392565b60606000618c018560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150618c389082905b9061a28f565b15618d95576000618cb582618caf84618ca9618c7b8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061a2b6565b9061a318565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618d1990829061a28f565b15618d8357604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d80905b829061a39d565b90505b618d8c8161a3c3565b925050506170f8565b8215618dae5784846040516020016171cb92919061c57e565b50506040805160208101909152600081526170f8565b509392505050565b6000808251602084016000f09392505050565b8160a0015115618dee57505050565b6000618dfb84848461a42c565b90506000618e08826189fd565b602081015181519192509060030b158015618ea45750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ea490604080518082018252600080825260209182015281518083019092528451825280850190820152618c32565b15618eb157505050505050565b60408201515115618ed15781604001516040516020016171cb919061c625565b806040516020016171cb919061c683565b60606000618f178360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618f7c905b829061954a565b15618feb57604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170f890618fe690839061a9c7565b61a3c3565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261904d905b829061aa51565b60010361911a57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526190b390618d79565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170f890618fe6905b839061a39d565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261917990618f75565b156192b057604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906191e190839061aaeb565b9050600081600183516191f4919061b7f4565b815181106192045761920461c09e565b602002602001015190506192a7618fe661927a6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061a9c7565b95945050505050565b826040516020016171cb919061c6ee565b50919050565b606060006192fc8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061935e90618f75565b1561936c576170f88161a3c3565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526193cb90619046565b60010361943557604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170f890618fe690619113565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261949490618f75565b156192b057604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906194fc90839061aaeb565b9050600181511115619538578060028251619517919061b7f4565b815181106195275761952761c09e565b602002602001015192505050919050565b50826040516020016171cb919061c6ee565b80518251600091111561955f57506000616fa4565b815183516020850151600092916195759161ba0f565b61957f919061b7f4565b905082602001518103619596576001915050616fa4565b82516020840151819020912014905092915050565b606060006195b88361ab90565b600101905060008167ffffffffffffffff8111156195d8576195d861b5b8565b6040519080825280601f01601f191660200182016040528015619602576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461960c57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916196d7905b829061ac72565b1561971757505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619776906196d0565b156197b657505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619815906196d0565b1561985557505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526198b4906196d0565b806199195750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619919906196d0565b1561995957505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526199b8906196d0565b80619a1d5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619a1d906196d0565b15619a5d57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619abc906196d0565b80619b215750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619b21906196d0565b15619b6157505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619bc0906196d0565b80619c255750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619c25906196d0565b15619c6557505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619cc4906196d0565b15619d0457505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619d63906196d0565b15619da357505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619e02906196d0565b15619e4257505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619ea1906196d0565b15619ee157505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619f40906196d0565b15619f8057505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619fdf906196d0565b8061a0445750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a044906196d0565b1561a08457505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a0e3906196d0565b1561a12357505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516171cb929060200161c7cc565b60608060005b845181101561a1c5578185828151811061a15c5761a15c61c09e565b602002602001015160405160200161a17592919061bc17565b60405160208183030381529060405291506001855161a194919061b7f4565b811461a1bd578160405160200161a1ab919061c935565b60405160208183030381529060405291505b60010161a140565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161a1de579050509050838160008151811061a2095761a20961c09e565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061a25d5761a25d61c09e565b6020026020010181905250818160028151811061a27c5761a27c61c09e565b6020908102919091010152949350505050565b602080830151835183519284015160009361a2ad929184919061ac86565b14159392505050565b6040805180820190915260008082526020820152600061a2e8846000015185602001518560000151866020015161ad97565b905083602001518161a2fa919061b7f4565b8451859061a30990839061b7f4565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561a33d575081616fa4565b602080830151908401516001911461a3645750815160208481015190840151829020919020145b801561a3955782518451859061a37b90839061b7f4565b905250825160208501805161a39190839061ba0f565b9052505b509192915050565b604080518082019091526000808252602082015261a3bc83838361aeb7565b5092915050565b60606000826000015167ffffffffffffffff81111561a3e45761a3e461b5b8565b6040519080825280601f01601f19166020018201604052801561a40e576020820181803683370190505b509050600060208201905061a3bc818560200151866000015161af62565b6060600061a4386173f5565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161a45557905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061a4b09061c20b565b935060ff168151811061a4c55761a4c561c09e565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161a516919061c976565b60405160208183030381529060405282828061a5319061c20b565b935060ff168151811061a5465761a54661c09e565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061a5939061c20b565b935060ff168151811061a5a85761a5a861c09e565b60200260200101819052508260405160200161a5c4919061c139565b60405160208183030381529060405282828061a5df9061c20b565b935060ff168151811061a5f45761a5f461c09e565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061a6419061c20b565b935060ff168151811061a6565761a65661c09e565b602002602001018190525061a66b878461afdc565b828261a6768161c20b565b935060ff168151811061a68b5761a68b61c09e565b60209081029190910101528551511561a7375760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261a6dd8161c20b565b935060ff168151811061a6f25761a6f261c09e565b602002602001018190525061a70b86600001518461afdc565b828261a7168161c20b565b935060ff168151811061a72b5761a72b61c09e565b60200260200101819052505b85608001511561a7a55760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261a7808161c20b565b935060ff168151811061a7955761a79561c09e565b602002602001018190525061a80b565b841561a80b5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261a7ea8161c20b565b935060ff168151811061a7ff5761a7ff61c09e565b60200260200101819052505b6040860151511561a8a75760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261a8558161c20b565b935060ff168151811061a86a5761a86a61c09e565b6020026020010181905250856040015182828061a8869061c20b565b935060ff168151811061a89b5761a89b61c09e565b60200260200101819052505b85606001511561a9115760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261a8f08161c20b565b935060ff168151811061a9055761a90561c09e565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561a92f5761a92f61b5b8565b60405190808252806020026020018201604052801561a96257816020015b606081526020019060019003908161a94d5790505b50905060005b8260ff168160ff16101561a9bb57838160ff168151811061a98b5761a98b61c09e565b6020026020010151828260ff168151811061a9a85761a9a861c09e565b602090810291909101015260010161a968565b50979650505050505050565b604080518082019091526000808252602082015281518351101561a9ec575081616fa4565b8151835160208501516000929161aa029161ba0f565b61aa0c919061b7f4565b6020840151909150600190821461aa2d575082516020840151819020908220145b801561aa485783518551869061aa4490839061b7f4565b9052505b50929392505050565b600080826000015161aa75856000015186602001518660000151876020015161ad97565b61aa7f919061ba0f565b90505b8351602085015161aa93919061ba0f565b811161a3bc578161aaa38161c9bb565b925050826000015161aada85602001518361aabe919061b7f4565b865161aaca919061b7f4565b838660000151876020015161ad97565b61aae4919061ba0f565b905061aa82565b6060600061aaf9848461aa51565b61ab0490600161ba0f565b67ffffffffffffffff81111561ab1c5761ab1c61b5b8565b60405190808252806020026020018201604052801561ab4f57816020015b606081526020019060019003908161ab3a5790505b50905060005b8151811015618dc45761ab6b618fe6868661a39d565b82828151811061ab7d5761ab7d61c09e565b602090810291909101015260010161ab55565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061abd9577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061ac05576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061ac2357662386f26fc10000830492506010015b6305f5e100831061ac3b576305f5e100830492506008015b612710831061ac4f57612710830492506004015b6064831061ac61576064830492506002015b600a8310616fa45760010192915050565b600061ac7e838361b01c565b159392505050565b60008085841161ad8d576020841161ad39576000841561acd157600161acad86602061b7f4565b61acb890600861c9d5565b61acc390600261cad3565b61accd919061b7f4565b1990505b835181168561ace0898961ba0f565b61acea919061b7f4565b805190935082165b81811461ad245787841161ad0c57879450505050506189f5565b8361ad168161cadf565b94505082845116905061acf2565b61ad2e878561ba0f565b9450505050506189f5565b83832061ad46858861b7f4565b61ad50908761ba0f565b91505b85821061ad8b5784822080820361ad785761ad6e868461ba0f565b93505050506189f5565b61ad8360018461b7f4565b92505061ad53565b505b5092949350505050565b6000838186851161aea2576020851161ae51576000851561ade357600161adbf87602061b7f4565b61adca90600861c9d5565b61add590600261cad3565b61addf919061b7f4565b1990505b8451811660008761adf48b8b61ba0f565b61adfe919061b7f4565b855190915083165b82811461ae435781861061ae2b5761ae1e8b8b61ba0f565b96505050505050506189f5565b8561ae358161c9bb565b96505083865116905061ae06565b8596505050505050506189f5565b508383206000905b61ae63868961b7f4565b821161aea05785832080820361ae7f57839450505050506189f5565b61ae8a60018561ba0f565b935050818061ae989061c9bb565b92505061ae59565b505b61aeac878761ba0f565b979650505050505050565b6040805180820190915260008082526020820152600061aee9856000015186602001518660000151876020015161ad97565b60208087018051918601919091525190915061af05908261b7f4565b83528451602086015161af18919061ba0f565b810361af27576000855261af59565b8351835161af35919061ba0f565b8551869061af4490839061b7f4565b905250835161af53908261ba0f565b60208601525b50909392505050565b6020811061af9a578151835261af7960208461ba0f565b925061af8660208361ba0f565b915061af9360208261b7f4565b905061af62565b600019811561afc957600161afb083602061b7f4565b61afbc9061010061cad3565b61afc6919061b7f4565b90505b9151835183169219169190911790915250565b6060600061afea84846174c8565b805160208083015160405193945061b0049390910161caf6565b60405160208183030381529060405291505092915050565b815181516000919081111561b02f575081515b6020808501519084015160005b8381101561b0e8578251825180821461b0b857600019602087101561b0975760018461b06989602061b7f4565b61b073919061ba0f565b61b07e90600861c9d5565b61b08990600261cad3565b61b093919061b7f4565b1990505b818116838216818103911461b0b5579750616fa49650505050505050565b50505b61b0c360208661ba0f565b945061b0d060208561ba0f565b9350505060208161b0e1919061ba0f565b905061b03c565b5084518651617b76919061cb4e565b610c9f806200cb6f83390190565b611c7f806200d80e83390190565b6117aa806200f48d83390190565b610f0e8062010c3783390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161b17261b177565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161b1726040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561b2295783516001600160a01b031683526020938401939092019160010161b202565b509095945050505050565b60005b8381101561b24f57818101518382015260200161b237565b50506000910152565b6000815180845261b27081602086016020860161b234565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561b380577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561b366577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261b35084865161b258565b602095860195909450929092019160010161b316565b50919750505060209485019492909201915060010161b2ac565b50929695505050505050565b600081518084526020840193506020830160005b8281101561b3e05781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161b3a0565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561b380577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261b456604088018261b258565b905060208201519150868103602088015261b471818361b38c565b96505050602093840193919091019060010161b412565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561b380577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261b4ea85835161b258565b9450602093840193919091019060010161b4b0565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561b380577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261b580604087018261b38c565b955050602093840193919091019060010161b527565b60006020828403121561b5a857600080fd5b815180151581146170f857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061b5fb57607f821691505b6020821081036192c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f82111561102657806000526020600020601f840160051c8101602085101561b65b5750805b601f840160051c820191505b818110156124d5576000815560010161b667565b815167ffffffffffffffff81111561b6955761b69561b5b8565b61b6a98161b6a3845461b5e7565b8461b634565b6020601f82116001811461b6dd576000831561b6c55750848201515b600019600385901b1c1916600184901b1784556124d5565b600084815260208120601f198516915b8281101561b70d578785015182556020948501946001909201910161b6ed565b508482101561b72b5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6020815260006170f8602083018461b258565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000617b76608083018461b258565b60006020828403121561b79657600080fd5b5051919050565b6001600160a01b03841681528260208201526060604082015260006192a7606083018461b258565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115616fa457616fa461b7c5565b60808152600061b81a608083018761b258565b6001600160a01b0386166020840152846040840152828103606084015261aeac818561b258565b6001600160a01b038154168252600060018201546001600160a01b038116602085015267ffffffffffffffff8160a01c1660408501525060028201608060608501526000815461b8908161b5e7565b806080880152600182166000811461b8af576001811461b8e95761b91d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660a089015260a082151560051b890101935061b91d565b84600052602060002060005b8381101561b9145781548a820160a0015260019091019060200161b8f5565b890160a0019450505b50919695505050505050565b6001600160a01b03831681526040602082015260006189f5604083018461b841565b83815260606020820152600061b964606083018561b258565b8281036040840152617b76818561b841565b6001600160a01b03861681526001600160a01b038516602082015283604082015260a06060820152600061b9ad60a083018561b258565b828103608084015261b9bf818561b841565b98975050505050505050565b8281526040602082015260006189f5604083018461b258565b60608152600061b9f7606083018661b258565b8460208401528281036040840152617b76818561b258565b80820180821115616fa457616fa461b7c5565b60008261ba58577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006189f5604083018461b258565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161bab781601a85016020880161b234565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161baf481601c84016020880161b234565b01601c01949350505050565b60006020828403121561bb1257600080fd5b81516001600160a01b03811681146170f857600080fd5b6040516060810167ffffffffffffffff8111828210171561bb4c5761bb4c61b5b8565b60405290565b60008067ffffffffffffffff84111561bb6d5761bb6d61b5b8565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561bb9c5761bb9c61b5b8565b60405283815290508082840185101561bbb457600080fd5b618dc484602083018561b234565b600082601f83011261bbd357600080fd5b6170f88383516020850161bb52565b60006020828403121561bbf457600080fd5b815167ffffffffffffffff81111561bc0b57600080fd5b616fa08482850161bbc2565b6000835161bc2981846020880161b234565b83519083019061bc3d81836020880161b234565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161bc7e81601a85016020880161b234565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161bcbb81603384016020880161b234565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006170f8608083018461b258565b60006020828403121561bd4a57600080fd5b815167ffffffffffffffff81111561bd6157600080fd5b8201601f8101841361bd7257600080fd5b616fa08482516020840161bb52565b6000855161bd93818460208a0161b234565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161bdcd816001840160208a0161b234565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161be0b81600284016020890161b234565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161be4d81600284016020880161b234565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061be98604083018461b258565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161bf0f81601f85016020870161b234565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061bf7c604083018461b258565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061bfce604083018461b258565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161c04581601485016020870161b234565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061c08c604083018561b258565b82810360208401526170f4818561b258565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161c10581600185016020870161b234565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161c14b81846020870161b234565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161c1fe81604b85016020870161b234565b91909101604b0192915050565b600060ff821660ff810361c2215761c22161b7c5565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161c28881602985016020870161b234565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006170f8608083018461b258565b60006020828403121561c2ee57600080fd5b815167ffffffffffffffff81111561c30557600080fd5b82016060818503121561c31757600080fd5b61c31f61bb29565b81518060030b811461c33057600080fd5b8152602082015167ffffffffffffffff81111561c34c57600080fd5b61c3588682850161bbc2565b602083015250604082015167ffffffffffffffff81111561c37857600080fd5b61c3848682850161bbc2565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161c3f081602185016020870161b234565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161c5dc81602185016020880161b234565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161c61981602e84016020880161b234565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161c28881602985016020870161b234565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161c6e181602285016020870161b234565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161c72681600e85016020870161b234565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161c80481601885016020880161b234565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161c84181601c84016020880161b234565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161c94781846020870161b234565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161c9ae81601c85016020870161b234565b91909101601c0192915050565b6000600019820361c9ce5761c9ce61b7c5565b5060010190565b8082028115828204841417616fa457616fa461b7c5565b6001815b600184111561ca275780850481111561ca0b5761ca0b61b7c5565b600184161561ca1957908102905b60019390931c92800261c9f0565b935093915050565b60008261ca3e57506001616fa4565b8161ca4b57506000616fa4565b816001811461ca61576002811461ca6b5761ca87565b6001915050616fa4565b60ff84111561ca7c5761ca7c61b7c5565b50506001821b616fa4565b5060208310610133831016604e8410600b841016171561caaa575081810a616fa4565b61cab7600019848461c9ec565b806000190482111561cacb5761cacb61b7c5565b029392505050565b60006170f8838361ca2f565b60008161caee5761caee61b7c5565b506000190190565b6000835161cb0881846020880161b234565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161cb4281600184016020880161b234565b01600101949350505050565b818103600083128015838313168383128216171561a3bc5761a3bc61b7c556fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a003360a060405234801561001057600080fd5b50604051611c7f380380611c7f83398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611c5f8339815191528261014c565b50610143600080516020611c5f8339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b6080516119e8610277600039600081816101ca01528181610556015281816105ab015281816107c8015261081d01526119e86000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638456cb59116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103d5578063e63ab1e9146103e8578063eab103df1461040f57600080fd5b8063d547741f1461038c578063d936547e1461039f578063d9caed12146103c257600080fd5b80639a590427116100bd5780639a5904271461035e5780639b19251a14610371578063a217fddf1461038457600080fd5b80638456cb59146102f657806385f438c1146102fe57806391d148541461032557600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102c55780635c975abb146102d85780635eb72e15146102e357600080fd5b806336568abe146102835780633f4ba83a14610296578063570618e11461029e57600080fd5b8063248a9ca311610176578063248a9ca314610219578063252f07bf1461024b5780632f2ff15d1461027057600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610204575b600080fd5b6101b06101ab3660046113c2565b610422565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bc565b610217610212366004611462565b6104bb565b005b61023d6102273660046114d5565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61021761027e3660046114ee565b61067b565b6102176102913660046114ee565b6106a7565b6102176106f8565b61023d7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec906001600160a01b031681565b60025460ff166101b0565b6102176102f136600461151e565b61072d565b6102176108f2565b61023d7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b06103333660046114ee565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61021761036c3660046115c1565b610924565b61021761037f3660046115c1565b6109d8565b61023d600081565b61021761039a3660046114ee565b610a8f565b6101b06103ad3660046115c1565b60036020526000908152604090205460ff1681565b6102176103d03660046115de565b610ab5565b6102176103e336600461161f565b610bad565b61023d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61021761041d3660046116be565b610dd9565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104b557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104c3610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104ed81610e72565b6104f5610e7c565b6001600160a01b03851660009081526003602052604090205460ff16610547576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61057b6001600160a01b0386167f000000000000000000000000000000000000000000000000000000000000000086610ebb565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906105e89088908a90899089908990600401611724565b600060405180830381600087803b15801561060257600080fd5b505af1158015610616573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161066193929190611767565b60405180910390a3506106746001600055565b5050505050565b6000828152600160208190526040909120015461069781610e72565b6106a18383610f2f565b50505050565b6001600160a01b03811633146106e9576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106f38282610fc2565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61072281610e72565b61072a611049565b50565b610735610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461075f81610e72565b610767610e7c565b6001600160a01b03861660009081526003602052604090205460ff166107b9576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107ed6001600160a01b0387167f000000000000000000000000000000000000000000000000000000000000000087610ebb565b6040517f36c99f3b0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b9061085c9089908b908a908a908a908a90600401611857565b600060405180830381600087803b15801561087657600080fd5b505af115801561088a573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37878787876040516108d794939291906118ae565b60405180910390a3506108ea6001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61091c81610e72565b61072a61109b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61094e81610e72565b6001600160a01b03821661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a0281610e72565b6001600160a01b038216610a42576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610aab81610e72565b6106a18383610fc2565b610abd610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ae781610e72565b610aef610e7c565b6001600160a01b03831660009081526003602052604090205460ff16610b41576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b556001600160a01b0384168584610ebb565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610b9a91815260200190565b60405180910390a3506106f36001600055565b610bb5610e2f565b610bbd610e7c565b60045474010000000000000000000000000000000000000000900460ff16610c11576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610c63576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce791906118da565b9050610cfe6001600160a01b0386163330876110d8565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610d85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da991906118da565b610db391906118f3565b8787604051610dc695949392919061192d565b60405180910390a2506108ea6001600055565b6000610de481610e72565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610e6b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61072a8133611111565b60025460ff1615610eb9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b038381166024830152604482018390526106f391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611188565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16610fba5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104b5565b5060006104b5565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1615610fba5760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104b5565b611051611204565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6110a3610e7c565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861107e3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106a19186918216906323b872dd90608401610ee8565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611184576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b600061119d6001600160a01b03841683611240565b905080516000141580156111c25750808060200190518101906111c09190611966565b155b156106f3576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161117b565b60025460ff16610eb9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061124e83836000611255565b9392505050565b606081471015611293576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161117b565b600080856001600160a01b031684866040516112af9190611983565b60006040518083038185875af1925050503d80600081146112ec576040519150601f19603f3d011682016040523d82523d6000602084013e6112f1565b606091505b509150915061130186838361130b565b9695505050505050565b6060826113205761131b82611380565b61124e565b815115801561133757506001600160a01b0384163b155b15611379576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161117b565b508061124e565b8051156113905780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156113d457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461124e57600080fd5b6001600160a01b038116811461072a57600080fd5b60008083601f84011261142b57600080fd5b50813567ffffffffffffffff81111561144357600080fd5b60208301915083602082850101111561145b57600080fd5b9250929050565b60008060008060006080868803121561147a57600080fd5b853561148581611404565b9450602086013561149581611404565b935060408601359250606086013567ffffffffffffffff8111156114b857600080fd5b6114c488828901611419565b969995985093965092949392505050565b6000602082840312156114e757600080fd5b5035919050565b6000806040838503121561150157600080fd5b82359150602083013561151381611404565b809150509250929050565b60008060008060008060a0878903121561153757600080fd5b863561154281611404565b9550602087013561155281611404565b945060408701359350606087013567ffffffffffffffff81111561157557600080fd5b61158189828a01611419565b909450925050608087013567ffffffffffffffff8111156115a157600080fd5b87016080818a0312156115b357600080fd5b809150509295509295509295565b6000602082840312156115d357600080fd5b813561124e81611404565b6000806000606084860312156115f357600080fd5b83356115fe81611404565b9250602084013561160e81611404565b929592945050506040919091013590565b6000806000806000806080878903121561163857600080fd5b863567ffffffffffffffff81111561164f57600080fd5b61165b89828a01611419565b909750955050602087013561166f81611404565b935060408701359250606087013567ffffffffffffffff81111561169257600080fd5b61169e89828a01611419565b979a9699509497509295939492505050565b801515811461072a57600080fd5b6000602082840312156116d057600080fd5b813561124e816116b0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061175c6080830184866116db565b979650505050505050565b8381526040602082015260006117816040830184866116db565b95945050505050565b6000813561179781611404565b6001600160a01b0316835260208201356117b081611404565b6001600160a01b03166020840152604082013567ffffffffffffffff81168082146117da57600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261181657600080fd5b820160208101903567ffffffffffffffff81111561183357600080fd5b80360382131561184257600080fd5b608060608601526117816080860182846116db565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061188f60a0830185876116db565b82810360808401526118a1818561178a565b9998505050505050505050565b8481526060602082015260006118c86060830185876116db565b828103604084015261175c818561178a565b6000602082840312156118ec57600080fd5b5051919050565b818103818111156104b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006119416060830187896116db565b856020840152828103604084015261195a8185876116db565b98975050505050505050565b60006020828403121561197857600080fd5b815161124e816116b0565b6000825160005b818110156119a4576020818601810151858301520161198a565b50600092019182525091905056fea2646970667358221220dc0b6596b7b61441087636724be59e8874b026b619128cbecb229a5609d1f02d64736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b506040516117aa3803806117aa83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516114d26102d86000396000818161020a015281816105d6015281816108290152818161099a01528181610aef0152610c110152600081816101be01528181610546015281816105a90152818161079901526107fc01526114d26000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b80632ccb404d1161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b80632ccb404d1461025d5780632f2ff15d1461027057600080fd5b8063116191b611610160578063116191b6146101b957806321e093b114610205578063248a9ca31461022c57600080fd5b806301ffc9a71461017c578063106e6290146101a4575b600080fd5b61018f61018a366004610fd3565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611045565b610462565b005b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b61024f61023a366004611078565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761026b3660046110da565b610507565b6101b761027e366004611172565b6106a1565b6101b7610291366004611172565b6106cc565b6101b7610725565b60015460ff1661018f565b6101b76102b736600461119e565b61075a565b6101b76102ca366004611078565b6108ef565b6101b76102dd366004611078565b61095d565b6101b7610a07565b61024f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611172565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61024f600081565b61024f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611172565b610a39565b61024f60035481565b61024f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610aa1565b61049c610aab565b6104a7848484610aea565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5846040516104ef91815260200190565b60405180910390a2506105026001600055565b505050565b61050f610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461053981610aa1565b610541610aab565b61056c7f00000000000000000000000000000000000000000000000000000000000000008785610aea565b6040517f36c99f3b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b90610608907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a90600401611335565b600060405180830381600087803b15801561062257600080fd5b505af1158015610636573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167fa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b8353780178787878660405161068694939291906113a6565b60405180910390a2506106996001600055565b505050505050565b6000828152600260205260409020600101546106bc81610aa1565b6106c68383610c72565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461071b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105028282610d72565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074f81610aa1565b610757610e31565b50565b610762610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078c81610aa1565b610794610aab565b6107bf7f00000000000000000000000000000000000000000000000000000000000000008684610aea565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610859907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016113dd565b600060405180830381600087803b15801561087357600080fd5b505af1158015610887573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d8686866040516108d59392919061142f565b60405180910390a2506108e86001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61091981610aa1565b610921610aab565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610965610aab565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109f357600080fd5b505af11580156108e8573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3181610aa1565b610757610eae565b600082815260026020526040902060010154610a5481610aa1565b6106c68383610d72565b600260005403610a9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107578133610f07565b60015460ff1615610ae8576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7c9190611449565b610b869084611462565b1115610bbe576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d083390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e39610f97565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610eb6610aab565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e84565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f93576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ae8576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fe557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461101557600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461104057600080fd5b919050565b60008060006060848603121561105a57600080fd5b6110638461101c565b95602085013595506040909401359392505050565b60006020828403121561108a57600080fd5b5035919050565b60008083601f8401126110a357600080fd5b50813567ffffffffffffffff8111156110bb57600080fd5b6020830191508360208285010111156110d357600080fd5b9250929050565b60008060008060008060a087890312156110f357600080fd5b6110fc8761101c565b955060208701359450604087013567ffffffffffffffff81111561111f57600080fd5b61112b89828a01611091565b90955093505060608701359150608087013567ffffffffffffffff81111561115257600080fd5b87016080818a03121561116457600080fd5b809150509295509295509295565b6000806040838503121561118557600080fd5b823591506111956020840161101c565b90509250929050565b6000806000806000608086880312156111b657600080fd5b6111bf8661101c565b945060208601359350604086013567ffffffffffffffff8111156111e257600080fd5b6111ee88828901611091565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff6112678261101c565b16825273ffffffffffffffffffffffffffffffffffffffff61128b6020830161101c565b1660208301526000604082013567ffffffffffffffff81168082146112af57600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126112eb57600080fd5b820160208101903567ffffffffffffffff81111561130857600080fd5b80360382131561131757600080fd5b6080606086015261132c608086018284611200565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061138760a083018587611200565b82810360808401526113998185611249565b9998505050505050505050565b8481526060602082015260006113c0606083018587611200565b82810360408401526113d28185611249565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113d2608083018486611200565b83815260406020820152600061132c604083018486611200565b60006020828403121561145b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220276d75628e17e347d14c84f90b610fc13968efff6201b1233b79eeaa7cb742c964736f6c634300081a00336080604052348015600f57600080fd5b506001600055610eea806100246000396000f3fe60806040526004361061006e5760003560e01c80636ed701691161004b5780636ed70169146100e0578063c5131691146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a2146100775780635ac1e07014610097578063676cc054146100b757005b3661007557005b005b34801561008357600080fd5b50610075610092366004610724565b610148565b3480156100a357600080fd5b506100756100b2366004610760565b6101de565b6100ca6100c536600461079b565b61021a565b6040516100d79190610896565b60405180910390f35b3480156100ec57600080fd5b5061007561024d565b34801561010157600080fd5b50610075610110366004610724565b610282565b6100756101233660046109ce565b61035d565b34801561013457600080fd5b50610075610143366004610aba565b6103a1565b6101506103d6565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610419565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b7f8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264338260405161020f929190610bed565b60405180910390a150565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a19392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61028a6103d6565b6000610297600285610cf3565b9050806000036102d3576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102f573ffffffffffffffffffffffffffffffffffffffff8416338484610419565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610394959493929190610d2e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103949493929190610db8565b600260005403610412576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104ae9085906104b4565b50505050565b60006104d673ffffffffffffffffffffffffffffffffffffffff84168361054f565b905080516000141580156104fb5750808060200190518101906104f99190610e7b565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061055d83836000610564565b9392505050565b6060814710156105a2576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610546565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105cb9190610e98565b60006040518083038185875af1925050503d8060008114610608576040519150601f19603f3d011682016040523d82523d6000602084013e61060d565b606091505b509150915061061d868383610627565b9695505050505050565b60608261063c57610637826106b6565b61055d565b8151158015610660575073ffffffffffffffffffffffffffffffffffffffff84163b155b156106af576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610546565b508061055d565b8051156106c65780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461071f57600080fd5b919050565b60008060006060848603121561073957600080fd5b83359250610749602085016106fb565b9150610757604085016106fb565b90509250925092565b60006020828403121561077257600080fd5b813567ffffffffffffffff81111561078957600080fd5b82016080818503121561055d57600080fd5b600080600083850360408112156107b157600080fd5b60208112156107bf57600080fd5b50839250602084013567ffffffffffffffff8111156107dd57600080fd5b8401601f810186136107ee57600080fd5b803567ffffffffffffffff81111561080557600080fd5b86602082840101111561081757600080fd5b939660209190910195509293505050565b60005b8381101561084357818101518382015260200161082b565b50506000910152565b60008151808452610864816020860160208601610828565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061055d602083018461084c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561091f5761091f6108a9565b604052919050565b600082601f83011261093857600080fd5b813567ffffffffffffffff811115610952576109526108a9565b61098360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108d8565b81815284602083860101111561099857600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106f857600080fd5b803561071f816109b5565b6000806000606084860312156109e357600080fd5b833567ffffffffffffffff8111156109fa57600080fd5b610a0686828701610927565b935050602084013591506040840135610a1e816109b5565b809150509250925092565b600067ffffffffffffffff821115610a4357610a436108a9565b5060051b60200190565b600082601f830112610a5e57600080fd5b8135610a71610a6c82610a29565b6108d8565b8082825260208201915060208360051b860101925085831115610a9357600080fd5b602085015b83811015610ab0578035835260209283019201610a98565b5095945050505050565b600080600060608486031215610acf57600080fd5b833567ffffffffffffffff811115610ae657600080fd5b8401601f81018613610af757600080fd5b8035610b05610a6c82610a29565b8082825260208201915060208360051b850101925088831115610b2757600080fd5b602084015b83811015610b6957803567ffffffffffffffff811115610b4b57600080fd5b610b5a8b602083890101610927565b84525060209283019201610b2c565b509550505050602084013567ffffffffffffffff811115610b8957600080fd5b610b9586828701610a4d565b925050610757604085016109c3565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2b836106fb565b16604082015273ffffffffffffffffffffffffffffffffffffffff610c52602084016106fb565b1660608201526000604083013567ffffffffffffffff8116808214610c7657600080fd5b6080840152506060830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610cb257600080fd5b830160208101903567ffffffffffffffff811115610ccf57600080fd5b803603821315610cde57600080fd5b608060a085015261061d60c085018284610ba4565b600082610d29577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d6360a083018661084c565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610dae578151865260209586019590910190600101610d90565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e4b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e3685835161084c565b94506020938401939190910190600101610dfc565b505050508281036040840152610e618186610d7c565b915050610e72606083018415159052565b95945050505050565b600060208284031215610e8d57600080fd5b815161055d816109b5565b60008251610eaa818460208701610828565b919091019291505056fea264697066735822122075e241dc7d0b3cc5bb3ca3c583250993ad9bf6a64ef50849b87060df5ab2e8e364736f6c634300081a0033a264697066735822122069a51a66a23cf1c77a52cbf5855ebcd95a303439bcb1d25d669a7d9b16e6896264736f6c634300081a0033", } // ERC20CustodyTestABI is the input ABI used to generate the binding from. @@ -2885,9 +2886,9 @@ type ERC20CustodyTestReceivedRevert struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterReceivedRevert(opts *bind.FilterOpts) (*ERC20CustodyTestReceivedRevertIterator, error) { logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "ReceivedRevert") @@ -2897,9 +2898,9 @@ func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterReceivedRevert(opts *bi return &ERC20CustodyTestReceivedRevertIterator{contract: _ERC20CustodyTest.contract, event: "ReceivedRevert", logs: logs, sub: sub}, nil } -// WatchReceivedRevert is a free log subscription operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// WatchReceivedRevert is a free log subscription operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchReceivedRevert(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestReceivedRevert) (event.Subscription, error) { logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "ReceivedRevert") @@ -2934,9 +2935,9 @@ func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchReceivedRevert(opts *bin }), nil } -// ParseReceivedRevert is a log parse operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// ParseReceivedRevert is a log parse operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseReceivedRevert(log types.Log) (*ERC20CustodyTestReceivedRevert, error) { event := new(ERC20CustodyTestReceivedRevert) if err := _ERC20CustodyTest.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { @@ -3023,9 +3024,9 @@ type ERC20CustodyTestReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// FilterReverted is a free log retrieval operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*ERC20CustodyTestRevertedIterator, error) { var toRule []interface{} @@ -3044,9 +3045,9 @@ func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterReverted(opts *bind.Fil return &ERC20CustodyTestRevertedIterator{contract: _ERC20CustodyTest.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// WatchReverted is a free log subscription operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -3090,9 +3091,9 @@ func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchReverted(opts *bind.Watc }), nil } -// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// ParseReverted is a log parse operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseReverted(log types.Log) (*ERC20CustodyTestReverted, error) { event := new(ERC20CustodyTestReverted) if err := _ERC20CustodyTest.contract.UnpackLog(event, "Reverted", log); err != nil { @@ -3776,9 +3777,9 @@ type ERC20CustodyTestWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*ERC20CustodyTestWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -3797,9 +3798,9 @@ func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterWithdrawnAndReverted(op return &ERC20CustodyTestWithdrawnAndRevertedIterator{contract: _ERC20CustodyTest.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestWithdrawnAndReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -3843,9 +3844,9 @@ func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchWithdrawnAndReverted(opt }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseWithdrawnAndReverted(log types.Log) (*ERC20CustodyTestWithdrawnAndReverted, error) { event := new(ERC20CustodyTestWithdrawnAndReverted) if err := _ERC20CustodyTest.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { diff --git a/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go b/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go index 76276577..286cb79b 100644 --- a/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go +++ b/v2/pkg/erc20custodyechidnatest.sol/erc20custodyechidnatest.go @@ -31,6 +31,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -38,8 +39,8 @@ type RevertContext struct { // ERC20CustodyEchidnaTestMetaData contains all meta data concerning the ERC20CustodyEchidnaTest contract. var ERC20CustodyEchidnaTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"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\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyMethodsNotSupported\",\"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\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x600680546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b179091526100799291906102a816565b600780546001600160a01b03929092166001600160a01b03199283168117909155600880549092161790553480156100b057600080fd5b5060085460065460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556101486000826102c7565b506101737f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826102c7565b5061019e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836102c7565b506101b7600080516020617295833981519152826102c7565b506101d0600080516020617295833981519152836102c7565b505050506040516101e090613853565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f080158015610232573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b0392831617905560085460405163ae7a3a6f60e01b815230600482015291169063ae7a3a6f90602401600060405180830381600087803b15801561028b57600080fd5b505af115801561029f573d6000803e3d6000fd5b505050506148d4565b60006102b2613860565b6102bd84848361035a565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166103525760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016102c1565b5060006102c1565b60008061036785846103d6565b90506103cb6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016103b5929190613969565b60408051601f19818403018152919052856103e2565b9150505b9392505050565b60006103cf8383610416565b60c0810151516000901561040c5761040584848460c0015161043760201b60201c565b90506103cf565b61040584846105b0565b6000610422838361067d565b6103cf838360200151846103e260201b60201c565b60008061044261068d565b905060006104508683610727565b9050600061046d8260600151836020015185610b4a60201b60201c565b9050600061047d83838989610cff565b9050600061048a8261197b565b602081015181519192509060030b156104e3578982604001516040516020016104b492919061398d565b60408051601f198184030181529082905262461bcd60e51b82526104da916004016139f3565b60405180910390fd5b600061052c6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611b1260201b60201c565b60405163c6ce059d60e01b81529091506000805160206172758339815191529063c6ce059d906105609084906004016139f3565b602060405180830381865afa15801561057d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a19190613a06565b9b9a5050505050505050505050565b604051638d1cc92560e01b8152600090819060008051602061727583398151915290638d1cc925906105e69087906004016139f3565b600060405180830381865afa158015610603573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261062b9190810190613afb565b9050600061065a8285604051602001610645929190613b2f565b60408051601f19818403018152919052611cb2565b90506001600160a01b0381166102bd5784846040516020016104b4929190613b5e565b61068982826000611cc5565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b815260609160008051602061727583398151915291829063d145736c906106db908490600401613bed565b600060405180830381865afa1580156106f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107209190810190613c22565b9250505090565b6107596040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020617275833981519152905061079e6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6107a785611d9f565b602082015260006107b786611ff4565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108219190810190613c22565b8683856020015160405160200161083b9493929190613c6a565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb119061087a9085906004016139f3565b600060405180830381865afa158015610897573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108bf9190810190613c22565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108ee908490600401613d02565b602060405180830381865afa15801561090b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092f9190613d3b565b61094457816040516020016104b49190613d5d565b6040516309389f5960e31b81526001600160a01b038616906349c4fac890610970908490600401613dd4565b600060405180830381865afa15801561098d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109b59190810190613c22565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f6906109e3908490600401613e1a565b602060405180830381865afa158015610a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a249190613d3b565b15610aa0576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a55908490600401613e1a565b600060405180830381865afa158015610a72573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a9a9190810190613c22565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610ac59190613e5b565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610af1929190613eb6565b600060405180830381865afa158015610b0e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b369190810190613c22565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b66579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610bad57610bad613edb565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610be757610be7613edb565b602002602001018190525084604051602001610c039190613ef1565b60405160208183030381529060405281600281518110610c2557610c25613edb565b602002602001018190525082604051602001610c419190613f26565b60405160208183030381529060405281600381518110610c6357610c63613edb565b60209081029190910101526000610c798261197b565b9050600081602001519050610ce0610cb360405180604001604052806005815260200164173539b7b760d91b81525061217760201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152906121a4565b610cf557856040516020016104b49190613f55565b9695505050505050565b60a08101516040805180820182526000808252602091820152815180830190925282518083529281019101526060906000805160206172758339815191529015610d49565b511590565b610e6557826020015115610dd95760405162461bcd60e51b815260206004820152605860248201526000805160206172b583398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016104da565b8260c0015115610e655760405162461bcd60e51b815260206004820152605360248201526000805160206172b583398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016104da565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e7e5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610ebf90613fea565b935060ff1681518110610ed457610ed4613edb565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610f159190614009565b604051602081830303815290604052828280610f3090613fea565b935060ff1681518110610f4557610f45613edb565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f7b90613fea565b935060ff1681518110610f9057610f90613edb565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610fce90613fea565b935060ff1681518110610fe357610fe3613edb565b60200260200101819052508760200151828280610fff90613fea565b935060ff168151811061101457611014613edb565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061105290613fea565b935060ff168151811061106757611067613edb565b60209081029190910101528751828261107f81613fea565b935060ff168151811061109457611094613edb565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b8152508282806110cd90613fea565b935060ff16815181106110e2576110e2613edb565b60209081029190910101526110f646612205565b828261110181613fea565b935060ff168151811061111657611116613edb565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061115590613fea565b935060ff168151811061116a5761116a613edb565b60200260200101819052508682828061118290613fea565b935060ff168151811061119757611197613edb565b60209081029190910101528551156112a55760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111e881613fea565b935060ff16815181106111fd576111fd613edb565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d906112349089906004016139f3565b600060405180830381865afa158015611251573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112799190810190613c22565b828261128481613fea565b935060ff168151811061129957611299613edb565b60200260200101819052505b846020015115611352576040805180820190915260128152712d2d766572696679536f75726365436f646560701b602082015282826112e381613fea565b935060ff16815181106112f8576112f8613edb565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b81525082828061132d90613fea565b935060ff168151811061134257611342613edb565b60200260200101819052506114b9565b611368610d448660a0015161217760201b60201c565b6113eb5760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261139b81613fea565b935060ff16815181106113b0576113b0613edb565b60200260200101819052508460a001516040516020016113d09190613ef1565b60405160208183030381529060405282828061132d90613fea565b8460c00151158015611410575061140e610d44896040015161217760201b60201c565b155b156114b95760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261144481613fea565b935060ff168151811061145957611459613edb565b602090810291909101015261146d88612297565b60405160200161147d9190613ef1565b60405160208183030381529060405282828061149890613fea565b935060ff16815181106114ad576114ad613edb565b60200260200101819052505b6114cf610d44866040015161217760201b60201c565b6115525760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b6020820152828261150081613fea565b935060ff168151811061151557611515613edb565b6020026020010181905250846040015182828061153190613fea565b935060ff168151811061154657611546613edb565b60200260200101819052505b606085015115611643576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261158481613fea565b935060ff168151811061159957611599613edb565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116179190810190613c22565b828261162281613fea565b935060ff168151811061163757611637613edb565b60200260200101819052505b60e085015151156116d55760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261167a81613fea565b935060ff168151811061168f5761168f613edb565b602090810291909101015260e0850151516116a990612205565b82826116b481613fea565b935060ff16815181106116c9576116c9613edb565b60200260200101819052505b60e085015160200151156117725760408051808201909152600a8152692d2d676173507269636560b01b6020820152828261170f81613fea565b935060ff168151811061172457611724613edb565b60200260200101819052506117468560e001516020015161220560201b60201c565b828261175181613fea565b935060ff168151811061176657611766613edb565b60200260200101819052505b60e085015160400151156118135760408051808201909152600e81526d2d2d6d617846656550657247617360901b602082015282826117b081613fea565b935060ff16815181106117c5576117c5613edb565b60200260200101819052506117e78560e001516040015161220560201b60201c565b82826117f281613fea565b935060ff168151811061180757611807613edb565b60200260200101819052505b60e085015160600151156118c35760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261186081613fea565b935060ff168151811061187557611875613edb565b60200260200101819052506118978560e001516060015161220560201b60201c565b82826118a281613fea565b935060ff16815181106118b7576118b7613edb565b60200260200101819052505b60008160ff166001600160401b038111156118e0576118e0613a2f565b60405190808252806020026020018201604052801561191357816020015b60608152602001906001900390816118fe5790505b50905060005b8260ff168160ff16101561196c57838160ff168151811061193c5761193c613edb565b6020026020010151828260ff168151811061195957611959613edb565b6020908102919091010152600101611919565b5093505050505b949350505050565b6119a26040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b815260008051602061727583398151915292600091849163d145736c916119f091869101614060565b600060405180830381865afa158015611a0d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a359190810190613c22565b90506000611a43868361294d565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a7391906140a7565b6000604051808303816000875af1158015611a92573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611aba919081019061410c565b805190915060030b15801590611ad35750602081015151155b8015611ae25750604081015151155b15610cf55781600081518110611afa57611afa613edb565b60200260200101516040516020016104b491906141bf565b60606000611b478560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b7e9082905b90612a87565b15611c7b576000611bfb82611bf581611bef611bc18a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612aae565b90612b0b565b9050611c2f611c28604051806040016040528060018152602001600560f91b81525061217760201b60201c565b8290612a87565b15611c6957611c66611c5f604051806040016040528060018152602001600560f91b81525061217760201b60201c565b8290612b90565b90505b611c7281612bb6565b925050506103cf565b8215611c945784846040516020016104b492919061438f565b50506040805160208101909152600081526103cf565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611cd457505050565b6000611ce1848484612c1b565b90506000611cee8261197b565b602081015181519192509060030b158015611d615750611d61611d35604051806040016040528060078152602001665355434345535360c81b81525061217760201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b78565b15611d6e57505050505050565b60408201515115611d8e5781604001516040516020016104b4919061440a565b806040516020016104b49190614454565b60606000611dd48360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611e0b611e04604051806040016040528060048152602001630b9cdbdb60e21b81525061217760201b60201c565b82906121a4565b15611e4d576103cf611e48611e41604051806040016040528060048152602001630b9cdbdb60e21b81525061217760201b60201c565b839061312e565b612bb6565b611e7f611e78604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b82906131b8565b600103611ee757611eb1611c5f604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b506103cf611e48611ee0604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b8390612b90565b611f16611e0460405180604001604052806005815260200164173539b7b760d91b81525061217760201b60201c565b15611fe3576000611f4e82611f49604051806040016040528060018152602001602f60f81b81525061217760201b60201c565b61324d565b905060008160018351611f6191906144a4565b81518110611f7157611f71613edb565b60200260200101519050611fda611e48611fad60405180604001604052806005815260200164173539b7b760d91b81525061217760201b60201c565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061312e565b95945050505050565b826040516020016104b491906144b7565b606060006120298360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612059611e04604051806040016040528060048152602001630b9cdbdb60e21b81525061217760201b60201c565b15612067576103cf81612bb6565b612092611e78604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b6001036120c7576103cf611e48611ee0604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b6120f6611e0460405180604001604052806005815260200164173539b7b760d91b81525061217760201b60201c565b15611fe357600061212982611f49604051806040016040528060018152602001602f60f81b81525061217760201b60201c565b905060018151111561216557806002825161214491906144a4565b8151811061215457612154613edb565b602002602001015192505050919050565b50826040516020016104b491906144b7565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121b9575060006102c1565b815183516020850151600092916121cf91614571565b6121d991906144a4565b9050826020015181036121f05760019150506102c1565b82516020840151819020912014905092915050565b60606000612212836132f1565b60010190506000816001600160401b0381111561223157612231613a2f565b6040519080825280601f01601f19166020018201604052801561225b576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461226557509392505050565b606060006122ae836040015161217760201b60201c565b90506122eb6122e46040518060400160405280600a8152602001691553931250d15394d15160b21b81525061217760201b60201c565b82906133d3565b156123125750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b6123456122e460405180604001604052806009815260200168556e6c6963656e736560b81b81525061217760201b60201c565b15612371575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b61239e6122e46040518060400160405280600381526020016213525560ea1b81525061217760201b60201c565b156123c457505060408051808201909152600381526213525560ea1b6020820152919050565b6123fa6122e46040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061217760201b60201c565b8061243a575061243a6122e46040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061217760201b60201c565b1561246657505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b61249c6122e46040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061217760201b60201c565b806124dc57506124dc6122e46040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061217760201b60201c565b15612508575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b61253f6122e46040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061217760201b60201c565b8061258057506125806122e4604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061217760201b60201c565b156125af57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125e66122e46040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061217760201b60201c565b8061262757506126276122e4604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061217760201b60201c565b1561265457505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b61268a6122e46040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061217760201b60201c565b156126b957505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126ef6122e46040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061217760201b60201c565b1561271e57505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61274f6122e46040518060400160405280600781526020016604d504c2d322e360cc1b81525061217760201b60201c565b1561277957505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b6127aa6122e46040518060400160405280600781526020016604f534c2d332e360cc1b81525061217760201b60201c565b156127d457505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6128086122e46040518060400160405280600a81526020016904170616368652d322e360b41b81525061217760201b60201c565b1561283557505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b61286c6122e46040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061217760201b60201c565b806128ad57506128ad6122e46040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061217760201b60201c565b156128da57505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b61290c6122e4604051806040016040528060088152602001674255534c2d312e3160c01b81525061217760201b60201c565b1561293657505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b604080840151845191516104b49290602001614584565b60608060005b84518110156129d8578185828151811061296f5761296f613edb565b6020026020010151604051602001612988929190613b2f565b6040516020818303038152906040529150600185516129a791906144a4565b81146129d057816040516020016129be91906146d4565b60405160208183030381529060405291505b600101612953565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129f15790505090508381600081518110612a1c57612a1c613edb565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a5557612a55613edb565b60200260200101819052508181600281518110612a7457612a74613edb565b6020908102919091010152949350505050565b6020808301518351835192840151600093612aa592918491906133e7565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612adb93906134f8565b9050836020015181612aed91906144a4565b84518590612afc9083906144a4565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612b305750816102c1565b6020808301519084015160019114612b575750815160208481015190840151829020919020145b8015612b8857825184518590612b6e9083906144a4565b9052508251602085018051612b84908390614571565b9052505b509192915050565b6040805180820190915260008082526020820152612baf838383613618565b5092915050565b6060600082600001516001600160401b03811115612bd657612bd6613a2f565b6040519080825280601f01601f191660200182016040528015612c00576020820181803683370190505b50602084810151855192935090830191612baf9183916136be565b60606000612c2761068d565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612c445790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c8590613fea565b935060ff1681518110612c9a57612c9a613edb565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612cd591906146f9565b604051602081830303815290604052828280612cf090613fea565b935060ff1681518110612d0557612d05613edb565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612d3d90613fea565b935060ff1681518110612d5257612d52613edb565b602002602001018190525082604051602001612d6e9190613f26565b604051602081830303815290604052828280612d8990613fea565b935060ff1681518110612d9e57612d9e613edb565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612dd890613fea565b935060ff1681518110612ded57612ded613edb565b6020908102919091010152612e028784613738565b8282612e0d81613fea565b935060ff1681518110612e2257612e22613edb565b602090810291909101015285515115612eba5760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e6281613fea565b935060ff1681518110612e7757612e77613edb565b60209081029190910101528551612e8e9084613738565b8282612e9981613fea565b935060ff1681518110612eae57612eae613edb565b60200260200101819052505b856080015115612f285760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612f0381613fea565b935060ff1681518110612f1857612f18613edb565b6020026020010181905250612f83565b8415612f83576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f6281613fea565b935060ff1681518110612f7757612f77613edb565b60200260200101819052505b6040860151511561300f5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612fbd81613fea565b935060ff1681518110612fd257612fd2613edb565b60200260200101819052508560400151828280612fee90613fea565b935060ff168151811061300357613003613edb565b60200260200101819052505b8560600151156130795760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261305881613fea565b935060ff168151811061306d5761306d613edb565b60200260200101819052505b60008160ff166001600160401b0381111561309657613096613a2f565b6040519080825280602002602001820160405280156130c957816020015b60608152602001906001900390816130b45790505b50905060005b8260ff168160ff16101561312257838160ff16815181106130f2576130f2613edb565b6020026020010151828260ff168151811061310f5761310f613edb565b60209081029190910101526001016130cf565b50979650505050505050565b60408051808201909152600080825260208201528151835110156131535750816102c1565b8151835160208501516000929161316991614571565b61317391906144a4565b60208401519091506001908214613194575082516020840151819020908220145b80156131af578351855186906131ab9083906144a4565b9052505b50929392505050565b8051825160208085015190840151600093849390926131d89284906134f8565b6131e29190614571565b90505b835160208501516131f69190614571565b8111612baf57816132068161473e565b925050826000015161323c85602001518361322191906144a4565b865161322d91906144a4565b855160208701518591906134f8565b6132469190614571565b90506131e5565b6060600061325b84846131b8565b613266906001614571565b6001600160401b0381111561327d5761327d613a2f565b6040519080825280602002602001820160405280156132b057816020015b606081526020019060019003908161329b5790505b50905060005b8151811015611caa576132cc611e488686612b90565b8282815181106132de576132de613edb565b60209081029190910101526001016132b6565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061333a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613366576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061338457662386f26fc10000830492506010015b6305f5e100831061339c576305f5e100830492506008015b61271083106133b057612710830492506004015b606483106133c2576064830492506002015b600a83106102c15760010192915050565b60006133df8383613778565b159392505050565b6000808584116134ee576020841161349a576000841561343257600161340e8660206144a4565b613419906008614757565b613424906002614855565b61342e91906144a4565b1990505b83518116856134418989614571565b61344b91906144a4565b805190935082165b8181146134855787841161346d5787945050505050611973565b8361347781614861565b945050828451169050613453565b61348f8785614571565b945050505050611973565b8383206134a785886144a4565b6134b19087614571565b91505b8582106134ec578482208082036134d9576134cf8684614571565b9350505050611973565b6134e46001846144a4565b9250506134b4565b505b5092949350505050565b6000838186851161360357602085116135b257600085156135445760016135208760206144a4565b61352b906008614757565b613536906002614855565b61354091906144a4565b1990505b845181166000876135558b8b614571565b61355f91906144a4565b855190915083165b8281146135a45781861061358c5761357f8b8b614571565b9650505050505050611973565b856135968161473e565b965050838651169050613567565b859650505050505050611973565b508383206000905b6135c486896144a4565b8211613601578583208082036135e05783945050505050611973565b6135eb600185614571565b93505081806135f99061473e565b9250506135ba565b505b61360d8787614571565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161364593906134f8565b60208087018051918601919091525190915061366190826144a4565b8352845160208601516136749190614571565b810361368357600085526136b5565b835183516136919190614571565b855186906136a09083906144a4565b90525083516136af9082614571565b60208601525b50909392505050565b602081106136f657815183526136d5602084614571565b92506136e2602083614571565b91506136ef6020826144a4565b90506136be565b600019811561372557600161370c8360206144a4565b61371890610100614855565b61372291906144a4565b90505b9151835183169219169190911790915250565b606060006137468484610727565b805160208083015160405193945061376093909101614878565b60405160208183030381529060405291505092915050565b815181516000919081111561378b575081515b6020808501519084015160005b8381101561384457825182518082146138145760001960208710156137f3576001846137c58960206144a4565b6137cf9190614571565b6137da906008614757565b6137e5906002614855565b6137ef91906144a4565b1990505b81811683821681810391146138115797506102c19650505050505050565b50505b61381f602086614571565b945061382c602085614571565b9350505060208161383d9190614571565b9050613798565b5084518651610cf591906148b4565b610c9f806165d683390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016138a36138a8565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016138a36040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b8381101561393457818101518382015260200161391c565b50506000910152565b60008151808452613955816020860160208601613919565b601f01601f19169290920160200192915050565b6001600160a01b03831681526040602082018190526000906119739083018461393d565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516139c581601a850160208801613919565b6101d160f51b601a9184019182015283516139e781601c840160208801613919565b01601c01949350505050565b6020815260006103cf602083018461393d565b600060208284031215613a1857600080fd5b81516001600160a01b03811681146103cf57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a6757613a67613a2f565b60405290565b6000806001600160401b03841115613a8757613a87613a2f565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613ab557613ab5613a2f565b604052838152905080828401851015613acd57600080fd5b611caa846020830185613919565b600082601f830112613aec57600080fd5b6103cf83835160208501613a6d565b600060208284031215613b0d57600080fd5b81516001600160401b03811115613b2357600080fd5b6102bd84828501613adb565b60008351613b41818460208801613919565b835190830190613b55818360208801613919565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b9681601a850160208801613919565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613bd3816033840160208801613919565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b60608201526080602082015260006103cf608083018461393d565b600060208284031215613c3457600080fd5b81516001600160401b03811115613c4a57600080fd5b8201601f81018413613c5b57600080fd5b6102bd84825160208401613a6d565b60008551613c7c818460208a01613919565b602f60f81b9083019081528551613c9a816001840160208a01613919565b602f60f81b600192909101918201528451613cbc816002840160208901613919565b600181830101915050602f60f81b60018201528351613ce2816002840160208801613919565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613d15604083018461393d565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d4d57600080fd5b815180151581146103cf57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d9581601f850160208701613919565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613de7604083018461393d565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613e2d604083018461393d565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e93816014850160208701613919565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613ec9604083018561393d565b82810360208401526103cb818561393d565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613f0e816001850160208701613919565b601160f91b6001939091019283015250600201919050565b60008251613f38818460208701613919565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613fc781604b850160208701613919565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff810361400057614000613fd4565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b602082015260008251614053816029850160208701613919565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006103cf608083018461393d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561410057603f198786030184526140eb85835161393d565b945060209384019391909101906001016140cf565b50929695505050505050565b60006020828403121561411e57600080fd5b81516001600160401b0381111561413457600080fd5b82016060818503121561414657600080fd5b61414e613a45565b81518060030b811461415f57600080fd5b815260208201516001600160401b0381111561417a57600080fd5b61418686828501613adb565b60208301525060408201516001600160401b038111156141a557600080fd5b6141b186828501613adb565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b602082015260008251614201816021850160208701613919565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b6020820152600083516143d1816021850160208801613919565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143fe81602e840160208801613919565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b602082015260008251614053816029850160208701613919565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b602082015260008251614497816022850160208701613919565b9190910160220192915050565b818103818111156102c1576102c1613fd4565b6d021b7b73a3930b1ba103730b6b2960951b8152600082516144e081600e850160208701613919565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b808201808211156102c1576102c1613fd4565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145bc816018850160208801613919565b6301034b7160e51b60189184019182015283516145e081601c840160208801613919565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146e6818460208701613919565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161473181601c850160208701613919565b91909101601c0192915050565b60006001820161475057614750613fd4565b5060010190565b80820281158282048414176102c1576102c1613fd4565b6001815b60018411156147a95780850481111561478d5761478d613fd4565b600184161561479b57908102905b60019390931c928002614772565b935093915050565b6000826147c0575060016102c1565b816147cd575060006102c1565b81600181146147e357600281146147ed57614809565b60019150506102c1565b60ff8411156147fe576147fe613fd4565b50506001821b6102c1565b5060208310610133831016604e8410600b841016171561482c575081810a6102c1565b614839600019848461476e565b806000190482111561484d5761484d613fd4565b029392505050565b60006103cf83836147b1565b60008161487057614870613fd4565b506000190190565b6000835161488a818460208801613919565b601d60f91b90830190815283516148a8816001840160208801613919565b01600101949350505050565b8181036000831280158383131683831282161715612baf57612baf613fd4565b608051611cc4614912600039600081816101eb015281816105b001528181610605015281816108fe01528181610bb70152610c0c0152611cc46000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806381100bf0116100f9578063c709ab6e11610097578063d9caed1211610071578063d9caed121461041c578063e609055e1461042f578063e63ab1e914610442578063eab103df1461046957600080fd5b8063c709ab6e146103d3578063d547741f146103e6578063d936547e146103f957600080fd5b806391d14854116100d357806391d148541461036c5780639a590427146103a55780639b19251a146103b8578063a217fddf146103cb57600080fd5b806381100bf01461032a5780638456cb591461033d57806385f438c11461034557600080fd5b806336568abe11610166578063570618e111610140578063570618e1146102d25780635b112591146102f95780635c975abb1461030c5780636133b4bb1461031757600080fd5b806336568abe146102a45780633c2f05a8146102b75780633f4ba83a146102ca57600080fd5b8063248a9ca311610197578063248a9ca31461023a578063252f07bf1461026c5780632f2ff15d1461029157600080fd5b806301ffc9a7146101be578063116191b6146101e657806321fc65f214610225575b600080fd5b6101d16101cc366004611614565b61047c565b60405190151581526020015b60405180910390f35b61020d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101dd565b6102386102333660046116b4565b610515565b005b61025e610248366004611727565b6000908152600160208190526040909120015490565b6040519081526020016101dd565b6004546101d19074010000000000000000000000000000000000000000900460ff1681565b61023861029f366004611740565b6106d5565b6102386102b2366004611740565b610701565b60055461020d906001600160a01b031681565b610238610752565b61025e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60045461020d906001600160a01b031681565b60025460ff166101d1565b610238610325366004611770565b610787565b60065461020d906001600160a01b031681565b61023861097f565b61025e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101d161037a366004611740565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6102386103b33660046117cc565b6109b1565b6102386103c63660046117cc565b610a65565b61025e600081565b6102386103e13660046117e9565b610b1c565b6102386103f4366004611740565b610ce1565b6101d16104073660046117cc565b60036020526000908152604090205460ff1681565b61023861042a36600461188c565b610d07565b61023861043d3660046118cd565b610dff565b61025e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023861047736600461196c565b61102b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061050f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61051d611081565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610547816110c4565b61054f6110ce565b6001600160a01b03851660009081526003602052604090205460ff166105a1576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105d56001600160a01b0386167f00000000000000000000000000000000000000000000000000000000000000008661110d565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106429088908a908990899089906004016119d2565b600060405180830381600087803b15801561065c57600080fd5b505af1158015610670573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d58686866040516106bb93929190611a15565b60405180910390a3506106ce6001600055565b5050505050565b600082815260016020819052604090912001546106f1816110c4565b6106fb8383611181565b50505050565b6001600160a01b0381163314610743576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074d8282611214565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077c816110c4565b61078461129b565b50565b600580546001600160a01b0316906340c10f199030906107a8908790611a67565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561080657600080fd5b505af115801561081a573d6000803e3d6000fd5b5050600580546008546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481019390935216925063a9059cbb91506044016020604051808303816000875af115801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190611a7a565b506005546108cb906001600160a01b031685858585610515565b6005546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152909116906370a0823190602401602060405180830381865afa15801561094e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109729190611a97565b156106fb576106fb611ab0565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109a9816110c4565b6107846112ed565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6109db816110c4565b6001600160a01b038216610a1b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a8f816110c4565b6001600160a01b038216610acf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b610b24611081565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b4e816110c4565b610b566110ce565b6001600160a01b03861660009081526003602052604090205460ff16610ba8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bdc6001600160a01b0387167f00000000000000000000000000000000000000000000000000000000000000008761110d565b6040517fd0b492c30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610c4b9089908b908a908a908a908a90600401611b90565b600060405180830381600087803b158015610c6557600080fd5b505af1158015610c79573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b87878787604051610cc69493929190611be7565b60405180910390a350610cd96001600055565b505050505050565b60008281526001602081905260409091200154610cfd816110c4565b6106fb8383611214565b610d0f611081565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d39816110c4565b610d416110ce565b6001600160a01b03831660009081526003602052604090205460ff16610d93576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610da76001600160a01b038416858461110d565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610dec91815260200190565b60405180910390a35061074d6001600055565b610e07611081565b610e0f6110ce565b60045474010000000000000000000000000000000000000000900460ff16610e63576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610eb5576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f399190611a97565b9050610f506001600160a01b03861633308761132a565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610fd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffb9190611a97565b6110059190611c13565b8787604051611018959493929190611c26565b60405180910390a250610cd96001600055565b6000611036816110c4565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6002600054036110bd576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107848133611363565b60025460ff161561110b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261074d91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506113da565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661120c5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a450600161050f565b50600061050f565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff161561120c5760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161050f565b6112a3611456565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6112f56110ce565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112d03390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106fb9186918216906323b872dd9060840161113a565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff166113d6576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b60006113ef6001600160a01b03841683611492565b905080516000141580156114145750808060200190518101906114129190611a7a565b155b1561074d576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016113cd565b60025460ff1661110b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606114a0838360006114a7565b9392505050565b6060814710156114e5576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016113cd565b600080856001600160a01b031684866040516115019190611c5f565b60006040518083038185875af1925050503d806000811461153e576040519150601f19603f3d011682016040523d82523d6000602084013e611543565b606091505b509150915061155386838361155d565b9695505050505050565b6060826115725761156d826115d2565b6114a0565b815115801561158957506001600160a01b0384163b155b156115cb576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016113cd565b50806114a0565b8051156115e25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561162657600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114a057600080fd5b6001600160a01b038116811461078457600080fd5b60008083601f84011261167d57600080fd5b50813567ffffffffffffffff81111561169557600080fd5b6020830191508360208285010111156116ad57600080fd5b9250929050565b6000806000806000608086880312156116cc57600080fd5b85356116d781611656565b945060208601356116e781611656565b935060408601359250606086013567ffffffffffffffff81111561170a57600080fd5b6117168882890161166b565b969995985093965092949392505050565b60006020828403121561173957600080fd5b5035919050565b6000806040838503121561175357600080fd5b82359150602083013561176581611656565b809150509250929050565b6000806000806060858703121561178657600080fd5b843561179181611656565b935060208501359250604085013567ffffffffffffffff8111156117b457600080fd5b6117c08782880161166b565b95989497509550505050565b6000602082840312156117de57600080fd5b81356114a081611656565b60008060008060008060a0878903121561180257600080fd5b863561180d81611656565b9550602087013561181d81611656565b945060408701359350606087013567ffffffffffffffff81111561184057600080fd5b61184c89828a0161166b565b909450925050608087013567ffffffffffffffff81111561186c57600080fd5b87016060818a03121561187e57600080fd5b809150509295509295509295565b6000806000606084860312156118a157600080fd5b83356118ac81611656565b925060208401356118bc81611656565b929592945050506040919091013590565b600080600080600080608087890312156118e657600080fd5b863567ffffffffffffffff8111156118fd57600080fd5b61190989828a0161166b565b909750955050602087013561191d81611656565b935060408701359250606087013567ffffffffffffffff81111561194057600080fd5b61194c89828a0161166b565b979a9699509497509295939492505050565b801515811461078457600080fd5b60006020828403121561197e57600080fd5b81356114a08161195e565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b0385166020820152836040820152608060608201526000611a0a608083018486611989565b979650505050505050565b838152604060208201526000611a2f604083018486611989565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561050f5761050f611a38565b600060208284031215611a8c57600080fd5b81516114a08161195e565b600060208284031215611aa957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008135611aec81611656565b6001600160a01b03168352602082013567ffffffffffffffff8116808214611b1357600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112611b4f57600080fd5b820160208101903567ffffffffffffffff811115611b6c57600080fd5b803603821315611b7b57600080fd5b60606040860152611a2f606086018284611989565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a060608201526000611bc860a083018587611989565b8281036080840152611bda8185611adf565b9998505050505050505050565b848152606060208201526000611c01606083018587611989565b8281036040840152611a0a8185611adf565b8181038181111561050f5761050f611a38565b606081526000611c3a606083018789611989565b8560208401528281036040840152611c53818587611989565b98975050505050505050565b6000825160005b81811015611c805760208186018101518583015201611c66565b50600092019182525091905056fea2646970667358221220444e0c88cfeeab38398e0de5e0726788900fb3cc4b57214ea3327cf8fa0c642c64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"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\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyMethodsNotSupported\",\"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\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x600680546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b179091526100799291906102a816565b600780546001600160a01b03929092166001600160a01b03199283168117909155600880549092161790553480156100b057600080fd5b5060085460065460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556101486000826102c7565b506101737f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826102c7565b5061019e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836102c7565b506101b76000805160206172b1833981519152826102c7565b506101d06000805160206172b1833981519152836102c7565b505050506040516101e090613853565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f080158015610232573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b0392831617905560085460405163ae7a3a6f60e01b815230600482015291169063ae7a3a6f90602401600060405180830381600087803b15801561028b57600080fd5b505af115801561029f573d6000803e3d6000fd5b505050506148d4565b60006102b2613860565b6102bd84848361035a565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166103525760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016102c1565b5060006102c1565b60008061036785846103d6565b90506103cb6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016103b5929190613969565b60408051601f19818403018152919052856103e2565b9150505b9392505050565b60006103cf8383610416565b60c0810151516000901561040c5761040584848460c0015161043760201b60201c565b90506103cf565b61040584846105b0565b6000610422838361067d565b6103cf838360200151846103e260201b60201c565b60008061044261068d565b905060006104508683610727565b9050600061046d8260600151836020015185610b4a60201b60201c565b9050600061047d83838989610cff565b9050600061048a8261197b565b602081015181519192509060030b156104e3578982604001516040516020016104b492919061398d565b60408051601f198184030181529082905262461bcd60e51b82526104da916004016139f3565b60405180910390fd5b600061052c6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611b1260201b60201c565b60405163c6ce059d60e01b81529091506000805160206172918339815191529063c6ce059d906105609084906004016139f3565b602060405180830381865afa15801561057d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a19190613a06565b9b9a5050505050505050505050565b604051638d1cc92560e01b8152600090819060008051602061729183398151915290638d1cc925906105e69087906004016139f3565b600060405180830381865afa158015610603573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261062b9190810190613afb565b9050600061065a8285604051602001610645929190613b2f565b60408051601f19818403018152919052611cb2565b90506001600160a01b0381166102bd5784846040516020016104b4929190613b5e565b61068982826000611cc5565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b815260609160008051602061729183398151915291829063d145736c906106db908490600401613bed565b600060405180830381865afa1580156106f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107209190810190613c22565b9250505090565b6107596040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020617291833981519152905061079e6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6107a785611d9f565b602082015260006107b786611ff4565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108219190810190613c22565b8683856020015160405160200161083b9493929190613c6a565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb119061087a9085906004016139f3565b600060405180830381865afa158015610897573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108bf9190810190613c22565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108ee908490600401613d02565b602060405180830381865afa15801561090b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092f9190613d3b565b61094457816040516020016104b49190613d5d565b6040516309389f5960e31b81526001600160a01b038616906349c4fac890610970908490600401613dd4565b600060405180830381865afa15801561098d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109b59190810190613c22565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f6906109e3908490600401613e1a565b602060405180830381865afa158015610a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a249190613d3b565b15610aa0576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a55908490600401613e1a565b600060405180830381865afa158015610a72573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a9a9190810190613c22565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610ac59190613e5b565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610af1929190613eb6565b600060405180830381865afa158015610b0e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b369190810190613c22565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b66579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610bad57610bad613edb565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610be757610be7613edb565b602002602001018190525084604051602001610c039190613ef1565b60405160208183030381529060405281600281518110610c2557610c25613edb565b602002602001018190525082604051602001610c419190613f26565b60405160208183030381529060405281600381518110610c6357610c63613edb565b60209081029190910101526000610c798261197b565b9050600081602001519050610ce0610cb360405180604001604052806005815260200164173539b7b760d91b81525061217760201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152906121a4565b610cf557856040516020016104b49190613f55565b9695505050505050565b60a08101516040805180820182526000808252602091820152815180830190925282518083529281019101526060906000805160206172918339815191529015610d49565b511590565b610e6557826020015115610dd95760405162461bcd60e51b815260206004820152605860248201526000805160206172d183398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016104da565b8260c0015115610e655760405162461bcd60e51b815260206004820152605360248201526000805160206172d183398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016104da565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e7e5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610ebf90613fea565b935060ff1681518110610ed457610ed4613edb565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610f159190614009565b604051602081830303815290604052828280610f3090613fea565b935060ff1681518110610f4557610f45613edb565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f7b90613fea565b935060ff1681518110610f9057610f90613edb565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610fce90613fea565b935060ff1681518110610fe357610fe3613edb565b60200260200101819052508760200151828280610fff90613fea565b935060ff168151811061101457611014613edb565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061105290613fea565b935060ff168151811061106757611067613edb565b60209081029190910101528751828261107f81613fea565b935060ff168151811061109457611094613edb565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b8152508282806110cd90613fea565b935060ff16815181106110e2576110e2613edb565b60209081029190910101526110f646612205565b828261110181613fea565b935060ff168151811061111657611116613edb565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061115590613fea565b935060ff168151811061116a5761116a613edb565b60200260200101819052508682828061118290613fea565b935060ff168151811061119757611197613edb565b60209081029190910101528551156112a55760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111e881613fea565b935060ff16815181106111fd576111fd613edb565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d906112349089906004016139f3565b600060405180830381865afa158015611251573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112799190810190613c22565b828261128481613fea565b935060ff168151811061129957611299613edb565b60200260200101819052505b846020015115611352576040805180820190915260128152712d2d766572696679536f75726365436f646560701b602082015282826112e381613fea565b935060ff16815181106112f8576112f8613edb565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b81525082828061132d90613fea565b935060ff168151811061134257611342613edb565b60200260200101819052506114b9565b611368610d448660a0015161217760201b60201c565b6113eb5760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261139b81613fea565b935060ff16815181106113b0576113b0613edb565b60200260200101819052508460a001516040516020016113d09190613ef1565b60405160208183030381529060405282828061132d90613fea565b8460c00151158015611410575061140e610d44896040015161217760201b60201c565b155b156114b95760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261144481613fea565b935060ff168151811061145957611459613edb565b602090810291909101015261146d88612297565b60405160200161147d9190613ef1565b60405160208183030381529060405282828061149890613fea565b935060ff16815181106114ad576114ad613edb565b60200260200101819052505b6114cf610d44866040015161217760201b60201c565b6115525760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b6020820152828261150081613fea565b935060ff168151811061151557611515613edb565b6020026020010181905250846040015182828061153190613fea565b935060ff168151811061154657611546613edb565b60200260200101819052505b606085015115611643576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261158481613fea565b935060ff168151811061159957611599613edb565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116179190810190613c22565b828261162281613fea565b935060ff168151811061163757611637613edb565b60200260200101819052505b60e085015151156116d55760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261167a81613fea565b935060ff168151811061168f5761168f613edb565b602090810291909101015260e0850151516116a990612205565b82826116b481613fea565b935060ff16815181106116c9576116c9613edb565b60200260200101819052505b60e085015160200151156117725760408051808201909152600a8152692d2d676173507269636560b01b6020820152828261170f81613fea565b935060ff168151811061172457611724613edb565b60200260200101819052506117468560e001516020015161220560201b60201c565b828261175181613fea565b935060ff168151811061176657611766613edb565b60200260200101819052505b60e085015160400151156118135760408051808201909152600e81526d2d2d6d617846656550657247617360901b602082015282826117b081613fea565b935060ff16815181106117c5576117c5613edb565b60200260200101819052506117e78560e001516040015161220560201b60201c565b82826117f281613fea565b935060ff168151811061180757611807613edb565b60200260200101819052505b60e085015160600151156118c35760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261186081613fea565b935060ff168151811061187557611875613edb565b60200260200101819052506118978560e001516060015161220560201b60201c565b82826118a281613fea565b935060ff16815181106118b7576118b7613edb565b60200260200101819052505b60008160ff166001600160401b038111156118e0576118e0613a2f565b60405190808252806020026020018201604052801561191357816020015b60608152602001906001900390816118fe5790505b50905060005b8260ff168160ff16101561196c57838160ff168151811061193c5761193c613edb565b6020026020010151828260ff168151811061195957611959613edb565b6020908102919091010152600101611919565b5093505050505b949350505050565b6119a26040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b815260008051602061729183398151915292600091849163d145736c916119f091869101614060565b600060405180830381865afa158015611a0d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a359190810190613c22565b90506000611a43868361294d565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a7391906140a7565b6000604051808303816000875af1158015611a92573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611aba919081019061410c565b805190915060030b15801590611ad35750602081015151155b8015611ae25750604081015151155b15610cf55781600081518110611afa57611afa613edb565b60200260200101516040516020016104b491906141bf565b60606000611b478560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b7e9082905b90612a87565b15611c7b576000611bfb82611bf581611bef611bc18a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612aae565b90612b0b565b9050611c2f611c28604051806040016040528060018152602001600560f91b81525061217760201b60201c565b8290612a87565b15611c6957611c66611c5f604051806040016040528060018152602001600560f91b81525061217760201b60201c565b8290612b90565b90505b611c7281612bb6565b925050506103cf565b8215611c945784846040516020016104b492919061438f565b50506040805160208101909152600081526103cf565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611cd457505050565b6000611ce1848484612c1b565b90506000611cee8261197b565b602081015181519192509060030b158015611d615750611d61611d35604051806040016040528060078152602001665355434345535360c81b81525061217760201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b78565b15611d6e57505050505050565b60408201515115611d8e5781604001516040516020016104b4919061440a565b806040516020016104b49190614454565b60606000611dd48360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611e0b611e04604051806040016040528060048152602001630b9cdbdb60e21b81525061217760201b60201c565b82906121a4565b15611e4d576103cf611e48611e41604051806040016040528060048152602001630b9cdbdb60e21b81525061217760201b60201c565b839061312e565b612bb6565b611e7f611e78604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b82906131b8565b600103611ee757611eb1611c5f604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b506103cf611e48611ee0604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b8390612b90565b611f16611e0460405180604001604052806005815260200164173539b7b760d91b81525061217760201b60201c565b15611fe3576000611f4e82611f49604051806040016040528060018152602001602f60f81b81525061217760201b60201c565b61324d565b905060008160018351611f6191906144a4565b81518110611f7157611f71613edb565b60200260200101519050611fda611e48611fad60405180604001604052806005815260200164173539b7b760d91b81525061217760201b60201c565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061312e565b95945050505050565b826040516020016104b491906144b7565b606060006120298360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612059611e04604051806040016040528060048152602001630b9cdbdb60e21b81525061217760201b60201c565b15612067576103cf81612bb6565b612092611e78604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b6001036120c7576103cf611e48611ee0604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b6120f6611e0460405180604001604052806005815260200164173539b7b760d91b81525061217760201b60201c565b15611fe357600061212982611f49604051806040016040528060018152602001602f60f81b81525061217760201b60201c565b905060018151111561216557806002825161214491906144a4565b8151811061215457612154613edb565b602002602001015192505050919050565b50826040516020016104b491906144b7565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121b9575060006102c1565b815183516020850151600092916121cf91614571565b6121d991906144a4565b9050826020015181036121f05760019150506102c1565b82516020840151819020912014905092915050565b60606000612212836132f1565b60010190506000816001600160401b0381111561223157612231613a2f565b6040519080825280601f01601f19166020018201604052801561225b576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461226557509392505050565b606060006122ae836040015161217760201b60201c565b90506122eb6122e46040518060400160405280600a8152602001691553931250d15394d15160b21b81525061217760201b60201c565b82906133d3565b156123125750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b6123456122e460405180604001604052806009815260200168556e6c6963656e736560b81b81525061217760201b60201c565b15612371575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b61239e6122e46040518060400160405280600381526020016213525560ea1b81525061217760201b60201c565b156123c457505060408051808201909152600381526213525560ea1b6020820152919050565b6123fa6122e46040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061217760201b60201c565b8061243a575061243a6122e46040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061217760201b60201c565b1561246657505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b61249c6122e46040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061217760201b60201c565b806124dc57506124dc6122e46040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061217760201b60201c565b15612508575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b61253f6122e46040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061217760201b60201c565b8061258057506125806122e4604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061217760201b60201c565b156125af57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125e66122e46040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061217760201b60201c565b8061262757506126276122e4604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061217760201b60201c565b1561265457505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b61268a6122e46040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061217760201b60201c565b156126b957505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126ef6122e46040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061217760201b60201c565b1561271e57505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61274f6122e46040518060400160405280600781526020016604d504c2d322e360cc1b81525061217760201b60201c565b1561277957505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b6127aa6122e46040518060400160405280600781526020016604f534c2d332e360cc1b81525061217760201b60201c565b156127d457505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6128086122e46040518060400160405280600a81526020016904170616368652d322e360b41b81525061217760201b60201c565b1561283557505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b61286c6122e46040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061217760201b60201c565b806128ad57506128ad6122e46040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061217760201b60201c565b156128da57505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b61290c6122e4604051806040016040528060088152602001674255534c2d312e3160c01b81525061217760201b60201c565b1561293657505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b604080840151845191516104b49290602001614584565b60608060005b84518110156129d8578185828151811061296f5761296f613edb565b6020026020010151604051602001612988929190613b2f565b6040516020818303038152906040529150600185516129a791906144a4565b81146129d057816040516020016129be91906146d4565b60405160208183030381529060405291505b600101612953565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129f15790505090508381600081518110612a1c57612a1c613edb565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a5557612a55613edb565b60200260200101819052508181600281518110612a7457612a74613edb565b6020908102919091010152949350505050565b6020808301518351835192840151600093612aa592918491906133e7565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612adb93906134f8565b9050836020015181612aed91906144a4565b84518590612afc9083906144a4565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612b305750816102c1565b6020808301519084015160019114612b575750815160208481015190840151829020919020145b8015612b8857825184518590612b6e9083906144a4565b9052508251602085018051612b84908390614571565b9052505b509192915050565b6040805180820190915260008082526020820152612baf838383613618565b5092915050565b6060600082600001516001600160401b03811115612bd657612bd6613a2f565b6040519080825280601f01601f191660200182016040528015612c00576020820181803683370190505b50602084810151855192935090830191612baf9183916136be565b60606000612c2761068d565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612c445790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c8590613fea565b935060ff1681518110612c9a57612c9a613edb565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612cd591906146f9565b604051602081830303815290604052828280612cf090613fea565b935060ff1681518110612d0557612d05613edb565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612d3d90613fea565b935060ff1681518110612d5257612d52613edb565b602002602001018190525082604051602001612d6e9190613f26565b604051602081830303815290604052828280612d8990613fea565b935060ff1681518110612d9e57612d9e613edb565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612dd890613fea565b935060ff1681518110612ded57612ded613edb565b6020908102919091010152612e028784613738565b8282612e0d81613fea565b935060ff1681518110612e2257612e22613edb565b602090810291909101015285515115612eba5760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e6281613fea565b935060ff1681518110612e7757612e77613edb565b60209081029190910101528551612e8e9084613738565b8282612e9981613fea565b935060ff1681518110612eae57612eae613edb565b60200260200101819052505b856080015115612f285760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612f0381613fea565b935060ff1681518110612f1857612f18613edb565b6020026020010181905250612f83565b8415612f83576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f6281613fea565b935060ff1681518110612f7757612f77613edb565b60200260200101819052505b6040860151511561300f5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612fbd81613fea565b935060ff1681518110612fd257612fd2613edb565b60200260200101819052508560400151828280612fee90613fea565b935060ff168151811061300357613003613edb565b60200260200101819052505b8560600151156130795760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261305881613fea565b935060ff168151811061306d5761306d613edb565b60200260200101819052505b60008160ff166001600160401b0381111561309657613096613a2f565b6040519080825280602002602001820160405280156130c957816020015b60608152602001906001900390816130b45790505b50905060005b8260ff168160ff16101561312257838160ff16815181106130f2576130f2613edb565b6020026020010151828260ff168151811061310f5761310f613edb565b60209081029190910101526001016130cf565b50979650505050505050565b60408051808201909152600080825260208201528151835110156131535750816102c1565b8151835160208501516000929161316991614571565b61317391906144a4565b60208401519091506001908214613194575082516020840151819020908220145b80156131af578351855186906131ab9083906144a4565b9052505b50929392505050565b8051825160208085015190840151600093849390926131d89284906134f8565b6131e29190614571565b90505b835160208501516131f69190614571565b8111612baf57816132068161473e565b925050826000015161323c85602001518361322191906144a4565b865161322d91906144a4565b855160208701518591906134f8565b6132469190614571565b90506131e5565b6060600061325b84846131b8565b613266906001614571565b6001600160401b0381111561327d5761327d613a2f565b6040519080825280602002602001820160405280156132b057816020015b606081526020019060019003908161329b5790505b50905060005b8151811015611caa576132cc611e488686612b90565b8282815181106132de576132de613edb565b60209081029190910101526001016132b6565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061333a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613366576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061338457662386f26fc10000830492506010015b6305f5e100831061339c576305f5e100830492506008015b61271083106133b057612710830492506004015b606483106133c2576064830492506002015b600a83106102c15760010192915050565b60006133df8383613778565b159392505050565b6000808584116134ee576020841161349a576000841561343257600161340e8660206144a4565b613419906008614757565b613424906002614855565b61342e91906144a4565b1990505b83518116856134418989614571565b61344b91906144a4565b805190935082165b8181146134855787841161346d5787945050505050611973565b8361347781614861565b945050828451169050613453565b61348f8785614571565b945050505050611973565b8383206134a785886144a4565b6134b19087614571565b91505b8582106134ec578482208082036134d9576134cf8684614571565b9350505050611973565b6134e46001846144a4565b9250506134b4565b505b5092949350505050565b6000838186851161360357602085116135b257600085156135445760016135208760206144a4565b61352b906008614757565b613536906002614855565b61354091906144a4565b1990505b845181166000876135558b8b614571565b61355f91906144a4565b855190915083165b8281146135a45781861061358c5761357f8b8b614571565b9650505050505050611973565b856135968161473e565b965050838651169050613567565b859650505050505050611973565b508383206000905b6135c486896144a4565b8211613601578583208082036135e05783945050505050611973565b6135eb600185614571565b93505081806135f99061473e565b9250506135ba565b505b61360d8787614571565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161364593906134f8565b60208087018051918601919091525190915061366190826144a4565b8352845160208601516136749190614571565b810361368357600085526136b5565b835183516136919190614571565b855186906136a09083906144a4565b90525083516136af9082614571565b60208601525b50909392505050565b602081106136f657815183526136d5602084614571565b92506136e2602083614571565b91506136ef6020826144a4565b90506136be565b600019811561372557600161370c8360206144a4565b61371890610100614855565b61372291906144a4565b90505b9151835183169219169190911790915250565b606060006137468484610727565b805160208083015160405193945061376093909101614878565b60405160208183030381529060405291505092915050565b815181516000919081111561378b575081515b6020808501519084015160005b8381101561384457825182518082146138145760001960208710156137f3576001846137c58960206144a4565b6137cf9190614571565b6137da906008614757565b6137e5906002614855565b6137ef91906144a4565b1990505b81811683821681810391146138115797506102c19650505050505050565b50505b61381f602086614571565b945061382c602085614571565b9350505060208161383d9190614571565b9050613798565b5084518651610cf591906148b4565b610c9f806165f283390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016138a36138a8565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016138a36040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b8381101561393457818101518382015260200161391c565b50506000910152565b60008151808452613955816020860160208601613919565b601f01601f19169290920160200192915050565b6001600160a01b03831681526040602082018190526000906119739083018461393d565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516139c581601a850160208801613919565b6101d160f51b601a9184019182015283516139e781601c840160208801613919565b01601c01949350505050565b6020815260006103cf602083018461393d565b600060208284031215613a1857600080fd5b81516001600160a01b03811681146103cf57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a6757613a67613a2f565b60405290565b6000806001600160401b03841115613a8757613a87613a2f565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613ab557613ab5613a2f565b604052838152905080828401851015613acd57600080fd5b611caa846020830185613919565b600082601f830112613aec57600080fd5b6103cf83835160208501613a6d565b600060208284031215613b0d57600080fd5b81516001600160401b03811115613b2357600080fd5b6102bd84828501613adb565b60008351613b41818460208801613919565b835190830190613b55818360208801613919565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b9681601a850160208801613919565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613bd3816033840160208801613919565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b60608201526080602082015260006103cf608083018461393d565b600060208284031215613c3457600080fd5b81516001600160401b03811115613c4a57600080fd5b8201601f81018413613c5b57600080fd5b6102bd84825160208401613a6d565b60008551613c7c818460208a01613919565b602f60f81b9083019081528551613c9a816001840160208a01613919565b602f60f81b600192909101918201528451613cbc816002840160208901613919565b600181830101915050602f60f81b60018201528351613ce2816002840160208801613919565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613d15604083018461393d565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d4d57600080fd5b815180151581146103cf57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d9581601f850160208701613919565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613de7604083018461393d565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613e2d604083018461393d565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e93816014850160208701613919565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613ec9604083018561393d565b82810360208401526103cb818561393d565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613f0e816001850160208701613919565b601160f91b6001939091019283015250600201919050565b60008251613f38818460208701613919565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613fc781604b850160208701613919565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff810361400057614000613fd4565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b602082015260008251614053816029850160208701613919565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006103cf608083018461393d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561410057603f198786030184526140eb85835161393d565b945060209384019391909101906001016140cf565b50929695505050505050565b60006020828403121561411e57600080fd5b81516001600160401b0381111561413457600080fd5b82016060818503121561414657600080fd5b61414e613a45565b81518060030b811461415f57600080fd5b815260208201516001600160401b0381111561417a57600080fd5b61418686828501613adb565b60208301525060408201516001600160401b038111156141a557600080fd5b6141b186828501613adb565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b602082015260008251614201816021850160208701613919565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b6020820152600083516143d1816021850160208801613919565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143fe81602e840160208801613919565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b602082015260008251614053816029850160208701613919565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b602082015260008251614497816022850160208701613919565b9190910160220192915050565b818103818111156102c1576102c1613fd4565b6d021b7b73a3930b1ba103730b6b2960951b8152600082516144e081600e850160208701613919565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b808201808211156102c1576102c1613fd4565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145bc816018850160208801613919565b6301034b7160e51b60189184019182015283516145e081601c840160208801613919565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146e6818460208701613919565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161473181601c850160208701613919565b91909101601c0192915050565b60006001820161475057614750613fd4565b5060010190565b80820281158282048414176102c1576102c1613fd4565b6001815b60018411156147a95780850481111561478d5761478d613fd4565b600184161561479b57908102905b60019390931c928002614772565b935093915050565b6000826147c0575060016102c1565b816147cd575060006102c1565b81600181146147e357600281146147ed57614809565b60019150506102c1565b60ff8411156147fe576147fe613fd4565b50506001821b6102c1565b5060208310610133831016604e8410600b841016171561482c575081810a6102c1565b614839600019848461476e565b806000190482111561484d5761484d613fd4565b029392505050565b60006103cf83836147b1565b60008161487057614870613fd4565b506000190190565b6000835161488a818460208801613919565b601d60f91b90830190815283516148a8816001840160208801613919565b01600101949350505050565b8181036000831280158383131683831282161715612baf57612baf613fd4565b608051611ce0614912600039600081816101eb015281816105b00152818161060501528181610822015281816108770152610ac30152611ce06000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80636133b4bb116100f9578063a217fddf11610097578063d9caed1211610071578063d9caed121461041c578063e609055e1461042f578063e63ab1e914610442578063eab103df1461046957600080fd5b8063a217fddf146103de578063d547741f146103e6578063d936547e146103f957600080fd5b806385f438c1116100d357806385f438c11461035857806391d148541461037f5780639a590427146103b85780639b19251a146103cb57600080fd5b80636133b4bb1461032a57806381100bf01461033d5780638456cb591461035057600080fd5b806336568abe11610166578063570618e111610140578063570618e1146102d25780635b112591146102f95780635c975abb1461030c5780635eb72e151461031757600080fd5b806336568abe146102a45780633c2f05a8146102b75780633f4ba83a146102ca57600080fd5b8063248a9ca311610197578063248a9ca31461023a578063252f07bf1461026c5780632f2ff15d1461029157600080fd5b806301ffc9a7146101be578063116191b6146101e657806321fc65f214610225575b600080fd5b6101d16101cc366004611614565b61047c565b60405190151581526020015b60405180910390f35b61020d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101dd565b6102386102333660046116b4565b610515565b005b61025e610248366004611727565b6000908152600160208190526040909120015490565b6040519081526020016101dd565b6004546101d19074010000000000000000000000000000000000000000900460ff1681565b61023861029f366004611740565b6106d5565b6102386102b2366004611740565b610701565b60055461020d906001600160a01b031681565b610238610752565b61025e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60045461020d906001600160a01b031681565b60025460ff166101d1565b610238610325366004611770565b610787565b610238610338366004611813565b61094c565b60065461020d906001600160a01b031681565b610238610b44565b61025e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101d161038d366004611740565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6102386103c636600461186f565b610b76565b6102386103d936600461186f565b610c2a565b61025e600081565b6102386103f4366004611740565b610ce1565b6101d161040736600461186f565b60036020526000908152604090205460ff1681565b61023861042a36600461188c565b610d07565b61023861043d3660046118cd565b610dff565b61025e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023861047736600461196c565b61102b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061050f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61051d611081565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610547816110c4565b61054f6110ce565b6001600160a01b03851660009081526003602052604090205460ff166105a1576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105d56001600160a01b0386167f00000000000000000000000000000000000000000000000000000000000000008661110d565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106429088908a908990899089906004016119d2565b600060405180830381600087803b15801561065c57600080fd5b505af1158015610670573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d58686866040516106bb93929190611a15565b60405180910390a3506106ce6001600055565b5050505050565b600082815260016020819052604090912001546106f1816110c4565b6106fb8383611181565b50505050565b6001600160a01b0381163314610743576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074d8282611214565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077c816110c4565b61078461129b565b50565b61078f611081565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107b9816110c4565b6107c16110ce565b6001600160a01b03861660009081526003602052604090205460ff16610813576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108476001600160a01b0387167f00000000000000000000000000000000000000000000000000000000000000008761110d565b6040517f36c99f3b0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b906108b69089908b908a908a908a908a90600401611b05565b600060405180830381600087803b1580156108d057600080fd5b505af11580156108e4573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37878787876040516109319493929190611b5c565b60405180910390a3506109446001600055565b505050505050565b600580546001600160a01b0316906340c10f1990309061096d908790611bb7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156109cb57600080fd5b505af11580156109df573d6000803e3d6000fd5b5050600580546008546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481019390935216925063a9059cbb91506044016020604051808303816000875af1158015610a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a769190611bca565b50600554610a90906001600160a01b031685858585610515565b6005546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152909116906370a0823190602401602060405180830381865afa158015610b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b379190611be7565b156106fb576106fb611c00565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b6e816110c4565b6107846112ed565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610ba0816110c4565b6001600160a01b038216610be0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610c54816110c4565b6001600160a01b038216610c94576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610cfd816110c4565b6106fb8383611214565b610d0f611081565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d39816110c4565b610d416110ce565b6001600160a01b03831660009081526003602052604090205460ff16610d93576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610da76001600160a01b038416858461110d565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610dec91815260200190565b60405180910390a35061074d6001600055565b610e07611081565b610e0f6110ce565b60045474010000000000000000000000000000000000000000900460ff16610e63576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610eb5576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f399190611be7565b9050610f506001600160a01b03861633308761132a565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610fd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffb9190611be7565b6110059190611c2f565b8787604051611018959493929190611c42565b60405180910390a2506109446001600055565b6000611036816110c4565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6002600054036110bd576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107848133611363565b60025460ff161561110b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261074d91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506113da565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661120c5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a450600161050f565b50600061050f565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff161561120c5760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161050f565b6112a3611456565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6112f56110ce565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112d03390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106fb9186918216906323b872dd9060840161113a565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff166113d6576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b60006113ef6001600160a01b03841683611492565b905080516000141580156114145750808060200190518101906114129190611bca565b155b1561074d576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016113cd565b60025460ff1661110b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606114a0838360006114a7565b9392505050565b6060814710156114e5576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016113cd565b600080856001600160a01b031684866040516115019190611c7b565b60006040518083038185875af1925050503d806000811461153e576040519150601f19603f3d011682016040523d82523d6000602084013e611543565b606091505b509150915061155386838361155d565b9695505050505050565b6060826115725761156d826115d2565b6114a0565b815115801561158957506001600160a01b0384163b155b156115cb576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016113cd565b50806114a0565b8051156115e25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561162657600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114a057600080fd5b6001600160a01b038116811461078457600080fd5b60008083601f84011261167d57600080fd5b50813567ffffffffffffffff81111561169557600080fd5b6020830191508360208285010111156116ad57600080fd5b9250929050565b6000806000806000608086880312156116cc57600080fd5b85356116d781611656565b945060208601356116e781611656565b935060408601359250606086013567ffffffffffffffff81111561170a57600080fd5b6117168882890161166b565b969995985093965092949392505050565b60006020828403121561173957600080fd5b5035919050565b6000806040838503121561175357600080fd5b82359150602083013561176581611656565b809150509250929050565b60008060008060008060a0878903121561178957600080fd5b863561179481611656565b955060208701356117a481611656565b945060408701359350606087013567ffffffffffffffff8111156117c757600080fd5b6117d389828a0161166b565b909450925050608087013567ffffffffffffffff8111156117f357600080fd5b87016080818a03121561180557600080fd5b809150509295509295509295565b6000806000806060858703121561182957600080fd5b843561183481611656565b935060208501359250604085013567ffffffffffffffff81111561185757600080fd5b6118638782880161166b565b95989497509550505050565b60006020828403121561188157600080fd5b81356114a081611656565b6000806000606084860312156118a157600080fd5b83356118ac81611656565b925060208401356118bc81611656565b929592945050506040919091013590565b600080600080600080608087890312156118e657600080fd5b863567ffffffffffffffff8111156118fd57600080fd5b61190989828a0161166b565b909750955050602087013561191d81611656565b935060408701359250606087013567ffffffffffffffff81111561194057600080fd5b61194c89828a0161166b565b979a9699509497509295939492505050565b801515811461078457600080fd5b60006020828403121561197e57600080fd5b81356114a08161195e565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b0385166020820152836040820152608060608201526000611a0a608083018486611989565b979650505050505050565b838152604060208201526000611a2f604083018486611989565b95945050505050565b60008135611a4581611656565b6001600160a01b031683526020820135611a5e81611656565b6001600160a01b03166020840152604082013567ffffffffffffffff8116808214611a8857600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112611ac457600080fd5b820160208101903567ffffffffffffffff811115611ae157600080fd5b803603821315611af057600080fd5b60806060860152611a2f608086018284611989565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a060608201526000611b3d60a083018587611989565b8281036080840152611b4f8185611a38565b9998505050505050505050565b848152606060208201526000611b76606083018587611989565b8281036040840152611a0a8185611a38565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561050f5761050f611b88565b600060208284031215611bdc57600080fd5b81516114a08161195e565b600060208284031215611bf957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8181038181111561050f5761050f611b88565b606081526000611c56606083018789611989565b8560208401528281036040840152611c6f818587611989565b98975050505050505050565b6000825160005b81811015611c9c5760208186018101518583015201611c82565b50600092019182525091905056fea26469706673582212209d34a8c5f65cc74a132ad5946b9b8ffcf7decebf24e60566b9b465631f332f9b64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420", } // ERC20CustodyEchidnaTestABI is the input ABI used to generate the binding from. @@ -895,23 +896,23 @@ func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactorSession) Withdr return _ERC20CustodyEchidnaTest.Contract.WithdrawAndCall(&_ERC20CustodyEchidnaTest.TransactOpts, to, token, amount, data) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xc709ab6e. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x5eb72e15. // -// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) returns() func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactor) WithdrawAndRevert(opts *bind.TransactOpts, to common.Address, token common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _ERC20CustodyEchidnaTest.contract.Transact(opts, "withdrawAndRevert", to, token, amount, data, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xc709ab6e. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x5eb72e15. // -// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) returns() func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestSession) WithdrawAndRevert(to common.Address, token common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _ERC20CustodyEchidnaTest.Contract.WithdrawAndRevert(&_ERC20CustodyEchidnaTest.TransactOpts, to, token, amount, data, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xc709ab6e. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x5eb72e15. // -// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, address token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) returns() func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestTransactorSession) WithdrawAndRevert(to common.Address, token common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _ERC20CustodyEchidnaTest.Contract.WithdrawAndRevert(&_ERC20CustodyEchidnaTest.TransactOpts, to, token, amount, data, revertContext) } @@ -2491,9 +2492,9 @@ type ERC20CustodyEchidnaTestWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*ERC20CustodyEchidnaTestWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -2512,9 +2513,9 @@ func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) FilterWithdrawn return &ERC20CustodyEchidnaTestWithdrawnAndRevertedIterator{contract: _ERC20CustodyEchidnaTest.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *ERC20CustodyEchidnaTestWithdrawnAndReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2558,9 +2559,9 @@ func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) WatchWithdrawnA }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ERC20CustodyEchidnaTest *ERC20CustodyEchidnaTestFilterer) ParseWithdrawnAndReverted(log types.Log) (*ERC20CustodyEchidnaTestWithdrawnAndReverted, error) { event := new(ERC20CustodyEchidnaTestWithdrawnAndReverted) if err := _ERC20CustodyEchidnaTest.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { diff --git a/v2/pkg/gatewayevm.sol/gatewayevm.go b/v2/pkg/gatewayevm.sol/gatewayevm.go index a45dc000..d22efb2a 100644 --- a/v2/pkg/gatewayevm.sol/gatewayevm.go +++ b/v2/pkg/gatewayevm.sol/gatewayevm.go @@ -36,6 +36,7 @@ type MessageContext struct { // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -52,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\":\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"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: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516138406100fd600039600081816121c3015281816121ec015261265a01526138406000f3fe6080604052600436106101fe5760003560e01c80635c975abb1161011d578063ad3cb1cc116100b0578063d0b492c31161007f578063dda79b7511610064578063dda79b751461067c578063e63ab1e91461069c578063f7ad60db146106d057600080fd5b8063d0b492c31461063c578063d547741f1461065c57600080fd5b8063ad3cb1cc14610593578063ae7a3a6f146105dc578063c0c53b8b146105fc578063d09e3b781461061c57600080fd5b80638456cb59116100ec5780638456cb59146104d057806391d14854146104e5578063a217fddf1461054a578063a783c7891461055f57600080fd5b80635c975abb1461043f5780635d62c86014610476578063726ac97c146104aa578063744b9b8b146104bd57600080fd5b806336568abe116101955780635131ab59116101645780635131ab59146103ca57806352d1902d146103ea57806357bec62f146103ff5780635b1125911461041f57600080fd5b806336568abe1461036f57806338e225271461038f5780633f4ba83a146103a25780634f1ef286146103b757600080fd5b80631cff79cd116101d15780631cff79cd1461029a57806321e093b1146102ba578063248a9ca3146102f25780632f2ff15d1461034f57600080fd5b806301ffc9a71461020357806310188aef14610238578063102614b01461025a5780631becceb41461027a575b600080fd5b34801561020f57600080fd5b5061022361021e366004612dc6565b6106e3565b60405190151581526020015b60405180910390f35b34801561024457600080fd5b50610258610253366004612e24565b61077c565b005b34801561026657600080fd5b50610258610275366004612e57565b610857565b34801561028657600080fd5b50610258610295366004612f08565b610951565b6102ad6102a8366004612f6f565b6109cf565b60405161022f9190613012565b3480156102c657600080fd5b506003546102da906001600160a01b031681565b6040516001600160a01b03909116815260200161022f565b3480156102fe57600080fd5b5061034161030d366004613025565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161022f565b34801561035b57600080fd5b5061025861036a36600461303e565b610a87565b34801561037b57600080fd5b5061025861038a36600461303e565b610acb565b6102ad61039d36600461306a565b610b1c565b3480156103ae57600080fd5b50610258610c08565b6102586103c536600461315b565b610c3d565b3480156103d657600080fd5b506102586103e53660046131ec565b610c5c565b3480156103f657600080fd5b50610341610f5c565b34801561040b57600080fd5b506002546102da906001600160a01b031681565b34801561042b57600080fd5b506001546102da906001600160a01b031681565b34801561044b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610223565b34801561048257600080fd5b506103417f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6102586104b836600461325b565b610f8b565b6102586104cb366004612f08565b611103565b3480156104dc57600080fd5b5061025861127f565b3480156104f157600080fd5b5061022361050036600461303e565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561055657600080fd5b50610341600081565b34801561056b57600080fd5b506103417f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561059f57600080fd5b506102ad6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105e857600080fd5b506102586105f7366004612e24565b6112b1565b34801561060857600080fd5b506102586106173660046132a9565b61138c565b34801561062857600080fd5b506102586106373660046132ec565b611628565b34801561064857600080fd5b50610258610657366004613396565b611720565b34801561066857600080fd5b5061025861067736600461303e565b6118c9565b34801561068857600080fd5b506000546102da906001600160a01b031681565b3480156106a857600080fd5b506103417f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102586106de366004613421565b61190d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061077657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061078781611af5565b6001600160a01b0382166107ae5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b0316156107f1576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61081b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611aff565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61085f611bec565b610867611c4a565b826000036108a1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166108c85760405163d92e233d60e01b815260040160405180910390fd5b6108d3338385611ccb565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c85858560405161091a939291906135ae565b60405180910390a361094b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b610959611bec565b610961611c4a565b6001600160a01b0384166109885760405163d92e233d60e01b815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97485858560405161091a939291906135e4565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109fb81611af5565b610a03611bec565b6001600160a01b038516610a2a5760405163d92e233d60e01b815260040160405180910390fd5b6000610a37868686611f2e565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610a769392919061360a565b60405180910390a295945050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610ac181611af5565b61094b8383611aff565b6001600160a01b0381163314610b0d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b178282611fe1565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b4881611af5565b610b50611bec565b610b58611c4a565b6001600160a01b038516610b7f5760405163d92e233d60e01b815260040160405180910390fd5b6060610b8d878787876120a5565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610bcc9392919061360a565b60405180910390a29150610bff60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c3281611af5565b610c3a612128565b50565b610c456121b8565b610c4e82612288565b610c588282612293565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610c8681611af5565b610c8e611bec565b610c96611c4a565b83600003610cd0576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610cf75760405163d92e233d60e01b815260040160405180910390fd5b610d018686612399565b610d37576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc39190613624565b610df9576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e04858484611f2e565b50610e0f8686612399565b610e45576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610ea5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec99190613641565b90508015610edb57610edb8782612429565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382878787604051610f229392919061360a565b60405180910390a350610f5460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000610f6661264f565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610f93611bec565b610f9b611c4a565b34600003610fd5576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610ffc5760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611049576040519150601f19603f3d011682016040523d82523d6000602084013e61104e565b606091505b5050905080611089576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c346000866040516110d1939291906135ae565b60405180910390a350610c5860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61110b611bec565b611113611c4a565b3460000361114d576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166111745760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146111c1576040519150601f19603f3d011682016040523d82523d6000602084013e6111c6565b606091505b5050905080611201576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600088888860405161124d95949392919061365a565b60405180910390a35061094b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6112a981611af5565b610c3a6126b1565b60006112bc81611af5565b6001600160a01b0382166112e35760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b031615611326576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113507f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611aff565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113d75750825b905060008267ffffffffffffffff1660011480156113f45750303b155b905081158015611402575080155b15611439576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561149a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806114b757506001600160a01b038716155b156114d55760405163d92e233d60e01b815260040160405180910390fd5b6114dd61272a565b6114e5612732565b6114ed61272a565b6114f5612742565b611500600087611aff565b5061152b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611aff565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556115897f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611aff565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038916179055831561161e5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b611630611bec565b611638611c4a565b84600003611672576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166116995760405163d92e233d60e01b815260040160405180910390fd5b6116a4338587611ccb565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c87878787876040516116ef95949392919061365a565b60405180910390a3610f5460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961174a81611af5565b611752611bec565b61175a611c4a565b84600003611794576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166117bb5760405163d92e233d60e01b815260040160405180910390fd5b6117cf6001600160a01b0388168787612752565b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de0906118149085906004016136fb565b600060405180830381600087803b15801561182e57600080fd5b505af1158015611842573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b14368787878760405161188f949392919061370e565b60405180910390a36118c060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461190381611af5565b61094b8383611fe1565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61193781611af5565b61193f611bec565b611947611c4a565b6001600160a01b03851661196e5760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d80600081146119bb576040519150601f19603f3d011682016040523d82523d6000602084013e6119c0565b606091505b50509050806119fb576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de090611a409086906004016136fb565b600060405180830381600087803b158015611a5a57600080fd5b505af1158015611a6e573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143634888888604051611abc949392919061370e565b60405180910390a350611aee60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610c3a81336127c6565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611be2576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611b983390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610776565b6000915050610776565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c48576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cc5576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611e2f57611cf66001600160a01b038316843084612853565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d869190613624565b611dbc576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611e1b57600080fd5b505af11580156118c0573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015611e92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb69190613624565b611eec576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610b17906001600160a01b038481169186911684612853565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060611f3a838361288c565b600080856001600160a01b0316348686604051611f58929190613745565b60006040518083038185875af1925050503d8060008114611f95576040519150601f19603f3d011682016040523d82523d6000602084013e611f9a565b606091505b509150915081611fd6576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611be2576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610776565b6060836001600160a01b031663676cc054348786866040518563ffffffff1660e01b81526004016120d893929190613755565b60006040518083038185885af11580156120f6573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261211f9190810190613780565b95945050505050565b612130612911565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061225157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166122457f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c48576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c5881611af5565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156122ed575060408051601f3d908101601f191682019092526122ea91810190613641565b60015b612333576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461238f576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161232a565b610b17838361296c565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612405573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fda9190613624565b6003546001600160a01b0390811690831603612578576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156124ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cf9190613624565b612505576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561256457600080fd5b505af1158015610f54573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156125db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ff9190613624565b612635576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610c58906001600160a01b03848116911683612752565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c48576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126b9611bec565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361219a565b611c486129c2565b61273a6129c2565b611c48612a29565b61274a6129c2565b611c48612a31565b6040516001600160a01b03838116602483015260448201839052610b1791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612a82565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610c58576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161232a565b6040516001600160a01b03848116602483015283811660448301526064820183905261094b9186918216906323b872dd9060840161277f565b60048110610c585781357f98933fac000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610b17576040517fed69977500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c48576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61297582612afe565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156129ba57610b178282612ba6565b610c58612c13565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c48576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f086129c2565b612a396129c2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6000612a976001600160a01b03841683612c4b565b90508051600014158015612abc575080806020019051810190612aba9190613624565b155b15610b17576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161232a565b806001600160a01b03163b600003612b4d576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161232a565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612bc391906137ee565b600060405180830381855af49150503d8060008114612bfe576040519150601f19603f3d011682016040523d82523d6000602084013e612c03565b606091505b509150915061211f858383612c59565b3415611c48576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611fda83836000612cce565b606082612c6e57612c6982612d84565b611fda565b8151158015612c8557506001600160a01b0384163b155b15612cc7576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161232a565b5080611fda565b606081471015612d0c576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161232a565b600080856001600160a01b03168486604051612d2891906137ee565b60006040518083038185875af1925050503d8060008114612d65576040519150601f19603f3d011682016040523d82523d6000602084013e612d6a565b606091505b5091509150612d7a868383612c59565b9695505050505050565b805115612d945780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612dd857600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611fda57600080fd5b80356001600160a01b0381168114612e1f57600080fd5b919050565b600060208284031215612e3657600080fd5b611fda82612e08565b600060a08284031215612e5157600080fd5b50919050565b60008060008060808587031215612e6d57600080fd5b612e7685612e08565b935060208501359250612e8b60408601612e08565b9150606085013567ffffffffffffffff811115612ea757600080fd5b612eb387828801612e3f565b91505092959194509250565b60008083601f840112612ed157600080fd5b50813567ffffffffffffffff811115612ee957600080fd5b602083019150836020828501011115612f0157600080fd5b9250929050565b60008060008060608587031215612f1e57600080fd5b612f2785612e08565b9350602085013567ffffffffffffffff811115612f4357600080fd5b612f4f87828801612ebf565b909450925050604085013567ffffffffffffffff811115612ea757600080fd5b600080600060408486031215612f8457600080fd5b612f8d84612e08565b9250602084013567ffffffffffffffff811115612fa957600080fd5b612fb586828701612ebf565b9497909650939450505050565b60005b83811015612fdd578181015183820152602001612fc5565b50506000910152565b60008151808452612ffe816020860160208601612fc2565b601f01601f19169290920160200192915050565b602081526000611fda6020830184612fe6565b60006020828403121561303757600080fd5b5035919050565b6000806040838503121561305157600080fd5b8235915061306160208401612e08565b90509250929050565b600080600080848603606081121561308157600080fd5b602081121561308f57600080fd5b5084935061309f60208601612e08565b9250604085013567ffffffffffffffff8111156130bb57600080fd5b6130c787828801612ebf565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561312b5761312b6130d3565b604052919050565b600067ffffffffffffffff82111561314d5761314d6130d3565b50601f01601f191660200190565b6000806040838503121561316e57600080fd5b61317783612e08565b9150602083013567ffffffffffffffff81111561319357600080fd5b8301601f810185136131a457600080fd5b80356131b76131b282613133565b613102565b8181528660208385010111156131cc57600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561320457600080fd5b61320d86612e08565b945061321b60208701612e08565b935060408601359250606086013567ffffffffffffffff81111561323e57600080fd5b61324a88828901612ebf565b969995985093965092949392505050565b6000806040838503121561326e57600080fd5b61327783612e08565b9150602083013567ffffffffffffffff81111561329357600080fd5b61329f85828601612e3f565b9150509250929050565b6000806000606084860312156132be57600080fd5b6132c784612e08565b92506132d560208501612e08565b91506132e360408501612e08565b90509250925092565b60008060008060008060a0878903121561330557600080fd5b61330e87612e08565b95506020870135945061332360408801612e08565b9350606087013567ffffffffffffffff81111561333f57600080fd5b61334b89828a01612ebf565b909450925050608087013567ffffffffffffffff81111561336b57600080fd5b61337789828a01612e3f565b9150509295509295509295565b600060608284031215612e5157600080fd5b60008060008060008060a087890312156133af57600080fd5b6133b887612e08565b95506133c660208801612e08565b945060408701359350606087013567ffffffffffffffff8111156133e957600080fd5b6133f589828a01612ebf565b909450925050608087013567ffffffffffffffff81111561341557600080fd5b61337789828a01613384565b6000806000806060858703121561343757600080fd5b61344085612e08565b9350602085013567ffffffffffffffff81111561345c57600080fd5b61346887828801612ebf565b909450925050604085013567ffffffffffffffff81111561348857600080fd5b612eb387828801613384565b8015158114610c3a57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126134d757600080fd5b830160208101925035905067ffffffffffffffff8111156134f757600080fd5b803603821315612f0157600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b0361354282612e08565b1682526000602082013561355581613494565b151560208401526001600160a01b0361357060408401612e08565b16604084015261358360608301836134a2565b60a0606086015261359860a086018284613506565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a06060820152600061211f60a0830184613531565b6040815260006135f8604083018587613506565b8281036020840152612d7a8185613531565b83815260406020820152600061211f604083018486613506565b60006020828403121561363657600080fd5b8151611fda81613494565b60006020828403121561365357600080fd5b5051919050565b8581526001600160a01b0385166020820152608060408201526000613683608083018587613506565b82810360608401526136958185613531565b98975050505050505050565b6001600160a01b036136b282612e08565b1682526000602082013567ffffffffffffffff81168082146136d357600080fd5b6020850152506136e660408301836134a2565b6060604086015261211f606086018284613506565b602081526000611fda60208301846136a1565b848152606060208201526000613728606083018587613506565b828103604084015261373a81856136a1565b979650505050505050565b8183823760009101908152919050565b6001600160a01b0361376685612e08565b16815260406020820152600061211f604083018486613506565b60006020828403121561379257600080fd5b815167ffffffffffffffff8111156137a957600080fd5b8201601f810184136137ba57600080fd5b80516137c86131b282613133565b8181528560208385010111156137dd57600080fd5b61211f826020830160208601612fc2565b60008251613800818460208701612fc2565b919091019291505056fea2646970667358221220fd3e928df264198521d0a241d1203b956a98fb9c29f4bda5117d3f46e4e8247e64736f6c634300081a0033", + 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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"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: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516138d56100fd600039600081816122370152818161226001526126ce01526138d56000f3fe6080604052600436106101fe5760003560e01c806357bec62f1161011d578063a217fddf116100b0578063c0c53b8b1161007f578063d547741f11610064578063d547741f1461066f578063dda79b751461068f578063e63ab1e9146106af57600080fd5b8063c0c53b8b1461062f578063d09e3b781461064f57600080fd5b8063a217fddf1461057d578063a783c78914610592578063ad3cb1cc146105c6578063ae7a3a6f1461060f57600080fd5b8063726ac97c116100ec578063726ac97c146104dd578063744b9b8b146104f05780638456cb591461050357806391d148541461051857600080fd5b806357bec62f146104325780635b112591146104525780635c975abb146104725780635d62c860146104a957600080fd5b80632f2ff15d116101955780633f4ba83a116101645780633f4ba83a146103d55780634f1ef286146103ea5780635131ab59146103fd57806352d1902d1461041d57600080fd5b80632f2ff15d1461036257806336568abe1461038257806336c99f3b146103a257806338e22527146103c257600080fd5b80631becceb4116101d15780631becceb41461028d5780631cff79cd146102ad57806321e093b1146102cd578063248a9ca31461030557600080fd5b806301ffc9a71461020357806310188aef14610238578063102614b01461025a5780631b5ee25b1461027a575b600080fd5b34801561020f57600080fd5b5061022361021e366004612e41565b6106e3565b60405190151581526020015b60405180910390f35b34801561024457600080fd5b50610258610253366004612e9f565b61077c565b005b34801561026657600080fd5b50610258610275366004612ed2565b610857565b610258610288366004612f95565b610951565b34801561029957600080fd5b506102586102a8366004613008565b610b39565b6102c06102bb36600461306f565b610bb7565b60405161022f9190613112565b3480156102d957600080fd5b506003546102ed906001600160a01b031681565b6040516001600160a01b03909116815260200161022f565b34801561031157600080fd5b50610354610320366004613125565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161022f565b34801561036e57600080fd5b5061025861037d36600461313e565b610c6f565b34801561038e57600080fd5b5061025861039d36600461313e565b610cb3565b3480156103ae57600080fd5b506102586103bd36600461316a565b610d04565b6102c06103d0366004613202565b610ead565b3480156103e157600080fd5b50610258610f99565b6102586103f83660046132f3565b610fce565b34801561040957600080fd5b50610258610418366004613384565b610fed565b34801561042957600080fd5b506103546112ed565b34801561043e57600080fd5b506002546102ed906001600160a01b031681565b34801561045e57600080fd5b506001546102ed906001600160a01b031681565b34801561047e57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610223565b3480156104b557600080fd5b506103547f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6102586104eb3660046133f3565b61131c565b6102586104fe366004613008565b611494565b34801561050f57600080fd5b50610258611610565b34801561052457600080fd5b5061022361053336600461313e565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058957600080fd5b50610354600081565b34801561059e57600080fd5b506103547f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156105d257600080fd5b506102c06040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561061b57600080fd5b5061025861062a366004612e9f565b611642565b34801561063b57600080fd5b5061025861064a366004613441565b61171d565b34801561065b57600080fd5b5061025861066a366004613484565b6119b9565b34801561067b57600080fd5b5061025861068a36600461313e565b611ab1565b34801561069b57600080fd5b506000546102ed906001600160a01b031681565b3480156106bb57600080fd5b506103547f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061077657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061078781611af5565b6001600160a01b0382166107ae5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b0316156107f1576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61081b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611aff565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61085f611bec565b610867611c4a565b826000036108a1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166108c85760405163d92e233d60e01b815260040160405180910390fd5b6108d3338385611ccb565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c85858560405161091a93929190613629565b60405180910390a361094b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61097b81611af5565b610983611bec565b61098b611c4a565b6001600160a01b0385166109b25760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d80600081146109ff576040519150601f19603f3d011682016040523d82523d6000602084013e610a04565b606091505b5050905080610a3f576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5ac1e0700000000000000000000000000000000000000000000000000000000081526001600160a01b03871690635ac1e07090610a849086906004016136d3565b600060405180830381600087803b158015610a9e57600080fd5b505af1158015610ab2573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167ff196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b34888888604051610b0094939291906136e6565b60405180910390a350610b3260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610b41611bec565b610b49611c4a565b6001600160a01b038416610b705760405163d92e233d60e01b815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97485858560405161091a9392919061371d565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610be381611af5565b610beb611bec565b6001600160a01b038516610c125760405163d92e233d60e01b815260040160405180910390fd5b6000610c1f868686611f2e565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610c5e93929190613743565b60405180910390a295945050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610ca981611af5565b61094b8383611aff565b6001600160a01b0381163314610cf5576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cff8282611fe1565b505050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610d2e81611af5565b610d36611bec565b610d3e611c4a565b84600003610d78576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616610d9f5760405163d92e233d60e01b815260040160405180910390fd5b610db36001600160a01b03881687876120a5565b6040517f5ac1e0700000000000000000000000000000000000000000000000000000000081526001600160a01b03871690635ac1e07090610df89085906004016136d3565b600060405180830381600087803b158015610e1257600080fd5b505af1158015610e26573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167ff196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b87878787604051610e7394939291906136e6565b60405180910390a3610ea460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ed981611af5565b610ee1611bec565b610ee9611c4a565b6001600160a01b038516610f105760405163d92e233d60e01b815260040160405180910390fd5b6060610f1e87878787612119565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610f5d93929190613743565b60405180910390a29150610f9060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610fc381611af5565b610fcb61219c565b50565b610fd661222c565b610fdf826122fc565b610fe98282612307565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961101781611af5565b61101f611bec565b611027611c4a565b83600003611061576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0385166110885760405163d92e233d60e01b815260040160405180910390fd5b611092868661240d565b6110c8576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015611130573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611154919061375d565b61118a576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611195858484611f2e565b506111a0868661240d565b6111d6576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015611236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125a919061377a565b9050801561126c5761126c878261249d565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b73828787876040516112b393929190613743565b60405180910390a3506112e560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60006112f76126c3565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b611324611bec565b61132c611c4a565b34600003611366576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661138d5760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146113da576040519150601f19603f3d011682016040523d82523d6000602084013e6113df565b606091505b505090508061141a576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008660405161146293929190613629565b60405180910390a350610fe960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61149c611bec565b6114a4611c4a565b346000036114de576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166115055760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611552576040519150601f19603f3d011682016040523d82523d6000602084013e611557565b606091505b5050905080611592576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008888886040516115de959493929190613793565b60405180910390a35061094b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61163a81611af5565b610fcb612725565b600061164d81611af5565b6001600160a01b0382166116745760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b0316156116b7576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116e17f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611aff565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117685750825b905060008267ffffffffffffffff1660011480156117855750303b155b905081158015611793575080155b156117ca576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561182b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061184857506001600160a01b038716155b156118665760405163d92e233d60e01b815260040160405180910390fd5b61186e61279e565b6118766127a6565b61187e61279e565b6118866127b6565b611891600087611aff565b506118bc7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611aff565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561191a7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611aff565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156119af5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b6119c1611bec565b6119c9611c4a565b84600003611a03576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611a2a5760405163d92e233d60e01b815260040160405180910390fd5b611a35338587611ccb565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8787878787604051611a80959493929190613793565b60405180910390a36112e560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611aeb81611af5565b61094b8383611fe1565b610fcb81336127c6565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611be2576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611b983390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610776565b6000915050610776565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c48576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cc5576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611e2f57611cf66001600160a01b038316843084612853565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d86919061375d565b611dbc576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611e1b57600080fd5b505af1158015610ea4573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015611e92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb6919061375d565b611eec576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610cff906001600160a01b038481169186911684612853565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060611f3a838361288c565b600080856001600160a01b0316348686604051611f589291906137da565b60006040518083038185875af1925050503d8060008114611f95576040519150601f19603f3d011682016040523d82523d6000602084013e611f9a565b606091505b509150915081611fd6576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611be2576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610776565b6040516001600160a01b03838116602483015260448201839052610cff91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061298c565b6060836001600160a01b031663676cc054348786866040518563ffffffff1660e01b815260040161214c939291906137ea565b60006040518083038185885af115801561216a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526121939190810190613815565b95945050505050565b6121a4612a08565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806122c557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166122b97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c48576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610fe981611af5565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612361575060408051601f3d908101601f1916820190925261235e9181019061377a565b60015b6123a7576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612403576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161239e565b610cff8383612a63565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612479573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fda919061375d565b6003546001600160a01b03908116908316036125ec576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561251f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612543919061375d565b612579576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156125d857600080fd5b505af11580156112e5573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561264f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612673919061375d565b6126a9576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610fe9906001600160a01b038481169116836120a5565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c48576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61272d611bec565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361220e565b611c48612ab9565b6127ae612ab9565b611c48612b20565b6127be612ab9565b611c48612b28565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610fe9576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161239e565b6040516001600160a01b03848116602483015283811660448301526064820183905261094b9186918216906323b872dd906084016120d2565b60048110610fe95781357f98933fac000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601612911576040517fed69977500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa53e1f90000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610cff576040517ff3459a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006129a16001600160a01b03841683612b79565b905080516000141580156129c65750808060200190518101906129c4919061375d565b155b15610cff576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161239e565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c48576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a6c82612b87565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612ab157610cff8282612c2f565b610fe9612c9c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c48576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f08612ab9565b612b30612ab9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6060611fda83836000612cd4565b806001600160a01b03163b600003612bd6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161239e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612c4c9190613883565b600060405180830381855af49150503d8060008114612c87576040519150601f19603f3d011682016040523d82523d6000602084013e612c8c565b606091505b5091509150612193858383612d8a565b3415611c48576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081471015612d12576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161239e565b600080856001600160a01b03168486604051612d2e9190613883565b60006040518083038185875af1925050503d8060008114612d6b576040519150601f19603f3d011682016040523d82523d6000602084013e612d70565b606091505b5091509150612d80868383612d8a565b9695505050505050565b606082612d9f57612d9a82612dff565b611fda565b8151158015612db657506001600160a01b0384163b155b15612df8576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161239e565b5080611fda565b805115612e0f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612e5357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611fda57600080fd5b80356001600160a01b0381168114612e9a57600080fd5b919050565b600060208284031215612eb157600080fd5b611fda82612e83565b600060a08284031215612ecc57600080fd5b50919050565b60008060008060808587031215612ee857600080fd5b612ef185612e83565b935060208501359250612f0660408601612e83565b9150606085013567ffffffffffffffff811115612f2257600080fd5b612f2e87828801612eba565b91505092959194509250565b60008083601f840112612f4c57600080fd5b50813567ffffffffffffffff811115612f6457600080fd5b602083019150836020828501011115612f7c57600080fd5b9250929050565b600060808284031215612ecc57600080fd5b60008060008060608587031215612fab57600080fd5b612fb485612e83565b9350602085013567ffffffffffffffff811115612fd057600080fd5b612fdc87828801612f3a565b909450925050604085013567ffffffffffffffff811115612ffc57600080fd5b612f2e87828801612f83565b6000806000806060858703121561301e57600080fd5b61302785612e83565b9350602085013567ffffffffffffffff81111561304357600080fd5b61304f87828801612f3a565b909450925050604085013567ffffffffffffffff811115612f2257600080fd5b60008060006040848603121561308457600080fd5b61308d84612e83565b9250602084013567ffffffffffffffff8111156130a957600080fd5b6130b586828701612f3a565b9497909650939450505050565b60005b838110156130dd5781810151838201526020016130c5565b50506000910152565b600081518084526130fe8160208601602086016130c2565b601f01601f19169290920160200192915050565b602081526000611fda60208301846130e6565b60006020828403121561313757600080fd5b5035919050565b6000806040838503121561315157600080fd5b8235915061316160208401612e83565b90509250929050565b60008060008060008060a0878903121561318357600080fd5b61318c87612e83565b955061319a60208801612e83565b945060408701359350606087013567ffffffffffffffff8111156131bd57600080fd5b6131c989828a01612f3a565b909450925050608087013567ffffffffffffffff8111156131e957600080fd5b6131f589828a01612f83565b9150509295509295509295565b600080600080848603606081121561321957600080fd5b602081121561322757600080fd5b5084935061323760208601612e83565b9250604085013567ffffffffffffffff81111561325357600080fd5b61325f87828801612f3a565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156132c3576132c361326b565b604052919050565b600067ffffffffffffffff8211156132e5576132e561326b565b50601f01601f191660200190565b6000806040838503121561330657600080fd5b61330f83612e83565b9150602083013567ffffffffffffffff81111561332b57600080fd5b8301601f8101851361333c57600080fd5b803561334f61334a826132cb565b61329a565b81815286602083850101111561336457600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561339c57600080fd5b6133a586612e83565b94506133b360208701612e83565b935060408601359250606086013567ffffffffffffffff8111156133d657600080fd5b6133e288828901612f3a565b969995985093965092949392505050565b6000806040838503121561340657600080fd5b61340f83612e83565b9150602083013567ffffffffffffffff81111561342b57600080fd5b61343785828601612eba565b9150509250929050565b60008060006060848603121561345657600080fd5b61345f84612e83565b925061346d60208501612e83565b915061347b60408501612e83565b90509250925092565b60008060008060008060a0878903121561349d57600080fd5b6134a687612e83565b9550602087013594506134bb60408801612e83565b9350606087013567ffffffffffffffff8111156134d757600080fd5b6134e389828a01612f3a565b909450925050608087013567ffffffffffffffff81111561350357600080fd5b6131f589828a01612eba565b8015158114610fcb57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261355257600080fd5b830160208101925035905067ffffffffffffffff81111561357257600080fd5b803603821315612f7c57600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b036135bd82612e83565b168252600060208201356135d08161350f565b151560208401526001600160a01b036135eb60408401612e83565b1660408401526135fe606083018361351d565b60a0606086015261361360a086018284613581565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a06060820152600061219360a08301846135ac565b6001600160a01b0361367082612e83565b1682526001600160a01b0361368760208301612e83565b1660208301526000604082013567ffffffffffffffff81168082146136ab57600080fd5b6040850152506136be606083018361351d565b60806060860152612193608086018284613581565b602081526000611fda602083018461365f565b848152606060208201526000613700606083018587613581565b8281036040840152613712818561365f565b979650505050505050565b604081526000613731604083018587613581565b8281036020840152612d8081856135ac565b838152604060208201526000612193604083018486613581565b60006020828403121561376f57600080fd5b8151611fda8161350f565b60006020828403121561378c57600080fd5b5051919050565b8581526001600160a01b03851660208201526080604082015260006137bc608083018587613581565b82810360608401526137ce81856135ac565b98975050505050505050565b8183823760009101908152919050565b6001600160a01b036137fb85612e83565b168152604060208201526000612193604083018486613581565b60006020828403121561382757600080fd5b815167ffffffffffffffff81111561383e57600080fd5b8201601f8101841361384f57600080fd5b805161385d61334a826132cb565b81815285602083850101111561387257600080fd5b6121938260208301602086016130c2565b600082516138958184602087016130c2565b919091019291505056fea2646970667358221220b9b9841605fcf6973c8fbe9f339eac1c8e9b9903f4718806936530d8ec8337a264736f6c634300081a0033", } // GatewayEVMABI is the input ABI used to generate the binding from. @@ -804,23 +805,23 @@ func (_GatewayEVM *GatewayEVMTransactorSession) Execute0(messageContext MessageC return _GatewayEVM.Contract.Execute0(&_GatewayEVM.TransactOpts, messageContext, destination, data) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0xf7ad60db. +// ExecuteRevert is a paid mutator transaction binding the contract method 0x1b5ee25b. // -// Solidity: function executeRevert(address destination, bytes data, (address,uint64,bytes) revertContext) payable returns() +// Solidity: function executeRevert(address destination, bytes data, (address,address,uint64,bytes) revertContext) payable returns() func (_GatewayEVM *GatewayEVMTransactor) ExecuteRevert(opts *bind.TransactOpts, destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVM.contract.Transact(opts, "executeRevert", destination, data, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0xf7ad60db. +// ExecuteRevert is a paid mutator transaction binding the contract method 0x1b5ee25b. // -// Solidity: function executeRevert(address destination, bytes data, (address,uint64,bytes) revertContext) payable returns() +// Solidity: function executeRevert(address destination, bytes data, (address,address,uint64,bytes) revertContext) payable returns() func (_GatewayEVM *GatewayEVMSession) ExecuteRevert(destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVM.Contract.ExecuteRevert(&_GatewayEVM.TransactOpts, destination, data, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0xf7ad60db. +// ExecuteRevert is a paid mutator transaction binding the contract method 0x1b5ee25b. // -// Solidity: function executeRevert(address destination, bytes data, (address,uint64,bytes) revertContext) payable returns() +// Solidity: function executeRevert(address destination, bytes data, (address,address,uint64,bytes) revertContext) payable returns() func (_GatewayEVM *GatewayEVMTransactorSession) ExecuteRevert(destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVM.Contract.ExecuteRevert(&_GatewayEVM.TransactOpts, destination, data, revertContext) } @@ -930,23 +931,23 @@ func (_GatewayEVM *GatewayEVMTransactorSession) RenounceRole(role [32]byte, call return _GatewayEVM.Contract.RenounceRole(&_GatewayEVM.TransactOpts, role, callerConfirmation) } -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xd0b492c3. +// RevertWithERC20 is a paid mutator transaction binding the contract method 0x36c99f3b. // -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) returns() func (_GatewayEVM *GatewayEVMTransactor) RevertWithERC20(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVM.contract.Transact(opts, "revertWithERC20", token, to, amount, data, revertContext) } -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xd0b492c3. +// RevertWithERC20 is a paid mutator transaction binding the contract method 0x36c99f3b. // -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) returns() func (_GatewayEVM *GatewayEVMSession) RevertWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVM.Contract.RevertWithERC20(&_GatewayEVM.TransactOpts, token, to, amount, data, revertContext) } -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xd0b492c3. +// RevertWithERC20 is a paid mutator transaction binding the contract method 0x36c99f3b. // -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) returns() func (_GatewayEVM *GatewayEVMTransactorSession) RevertWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVM.Contract.RevertWithERC20(&_GatewayEVM.TransactOpts, token, to, amount, data, revertContext) } @@ -2014,9 +2015,9 @@ type GatewayEVMReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// FilterReverted is a free log retrieval operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVM *GatewayEVMFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*GatewayEVMRevertedIterator, error) { var toRule []interface{} @@ -2035,9 +2036,9 @@ func (_GatewayEVM *GatewayEVMFilterer) FilterReverted(opts *bind.FilterOpts, to return &GatewayEVMRevertedIterator{contract: _GatewayEVM.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// WatchReverted is a free log subscription operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVM *GatewayEVMFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *GatewayEVMReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2081,9 +2082,9 @@ func (_GatewayEVM *GatewayEVMFilterer) WatchReverted(opts *bind.WatchOpts, sink }), nil } -// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// ParseReverted is a log parse operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVM *GatewayEVMFilterer) ParseReverted(log types.Log) (*GatewayEVMReverted, error) { event := new(GatewayEVMReverted) if err := _GatewayEVM.contract.UnpackLog(event, "Reverted", log); err != nil { diff --git a/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go b/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go index 5d290882..b2f3cf60 100644 --- a/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go +++ b/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go @@ -31,6 +31,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -65,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\":\"testDepositERC20ToCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayload\",\"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\":\"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\":\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055620f4240602c55348015603357600080fd5b5061e942806100436000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063916a17c611610104578063bb93f11e116100a2578063e306a97811610071578063e306a9781461030b578063e85c5a0714610313578063f96c02df1461031b578063fa7626d41461032357600080fd5b8063bb93f11e146102eb578063c13d738f146102f3578063d896e261146102fb578063e20c9f711461030357600080fd5b8063b0464fdc116100de578063b0464fdc146102bb578063b2849063146102c3578063b5508aa9146102cb578063ba414fa6146102d357600080fd5b8063916a17c6146102965780639fd1e597146102ab578063aa030c1c146102b357600080fd5b806330f7c04f1161017c5780636459542a1161014b5780636459542a1461025c57806366d9a9a0146102645780637478fda01461027957806385226c811461028157600080fd5b806330f7c04f1461023c5780633e5e3c23146102445780633f7286f41461024c57806351da903d1461025457600080fd5b80630a9254e4116101b85780630a9254e4146101f95780631806a9a5146102015780631ed7831c146102095780632ade38801461022757600080fd5b806305a898e2146101df57806306978ca3146101e95780630724d8e3146101f1575b600080fd5b6101e7610330565b005b6101e76104e7565b6101e76105ff565b6101e76107b3565b6101e761121f565b61021161131c565b60405161021e9190617a41565b60405180910390f35b61022f61137e565b60405161021e9190617add565b6101e76114c0565b610211611933565b610211611993565b6101e76119f3565b6101e7611b82565b61026c611f7b565b60405161021e9190617c43565b6101e76120fd565b610289612200565b60405161021e9190617ce1565b61029e6122d0565b60405161021e9190617d58565b6101e76123cb565b6101e76125ed565b61029e6127aa565b6101e76128a5565b610289612b39565b6102db612c09565b604051901515815260200161021e565b6101e7612cdd565b6101e7612e60565b6101e7613012565b61021161318d565b6101e76131ed565b6101e76134b0565b6101e7613731565b601f546102db9060ff1681565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390610428906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b15801561044257600080fd5b505af1158015610456573d6000803e3d6000fd5b50506020546023546040517fd09e3b780000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063d09e3b7893506104b19260009288929116908790602890600401617f2b565b600060405180830381600087803b1580156104cb57600080fd5b505af11580156104df573d6000803e3d6000fd5b505050505050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e73756666696369656e74455448416d6f756e7400000000000000000000006044820152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561057d57600080fd5b505af1158015610591573d6000803e3d6000fd5b50506020546026546040517f726ac97c0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063726ac97c935085926105e6921690602890600401617f80565b6000604051808303818588803b1580156104cb57600080fd5b6027546020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039182166084820152620186a092919091163190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561069b57600080fd5b505af11580156106af573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c906106fe908690600090602890617fa2565b60405180910390a36020546026546040517f726ac97c0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263726ac97c9286926107599290911690602890600401617f80565b6000604051808303818588803b15801561077257600080fd5b505af1158015610786573d6000803e3d6000fd5b50506027546001600160a01b03163192506107ae91506107a890508484618007565b82613847565b505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805490911661567817905560405161080590617954565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561088a573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560275460405191169081906108d390617961565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610906573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190861694810194909452604484019290925290921660648201526109f7919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526138c6565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602754602554604051929391821692911690610a839061796e565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610abf573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556020546024546027546025546040519385169492831693918316921690610b1a9061797b565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610b5e573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fca669fa700000000000000000000000000000000000000000000000000000000815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610bfc57600080fd5b505af1158015610c10573d6000803e3d6000fd5b5050602480546027546022546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b158015610c8357600080fd5b505af1158015610c97573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d1b57600080fd5b505af1158015610d2f573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610da557600080fd5b505af1158015610db9573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610e1f57600080fd5b505af1158015610e33573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610e9957600080fd5b505af1158015610ead573d6000803e3d6000fd5b50506021546023546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b158015610f1357600080fd5b505af1158015610f27573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f8957600080fd5b505af1158015610f9d573d6000803e3d6000fd5b5050602354602554602c546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152911692506340c10f199150604401600060405180830381600087803b15801561100e57600080fd5b505af1158015611022573d6000803e3d6000fd5b50506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561109857600080fd5b505af11580156110ac573d6000803e3d6000fd5b5050602254602554602c546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152600060448201529116925063106e62909150606401600060405180830381600087803b15801561112457600080fd5b505af1158015611138573d6000803e3d6000fd5b50506040805160a08101825261032180825260016020808401918252838501928352845190810190945260008085526060840185905260808401528251602880549251151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009093166001600160a01b0392831617929092178255915160298054919093167fffffffffffffffffffffffff000000000000000000000000000000000000000091909116179091559093509150602a9061120f9082618090565b5060808201518160030155905050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b1580156112b557600080fd5b505af11580156112c9573d6000803e3d6000fd5b50506020546040517f726ac97c0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063726ac97c915083906105e690600090602890600401617f80565b6060601680548060200260200160405190810160405280929190818152602001828054801561137457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611356575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156114b757600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156114a057838290600052602060002001805461141390617def565b80601f016020809104026020016040519081016040528092919081815260200182805461143f90617def565b801561148c5780601f106114615761010080835404028352916020019161148c565b820191906000526020600020905b81548152906001019060200180831161146f57829003601f168201915b5050505050815260200190600101906113f4565b5050505081525050815260200190600101906113a2565b50505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa15801561152c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611550919061814f565b905061155d600082613847565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101879052929350169063095ea7b3906044016020604051808303816000875af1158015611640573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116649190618168565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156116f357600080fd5b505af1158015611707573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c9261175d92899290911690879060289061818a565b60405180910390a36020546026546023546040517fd09e3b780000000000000000000000000000000000000000000000000000000081526001600160a01b039384169363d09e3b78936117c193908216928992909116908790602890600401617f2b565b600060405180830381600087803b1580156117db57600080fd5b505af11580156117ef573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561185b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187f919061814f565b905061188b8482613847565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156118f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611919919061814f565b905061192c85602c546107a891906181c4565b5050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015611374576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611356575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611374576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611356575050505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611aed57600080fd5b505af1158015611b01573d6000803e3d6000fd5b50506020546040517f1becceb40000000000000000000000000000000000000000000000000000000081526001600160a01b039091169250631becceb49150611b549060009085906028906004016181d7565b600060405180830381600087803b158015611b6e57600080fd5b505af115801561192c573d6000803e3d6000fd5b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa158015611bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c12919061814f565b9050611c1f600082613847565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af1158015611c8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb19190618168565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611d4057600080fd5b505af1158015611d54573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c92611da892889290911690602890617fa2565b60405180910390a36020546026546023546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b039384169363102614b093611e0a939082169288929091169060289060040161820b565b600060405180830381600087803b158015611e2457600080fd5b505af1158015611e38573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611ea4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec8919061814f565b9050611ed48382613847565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f62919061814f565b9050611f7584602c546107a891906181c4565b50505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156114b75783829060005260206000209060020201604051806040016040529081600082018054611fd290617def565b80601f0160208091040260200160405190810160405280929190818152602001828054611ffe90617def565b801561204b5780601f106120205761010080835404028352916020019161204b565b820191906000526020600020905b81548152906001019060200180831161202e57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156120e557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116120925790505b50505050508152505081526020019060010190611f9f565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561219357600080fd5b505af11580156121a7573d6000803e3d6000fd5b50506020546023546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063102614b09350611b5492600092879291169060289060040161820b565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156114b757838290600052602060002001805461224390617def565b80601f016020809104026020016040519081016040528092919081815260200182805461226f90617def565b80156122bc5780601f10612291576101008083540402835291602001916122bc565b820191906000526020600020905b81548152906001019060200180831161229f57829003601f168201915b505050505081526020019060010190612224565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156114b75760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156123b357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116123605790505b505050505081525050815260200190600101906122f4565b6027546026546040516001600160a01b039182166024820152620186a09291909116319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156124dc57600080fd5b505af11580156124f0573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c90612541908790600090879060289061818a565b60405180910390a36020546026546040517f744b9b8b0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263744b9b8b92879261259e929091169086906028906004016181d7565b6000604051808303818588803b1580156125b757600080fd5b505af11580156125cb573d6000803e3d6000fd5b50506027546001600160a01b0316319250611f7591506107a890508585618007565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156126f057600080fd5b505af1158015612704573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97490612750908590602890618242565b60405180910390a36020546026546040517f1becceb40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692631becceb492611b549291169085906028906004016181d7565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156114b75760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561288d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161283a5790505b505050505081525050815260200190600101906127ce565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a06024820181905292919091169063095ea7b3906044016020604051808303816000875af115801561291a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293e9190618168565b506025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156129b157600080fd5b505af11580156129c5573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b158015612a2b57600080fd5b505af1158015612a3f573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b158015612ac957600080fd5b505af1158015612add573d6000803e3d6000fd5b50506020546026546023546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063102614b09450611b5493928316928792169060289060040161820b565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156114b7578382906000526020600020018054612b7c90617def565b80601f0160208091040260200160405190810160405280929190818152602001828054612ba890617def565b8015612bf55780601f10612bca57610100808354040283529160200191612bf5565b820191906000526020600020905b815481529060010190602001808311612bd857829003601f168201915b505050505081526020019060010190612b5d565b60085460009060ff1615612c21575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd6919061814f565b1415905090565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612dd49060040160208082526017908201527f496e73756666696369656e744552433230416d6f756e74000000000000000000604082015260600190565b600060405180830381600087803b158015612dee57600080fd5b505af1158015612e02573d6000803e3d6000fd5b50506020546026546023546040517fd09e3b780000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063d09e3b7894506104b19392831692889216908790602890600401617f2b565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612f579060040160208082526015908201527f496e73756666696369656e74455448416d6f756e740000000000000000000000604082015260600190565b600060405180830381600087803b158015612f7157600080fd5b505af1158015612f85573d6000803e3d6000fd5b50506020546026546040517f744b9b8b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063744b9b8b93508692612fdc92169086906028906004016181d7565b6000604051808303818588803b158015612ff557600080fd5b505af1158015613009573d6000803e3d6000fd5b50505050505050565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb39061310a906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b15801561312457600080fd5b505af1158015613138573d6000803e3d6000fd5b50506020546040517f744b9b8b0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063744b9b8b91508490612fdc9060009086906028906004016181d7565b60606015805480602002602001604051908101604052809291908181526020018280548015611374576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611356575050505050905090565b602480546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a093810184905291169063095ea7b3906044016020604051808303816000875af115801561325f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132839190618168565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561331257600080fd5b505af1158015613326573d6000803e3d6000fd5b50506026546025546024546040516001600160a01b03938416955091831693507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c9261337a92879290911690602890617fa2565b60405180910390a36020546026546024546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b039384169363102614b0936133dc939082169287929091169060289060040161820b565b600060405180830381600087803b1580156133f657600080fd5b505af115801561340a573d6000803e3d6000fd5b5050602480546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613475573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613499919061814f565b90506134ac82602c546107a891906181c4565b5050565b6026546040516001600160a01b039091166024820152620186a09060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052929350169063095ea7b3906044016020604051808303816000875af1158015613598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135bc9190618168565b506025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561362f57600080fd5b505af1158015613643573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b1580156136a957600080fd5b505af11580156136bd573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401612dd4565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260006024820181905292919091169063095ea7b3906044016020604051808303816000875af11580156137a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c89190618168565b506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e73756666696369656e744552433230416d6f756e740000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401612aaf565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156138b257600080fd5b505afa1580156104df573d6000803e3d6000fd5b60006138d0617988565b6138db8484836138e5565b9150505b92915050565b6000806138f28584613960565b90506139556040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613940929190618267565b6040516020818303038152906040528561396c565b9150505b9392505050565b6000613959838361399a565b60c081015151600090156139905761398984848460c001516139b5565b9050613959565b6139898484613b5b565b60006139a68383613c46565b6139598383602001518461396c565b6000806139c0613c52565b905060006139ce8683613d25565b905060006139e582606001518360200151856141cb565b905060006139f5838389896143dd565b90506000613a028261525a565b602081015181519192509060030b15613a7557898260400151604051602001613a2c929190618289565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613a6c9160040161830a565b60405180910390fd5b6000613ab86040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615429565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613b0b90849060040161830a565b602060405180830381865afa158015613b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b4c919061831d565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613bb090879060040161830a565b600060405180830381865afa158015613bcd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bf591908101906183ff565b90506000613c238285604051602001613c0f929190618434565b604051602081830303815290604052615629565b90506001600160a01b0381166138db578484604051602001613a2c929190618463565b6134ac8282600061563c565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613cd990849060040161850e565b600060405180830381865afa158015613cf6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d1e9190810190618555565b9250505090565b613d576040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613da26040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613dab8561573f565b60208201526000613dbb86615b24565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613dfd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e259190810190618555565b86838560200151604051602001613e3f949392919061859e565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613e9790859060040161830a565b600060405180830381865afa158015613eb4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613edc9190810190618555565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613f249084906004016186a2565b602060405180830381865afa158015613f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f659190618168565b613f7a5781604051602001613a2c91906186f4565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613fbf908490600401618786565b600060405180830381865afa158015613fdc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140049190810190618555565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061404b9084906004016187d8565b602060405180830381865afa158015614068573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408c9190618168565b15614121576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906140d69084906004016187d8565b600060405180830381865afa1580156140f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261411b9190810190618555565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001614146919061882a565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614172929190618896565b600060405180830381865afa15801561418f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141b79190810190618555565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816141e75790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614247576142476188bb565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061429b5761429b6188bb565b6020026020010181905250846040516020016142b791906188ea565b604051602081830303815290604052816002815181106142d9576142d96188bb565b6020026020010181905250826040516020016142f59190618956565b60405160208183030381529060405281600381518110614317576143176188bb565b6020026020010181905250600061432d8261525a565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506143be9060408051808201825260008082526020918201528151808301909252845182528085019082015290615da7565b6143d35785604051602001613a2c9190618997565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561442d565b511590565b6145a1578260200151156144e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613a6c565b8260c00151156145a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613a6c565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816145ba57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061461590618a28565b935060ff168151811061462a5761462a6188bb565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161467b9190618a47565b60405160208183030381529060405282828061469690618a28565b935060ff16815181106146ab576146ab6188bb565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806146f890618a28565b935060ff168151811061470d5761470d6188bb565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061475a90618a28565b935060ff168151811061476f5761476f6188bb565b6020026020010181905250876020015182828061478b90618a28565b935060ff16815181106147a0576147a06188bb565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806147ed90618a28565b935060ff1681518110614802576148026188bb565b60209081029190910101528751828261481a81618a28565b935060ff168151811061482f5761482f6188bb565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061487c90618a28565b935060ff1681518110614891576148916188bb565b60200260200101819052506148a546615e08565b82826148b081618a28565b935060ff16815181106148c5576148c56188bb565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061491290618a28565b935060ff1681518110614927576149276188bb565b60200260200101819052508682828061493f90618a28565b935060ff1681518110614954576149546188bb565b6020908102919091010152855115614a7b5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826149a581618a28565b935060ff16815181106149ba576149ba6188bb565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614a0a90899060040161830a565b600060405180830381865afa158015614a27573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614a4f9190810190618555565b8282614a5a81618a28565b935060ff1681518110614a6f57614a6f6188bb565b60200260200101819052505b846020015115614b4b5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614ac481618a28565b935060ff1681518110614ad957614ad96188bb565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614b2690618a28565b935060ff1681518110614b3b57614b3b6188bb565b6020026020010181905250614d12565b614b836144288660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614c165760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614bc681618a28565b935060ff1681518110614bdb57614bdb6188bb565b60200260200101819052508460a00151604051602001614bfb91906188ea565b604051602081830303815290604052828280614b2690618a28565b8460c00151158015614c59575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614c5790511590565b155b15614d125760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614c9d81618a28565b935060ff1681518110614cb257614cb26188bb565b6020026020010181905250614cc688615ea8565b604051602001614cd691906188ea565b604051602081830303815290604052828280614cf190618a28565b935060ff1681518110614d0657614d066188bb565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614d4690511590565b614ddb5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614d8981618a28565b935060ff1681518110614d9e57614d9e6188bb565b60200260200101819052508460400151828280614dba90618a28565b935060ff1681518110614dcf57614dcf6188bb565b60200260200101819052505b606085015115614efc5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614e2481618a28565b935060ff1681518110614e3957614e396188bb565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614ea8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614ed09190810190618555565b8282614edb81618a28565b935060ff1681518110614ef057614ef06188bb565b60200260200101819052505b60e08501515115614fa35760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614f4681618a28565b935060ff1681518110614f5b57614f5b6188bb565b6020026020010181905250614f778560e0015160000151615e08565b8282614f8281618a28565b935060ff1681518110614f9757614f976188bb565b60200260200101819052505b60e0850151602001511561504d5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614ff081618a28565b935060ff1681518110615005576150056188bb565b60200260200101819052506150218560e0015160200151615e08565b828261502c81618a28565b935060ff1681518110615041576150416188bb565b60200260200101819052505b60e085015160400151156150f75760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261509a81618a28565b935060ff16815181106150af576150af6188bb565b60200260200101819052506150cb8560e0015160400151615e08565b82826150d681618a28565b935060ff16815181106150eb576150eb6188bb565b60200260200101819052505b60e085015160600151156151a15760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261514481618a28565b935060ff1681518110615159576151596188bb565b60200260200101819052506151758560e0015160600151615e08565b828261518081618a28565b935060ff1681518110615195576151956188bb565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156151bf576151bf61801a565b6040519080825280602002602001820160405280156151f257816020015b60608152602001906001900390816151dd5790505b50905060005b8260ff168160ff16101561524b57838160ff168151811061521b5761521b6188bb565b6020026020010151828260ff1681518110615238576152386188bb565b60209081029190910101526001016151f8565b5093505050505b949350505050565b6152816040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161530791869101618ab2565b600060405180830381865afa158015615324573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261534c9190810190618555565b9050600061535a8683616997565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161538a9190617ce1565b6000604051808303816000875af11580156153a9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526153d19190810190618af9565b805190915060030b158015906153ea5750602081015151155b80156153f95750604081015151155b156143d35781600081518110615411576154116188bb565b6020026020010151604051602001613a2c9190618baf565b6060600061545e8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506154959082905b90616aec565b156155f25760006155128261550c846155066154d88a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616b13565b90616b75565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615576908290616aec565b156155e057604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526155dd905b8290616bfa565b90505b6155e981616c20565b92505050613959565b821561560b578484604051602001613a2c929190618d9b565b5050604080516020810190915260008152613959565b509392505050565b6000808251602084016000f09392505050565b8160a001511561564b57505050565b6000615658848484616c89565b905060006156658261525a565b602081015181519192509060030b1580156157015750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157019060408051808201825260008082526020918201528151808301909252845182528085019082015261548f565b1561570e57505050505050565b6040820151511561572e578160400151604051602001613a2c9190618e42565b80604051602001613a2c9190618ea0565b606060006157748360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506157d9905b8290615da7565b1561584857604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261395990615843908390617224565b616c20565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158aa905b82906172ae565b60010361597757604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615910906155d6565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261395990615843905b8390616bfa565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159d6906157d2565b15615b0d57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615a3e908390617348565b905060008160018351615a5191906181c4565b81518110615a6157615a616188bb565b60200260200101519050615b04615843615ad76040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617224565b95945050505050565b82604051602001613a2c9190618f0b565b50919050565b60606000615b598360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615bbb906157d2565b15615bc95761395981616c20565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615c28906158a3565b600103615c9257604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526139599061584390615970565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615cf1906157d2565b15615b0d57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615d59908390617348565b9050600181511115615d95578060028251615d7491906181c4565b81518110615d8457615d846188bb565b602002602001015192505050919050565b5082604051602001613a2c9190618f0b565b805182516000911115615dbc575060006138df565b81518351602085015160009291615dd291618007565b615ddc91906181c4565b905082602001518103615df35760019150506138df565b82516020840151819020912014905092915050565b60606000615e15836173ed565b600101905060008167ffffffffffffffff811115615e3557615e3561801a565b6040519080825280601f01601f191660200182016040528015615e5f576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615e6957509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615f34905b82906174cf565b15615f7457505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fd390615f2d565b1561601357505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261607290615f2d565b156160b257505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261611190615f2d565b806161765750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261617690615f2d565b156161b657505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261621590615f2d565b8061627a5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261627a90615f2d565b156162ba57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261631990615f2d565b8061637e5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261637e90615f2d565b156163be57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261641d90615f2d565b806164825750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261648290615f2d565b156164c257505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261652190615f2d565b1561656157505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165c090615f2d565b1561660057505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261665f90615f2d565b1561669f57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166fe90615f2d565b1561673e57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261679d90615f2d565b156167dd57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261683c90615f2d565b806168a15750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168a190615f2d565b156168e157505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261694090615f2d565b1561698057505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613a2c9290602001618fe9565b60608060005b8451811015616a2257818582815181106169b9576169b96188bb565b60200260200101516040516020016169d2929190618434565b6040516020818303038152906040529150600185516169f191906181c4565b8114616a1a5781604051602001616a089190619152565b60405160208183030381529060405291505b60010161699d565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616a3b5790505090508381600081518110616a6657616a666188bb565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616aba57616aba6188bb565b60200260200101819052508181600281518110616ad957616ad96188bb565b6020908102919091010152949350505050565b6020808301518351835192840151600093616b0a92918491906174e3565b14159392505050565b60408051808201909152600080825260208201526000616b4584600001518560200151856000015186602001516175f4565b9050836020015181616b5791906181c4565b84518590616b669083906181c4565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616b9a5750816138df565b6020808301519084015160019114616bc15750815160208481015190840151829020919020145b8015616bf257825184518590616bd89083906181c4565b9052508251602085018051616bee908390618007565b9052505b509192915050565b6040805180820190915260008082526020820152616c19838383617714565b5092915050565b60606000826000015167ffffffffffffffff811115616c4157616c4161801a565b6040519080825280601f01601f191660200182016040528015616c6b576020820181803683370190505b5090506000602082019050616c1981856020015186600001516177bf565b60606000616c95613c52565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616cb257905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616d0d90618a28565b935060ff1681518110616d2257616d226188bb565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616d739190619193565b604051602081830303815290604052828280616d8e90618a28565b935060ff1681518110616da357616da36188bb565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616df090618a28565b935060ff1681518110616e0557616e056188bb565b602002602001018190525082604051602001616e219190618956565b604051602081830303815290604052828280616e3c90618a28565b935060ff1681518110616e5157616e516188bb565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616e9e90618a28565b935060ff1681518110616eb357616eb36188bb565b6020026020010181905250616ec88784617839565b8282616ed381618a28565b935060ff1681518110616ee857616ee86188bb565b602090810291909101015285515115616f945760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616f3a81618a28565b935060ff1681518110616f4f57616f4f6188bb565b6020026020010181905250616f68866000015184617839565b8282616f7381618a28565b935060ff1681518110616f8857616f886188bb565b60200260200101819052505b8560800151156170025760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616fdd81618a28565b935060ff1681518110616ff257616ff26188bb565b6020026020010181905250617068565b84156170685760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261704781618a28565b935060ff168151811061705c5761705c6188bb565b60200260200101819052505b604086015151156171045760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826170b281618a28565b935060ff16815181106170c7576170c76188bb565b602002602001018190525085604001518282806170e390618a28565b935060ff16815181106170f8576170f86188bb565b60200260200101819052505b85606001511561716e5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261714d81618a28565b935060ff1681518110617162576171626188bb565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561718c5761718c61801a565b6040519080825280602002602001820160405280156171bf57816020015b60608152602001906001900390816171aa5790505b50905060005b8260ff168160ff16101561721857838160ff16815181106171e8576171e86188bb565b6020026020010151828260ff1681518110617205576172056188bb565b60209081029190910101526001016171c5565b50979650505050505050565b60408051808201909152600080825260208201528151835110156172495750816138df565b8151835160208501516000929161725f91618007565b61726991906181c4565b6020840151909150600190821461728a575082516020840151819020908220145b80156172a5578351855186906172a19083906181c4565b9052505b50929392505050565b60008082600001516172d285600001518660200151866000015187602001516175f4565b6172dc9190618007565b90505b835160208501516172f09190618007565b8111616c195781617300816191d8565b925050826000015161733785602001518361731b91906181c4565b865161732791906181c4565b83866000015187602001516175f4565b6173419190618007565b90506172df565b6060600061735684846172ae565b617361906001618007565b67ffffffffffffffff8111156173795761737961801a565b6040519080825280602002602001820160405280156173ac57816020015b60608152602001906001900390816173975790505b50905060005b8151811015615621576173c86158438686616bfa565b8282815181106173da576173da6188bb565b60209081029190910101526001016173b2565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617436577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617462576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061748057662386f26fc10000830492506010015b6305f5e1008310617498576305f5e100830492506008015b61271083106174ac57612710830492506004015b606483106174be576064830492506002015b600a83106138df5760010192915050565b60006174db8383617879565b159392505050565b6000808584116175ea5760208411617596576000841561752e57600161750a8660206181c4565b6175159060086191f2565b6175209060026192f0565b61752a91906181c4565b1990505b835181168561753d8989618007565b61754791906181c4565b805190935082165b818114617581578784116175695787945050505050615252565b83617573816192fc565b94505082845116905061754f565b61758b8785618007565b945050505050615252565b8383206175a385886181c4565b6175ad9087618007565b91505b8582106175e8578482208082036175d5576175cb8684618007565b9350505050615252565b6175e06001846181c4565b9250506175b0565b505b5092949350505050565b600083818685116176ff57602085116176ae576000851561764057600161761c8760206181c4565b6176279060086191f2565b6176329060026192f0565b61763c91906181c4565b1990505b845181166000876176518b8b618007565b61765b91906181c4565b855190915083165b8281146176a0578186106176885761767b8b8b618007565b9650505050505050615252565b85617692816191d8565b965050838651169050617663565b859650505050505050615252565b508383206000905b6176c086896181c4565b82116176fd578583208082036176dc5783945050505050615252565b6176e7600185618007565b93505081806176f5906191d8565b9250506176b6565b505b6177098787618007565b979650505050505050565b6040805180820190915260008082526020820152600061774685600001518660200151866000015187602001516175f4565b60208087018051918601919091525190915061776290826181c4565b8352845160208601516177759190618007565b810361778457600085526177b6565b835183516177929190618007565b855186906177a19083906181c4565b90525083516177b09082618007565b60208601525b50909392505050565b602081106177f757815183526177d6602084618007565b92506177e3602083618007565b91506177f06020826181c4565b90506177bf565b600019811561782657600161780d8360206181c4565b617819906101006192f0565b61782391906181c4565b90505b9151835183169219169190911790915250565b606060006178478484613d25565b805160208083015160405193945061786193909101619313565b60405160208183030381529060405291505092915050565b815181516000919081111561788c575081515b6020808501519084015160005b8381101561794557825182518082146179155760001960208710156178f4576001846178c68960206181c4565b6178d09190618007565b6178db9060086191f2565b6178e69060026192f0565b6178f091906181c4565b1990505b81811683821681810391146179125797506138df9650505050505050565b50505b617920602086618007565b945061792d602085618007565b9350505060208161793e9190618007565b9050617899565b50845186516143d3919061936b565b610c9f8061938c83390190565b6112a68061a02b83390190565b611eb98061b2d183390190565b6117838061d18a83390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016179cb6179d0565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016179cb6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617a825783516001600160a01b0316835260209384019390920191600101617a5b565b509095945050505050565b60005b83811015617aa8578181015183820152602001617a90565b50506000910152565b60008151808452617ac9816020860160208601617a8d565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617bd9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617bbf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617ba9848651617ab1565b6020958601959094509290920191600101617b6f565b509197505050602094850194929092019150600101617b05565b50929695505050505050565b600081518084526020840193506020830160005b82811015617c395781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617bf9565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617bd9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617caf6040880182617ab1565b9050602082015191508681036020880152617cca8183617be5565b965050506020938401939190910190600101617c6b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617bd9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617d43858351617ab1565b94506020938401939190910190600101617d09565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617bd9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617dd96040870182617be5565b9550506020938401939190910190600101617d80565b600181811c90821680617e0357607f821691505b602082108103615b1e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a0606085015260008154617e8681617def565b8060a08801526001821660008114617ea55760018114617edf57617f13565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b8901019350617f13565b84600052602060002060005b83811015617f0a5781548a820160c00152600190910190602001617eeb565b890160c0019450505b50505060038401546080860152809250505092915050565b6001600160a01b03861681528460208201526001600160a01b038416604082015260a060608201526000617f6260a0830185617ab1565b8281036080840152617f748185617e3c565b98975050505050505050565b6001600160a01b03831681526040602082015260006152526040830184617e3c565b8381526001600160a01b0383166020820152608060408201526000608082015260a060608201526000615b0460a0830184617e3c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156138df576138df617fd8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f8211156107ae57806000526020600020601f840160051c810160208510156180705750805b601f840160051c820191505b8181101561192c576000815560010161807c565b815167ffffffffffffffff8111156180aa576180aa61801a565b6180be816180b88454617def565b84618049565b6020601f8211600181146180f257600083156180da5750848201515b600019600385901b1c1916600184901b17845561192c565b600084815260208120601f198516915b828110156181225787850151825560209485019460019092019101618102565b50848210156181405786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561816157600080fd5b5051919050565b60006020828403121561817a57600080fd5b8151801515811461395957600080fd5b8481526001600160a01b03841660208201526080604082015260006181b26080830185617ab1565b82810360608401526177098185617e3c565b818103818111156138df576138df617fd8565b6001600160a01b03841681526060602082015260006181f96060830185617ab1565b82810360408401526143d38185617e3c565b6001600160a01b03851681528360208201526001600160a01b03831660408201526080606082015260006143d36080830184617e3c565b6040815260006182556040830185617ab1565b82810360208401526139558185617e3c565b6001600160a01b03831681526040602082015260006152526040830184617ab1565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516182c181601a850160208801617a8d565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516182fe81601c840160208801617a8d565b01601c01949350505050565b6020815260006139596020830184617ab1565b60006020828403121561832f57600080fd5b81516001600160a01b038116811461395957600080fd5b6040516060810167ffffffffffffffff811182821017156183695761836961801a565b60405290565b60008067ffffffffffffffff84111561838a5761838a61801a565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156183b9576183b961801a565b6040528381529050808284018510156183d157600080fd5b615621846020830185617a8d565b600082601f8301126183f057600080fd5b6139598383516020850161836f565b60006020828403121561841157600080fd5b815167ffffffffffffffff81111561842857600080fd5b6138db848285016183df565b60008351618446818460208801617a8d565b83519083019061845a818360208801617a8d565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161849b81601a850160208801617a8d565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516184d8816033840160208801617a8d565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006139596080830184617ab1565b60006020828403121561856757600080fd5b815167ffffffffffffffff81111561857e57600080fd5b8201601f8101841361858f57600080fd5b6138db8482516020840161836f565b600085516185b0818460208a01617a8d565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516185ea816001840160208a01617a8d565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618628816002840160208901617a8d565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161866a816002840160208801617a8d565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006186b56040830184617ab1565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161872c81601f850160208701617a8d565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006187996040830184617ab1565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006187eb6040830184617ab1565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618862816014850160208701617a8d565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b6040815260006188a96040830185617ab1565b82810360208401526139558185617ab1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618922816001850160208701617a8d565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618968818460208701617a8d565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618a1b81604b850160208701617a8d565b91909101604b0192915050565b600060ff821660ff8103618a3e57618a3e617fd8565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618aa5816029850160208701617a8d565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006139596080830184617ab1565b600060208284031215618b0b57600080fd5b815167ffffffffffffffff811115618b2257600080fd5b820160608185031215618b3457600080fd5b618b3c618346565b81518060030b8114618b4d57600080fd5b8152602082015167ffffffffffffffff811115618b6957600080fd5b618b75868285016183df565b602083015250604082015167ffffffffffffffff811115618b9557600080fd5b618ba1868285016183df565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618c0d816021850160208701617a8d565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618df9816021850160208801617a8d565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618e3681602e840160208801617a8d565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618aa5816029850160208701617a8d565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618efe816022850160208701617a8d565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618f4381600e850160208701617a8d565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351619021816018850160208801617a8d565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161905e81601c840160208801617a8d565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619164818460208701617a8d565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f726540000000008152600082516191cb81601c850160208701617a8d565b91909101601c0192915050565b600060001982036191eb576191eb617fd8565b5060010190565b80820281158282048414176138df576138df617fd8565b6001815b60018411156192445780850481111561922857619228617fd8565b600184161561923657908102905b60019390931c92800261920d565b935093915050565b60008261925b575060016138df565b81619268575060006138df565b816001811461927e5760028114619288576192a4565b60019150506138df565b60ff84111561929957619299617fd8565b50506001821b6138df565b5060208310610133831016604e8410600b84101617156192c7575081810a6138df565b6192d46000198484619209565b80600019048211156192e8576192e8617fd8565b029392505050565b6000613959838361924c565b60008161930b5761930b617fd8565b506000190190565b60008351619325818460208801617a8d565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161935f816001840160208801617a8d565b01600101949350505050565b8181036000831280158383131683831282161715616c1957616c19617fd856fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122001ec0ce060384773f3d3389fab7bed652c6b8ee389a7471cce10d00d87a75a0c64736f6c634300081a003360a060405234801561001057600080fd5b50604051611eb9380380611eb983398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611e998339815191528261014c565b50610143600080516020611e998339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b608051611c22610277600039600081816101ca01528181610597015281816105f901528181610a280152610a8a0152611c226000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806385f438c1116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103fc578063e63ab1e91461040f578063eab103df1461043657600080fd5b8063d547741f146103b3578063d936547e146103c6578063d9caed12146103e957600080fd5b80639b19251a116100bd5780639b19251a14610385578063a217fddf14610398578063c709ab6e146103a057600080fd5b806385f438c11461030557806391d148541461032c5780639a5904271461037257600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102d25780635c975abb146102f25780638456cb59146102fd57600080fd5b806336568abe146102905780633f4ba83a146102a3578063570618e1146102ab57600080fd5b8063248a9ca311610176578063248a9ca314610226578063252f07bf146102585780632f2ff15d1461027d57600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610211575b600080fd5b6101b06101ab3660046115ca565b610449565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b61022461021f366004611677565b6104e2565b005b61024a6102343660046116ea565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61022461028b366004611703565b6106e3565b61022461029e366004611703565b61070f565b61022461076d565b61024a7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff166101b0565b6102246107a2565b61024a7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b061033a366004611703565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610224610380366004611733565b6107d4565b610224610393366004611733565b6108a2565b61024a600081565b6102246103ae366004611750565b610973565b6102246103c1366004611703565b610b79565b6101b06103d4366004611733565b60036020526000908152604090205460ff1681565b6102246103f73660046117f3565b610b9f565b61022461040a366004611834565b610ccb565b61024a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102246104443660046118d3565b610f2b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104dc57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104ea610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461051481610fc4565b61051c610fce565b73ffffffffffffffffffffffffffffffffffffffff851660009081526003602052604090205460ff1661057b576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bc73ffffffffffffffffffffffffffffffffffffffff86167f00000000000000000000000000000000000000000000000000000000000000008661100d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106369088908a90899089908990600401611939565b600060405180830381600087803b15801561065057600080fd5b505af1158015610664573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d58686866040516106c993929190611996565b60405180910390a3506106dc6001600055565b5050505050565b600082815260016020819052604090912001546106ff81610fc4565b610709838361108e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461075e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610768828261113b565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61079781610fc4565b61079f6111dc565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107cc81610fc4565b61079f61123b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107fe81610fc4565b73ffffffffffffffffffffffffffffffffffffffff821661084b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6108cc81610fc4565b73ffffffffffffffffffffffffffffffffffffffff8216610919576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61097b610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109a581610fc4565b6109ad610fce565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610a0c576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a4d73ffffffffffffffffffffffffffffffffffffffff87167f00000000000000000000000000000000000000000000000000000000000000008761100d565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610ac99089908b908a908a908a908a90600401611a77565b600060405180830381600087803b158015610ae357600080fd5b505af1158015610af7573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b87878787604051610b5e9493929190611ae8565b60405180910390a350610b716001600055565b505050505050565b60008281526001602081905260409091200154610b9581610fc4565b610709838361113b565b610ba7610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610bd181610fc4565b610bd9610fce565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205460ff16610c38576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5973ffffffffffffffffffffffffffffffffffffffff8416858461100d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610cb891815260200190565b60405180910390a3506107686001600055565b610cd3610f81565b610cdb610fce565b60045474010000000000000000000000000000000000000000900460ff16610d2f576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610d8e576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8616906370a0823190602401602060405180830381865afa158015610dfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1f9190611b14565b9050610e4373ffffffffffffffffffffffffffffffffffffffff8616333087611278565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efb9190611b14565b610f059190611b2d565b8787604051610f18959493929190611b67565b60405180910390a250610b716001600055565b6000610f3681610fc4565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610fbd576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61079f81336112be565b60025460ff161561100b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261076891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061134f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661113357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104dc565b5060006104dc565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561113357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104dc565b6111e46113e5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611243610fce565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112113390565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526107099186918216906323b872dd90608401611047565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661134b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b600061137173ffffffffffffffffffffffffffffffffffffffff841683611421565b905080516000141580156113965750808060200190518101906113949190611ba0565b155b15610768576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401611342565b60025460ff1661100b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061142f83836000611436565b9392505050565b606081471015611474576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611342565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161149d9190611bbd565b60006040518083038185875af1925050503d80600081146114da576040519150601f19603f3d011682016040523d82523d6000602084013e6114df565b606091505b50915091506114ef8683836114f9565b9695505050505050565b60608261150e5761150982611588565b61142f565b8151158015611532575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611581576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401611342565b508061142f565b8051156115985780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156115dc57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461142f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461079f57600080fd5b60008083601f84011261164057600080fd5b50813567ffffffffffffffff81111561165857600080fd5b60208301915083602082850101111561167057600080fd5b9250929050565b60008060008060006080868803121561168f57600080fd5b853561169a8161160c565b945060208601356116aa8161160c565b935060408601359250606086013567ffffffffffffffff8111156116cd57600080fd5b6116d98882890161162e565b969995985093965092949392505050565b6000602082840312156116fc57600080fd5b5035919050565b6000806040838503121561171657600080fd5b8235915060208301356117288161160c565b809150509250929050565b60006020828403121561174557600080fd5b813561142f8161160c565b60008060008060008060a0878903121561176957600080fd5b86356117748161160c565b955060208701356117848161160c565b945060408701359350606087013567ffffffffffffffff8111156117a757600080fd5b6117b389828a0161162e565b909450925050608087013567ffffffffffffffff8111156117d357600080fd5b87016060818a0312156117e557600080fd5b809150509295509295509295565b60008060006060848603121561180857600080fd5b83356118138161160c565b925060208401356118238161160c565b929592945050506040919091013590565b6000806000806000806080878903121561184d57600080fd5b863567ffffffffffffffff81111561186457600080fd5b61187089828a0161162e565b90975095505060208701356118848161160c565b935060408701359250606087013567ffffffffffffffff8111156118a757600080fd5b6118b389828a0161162e565b979a9699509497509295939492505050565b801515811461079f57600080fd5b6000602082840312156118e557600080fd5b813561142f816118c5565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061198b6080830184866118f0565b979650505050505050565b8381526040602082015260006119b06040830184866118f0565b95945050505050565b600081356119c68161160c565b73ffffffffffffffffffffffffffffffffffffffff168352602082013567ffffffffffffffff81168082146119fa57600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112611a3657600080fd5b820160208101903567ffffffffffffffff811115611a5357600080fd5b803603821315611a6257600080fd5b606060408601526119b06060860182846118f0565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a060608201526000611ac960a0830185876118f0565b8281036080840152611adb81856119b9565b9998505050505050505050565b848152606060208201526000611b026060830185876118f0565b828103604084015261198b81856119b9565b600060208284031215611b2657600080fd5b5051919050565b818103818111156104dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606081526000611b7b6060830187896118f0565b8560208401528281036040840152611b948185876118f0565b98975050505050505050565b600060208284031215611bb257600080fd5b815161142f816118c5565b6000825160005b81811015611bde5760208186018101518583015201611bc4565b50600092019182525091905056fea264697066735822122029d8a02c5c60bae7d404d08786de2b2dd6b37e11d10fa76c968c7809ff06f3b864736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161178338038061178383398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516114ab6102d86000396000818161021d01528181610531015281816108290152818161099a01528181610aef0152610c110152600081816101d1015281816104a1015281816105040152818161079901526107fc01526114ab6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c578063057e0f25146101a4575b600080fd5b61018f61018a366004610fd3565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b236600461108e565b610462565b005b6101b76101c7366004611126565b6105fc565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d366004611159565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611172565b6106a1565b6101b7610291366004611172565b6106cc565b6101b7610725565b60015460ff1661018f565b6101b76102b736600461119e565b61075a565b6101b76102ca366004611159565b6108ef565b6101b76102dd366004611159565b61095d565b6101b7610a07565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611172565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611172565b610a39565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610aa1565b61049c610aab565b6104c77f00000000000000000000000000000000000000000000000000000000000000008785610aea565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610563907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161130e565b600060405180830381600087803b15801561057d57600080fd5b505af1158015610591573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c878787866040516105e1949392919061137f565b60405180910390a2506105f46001600055565b505050505050565b610604610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062e81610aa1565b610636610aab565b610641848484610aea565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161068991815260200190565b60405180910390a25061069c6001600055565b505050565b6000828152600260205260409020600101546106bc81610aa1565b6106c68383610c72565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461071b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61069c8282610d72565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074f81610aa1565b610757610e31565b50565b610762610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078c81610aa1565b610794610aab565b6107bf7f00000000000000000000000000000000000000000000000000000000000000008684610aea565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610859907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016113b6565b600060405180830381600087803b15801561087357600080fd5b505af1158015610887573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d8686866040516108d593929190611408565b60405180910390a2506108e86001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61091981610aa1565b610921610aab565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610965610aab565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109f357600080fd5b505af11580156108e8573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3181610aa1565b610757610eae565b600082815260026020526040902060010154610a5481610aa1565b6106c68383610d72565b600260005403610a9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107578133610f07565b60015460ff1615610ae8576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7c9190611422565b610b86908461143b565b1115610bbe576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d083390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e39610f97565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610eb6610aab565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e84565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f93576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ae8576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fe557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461101557600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461104057600080fd5b919050565b60008083601f84011261105757600080fd5b50813567ffffffffffffffff81111561106f57600080fd5b60208301915083602082850101111561108757600080fd5b9250929050565b60008060008060008060a087890312156110a757600080fd5b6110b08761101c565b955060208701359450604087013567ffffffffffffffff8111156110d357600080fd5b6110df89828a01611045565b90955093505060608701359150608087013567ffffffffffffffff81111561110657600080fd5b87016060818a03121561111857600080fd5b809150509295509295509295565b60008060006060848603121561113b57600080fd5b6111448461101c565b95602085013595506040909401359392505050565b60006020828403121561116b57600080fd5b5035919050565b6000806040838503121561118557600080fd5b823591506111956020840161101c565b90509250929050565b6000806000806000608086880312156111b657600080fd5b6111bf8661101c565b945060208601359350604086013567ffffffffffffffff8111156111e257600080fd5b6111ee88828901611045565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff6112678261101c565b1682526000602082013567ffffffffffffffff811680821461128857600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126112c457600080fd5b820160208101903567ffffffffffffffff8111156112e157600080fd5b8036038213156112f057600080fd5b60606040860152611305606086018284611200565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061136060a083018587611200565b82810360808401526113728185611249565b9998505050505050505050565b848152606060208201526000611399606083018587611200565b82810360408401526113ab8185611249565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ab608083018486611200565b838152604060208201526000611305604083018486611200565b60006020828403121561143457600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212208052a0b07c987cb20e29d9c7c23109b8ff8b4b966ca2e18c207a88e5b4d79d4264736f6c634300081a0033a2646970667358221220d22f2e32117bac642a7a8d03450f22bd7b49cba1f225c59268d118dfa72fd49064736f6c634300081a0033", + 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\":\"testDepositERC20ToCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayload\",\"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\":\"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\":\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055620f4240602c55348015603357600080fd5b5061e72f806100436000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063916a17c611610104578063bb93f11e116100a2578063e306a97811610071578063e306a9781461030b578063e85c5a0714610313578063f96c02df1461031b578063fa7626d41461032357600080fd5b8063bb93f11e146102eb578063c13d738f146102f3578063d896e261146102fb578063e20c9f711461030357600080fd5b8063b0464fdc116100de578063b0464fdc146102bb578063b2849063146102c3578063b5508aa9146102cb578063ba414fa6146102d357600080fd5b8063916a17c6146102965780639fd1e597146102ab578063aa030c1c146102b357600080fd5b806330f7c04f1161017c5780636459542a1161014b5780636459542a1461025c57806366d9a9a0146102645780637478fda01461027957806385226c811461028157600080fd5b806330f7c04f1461023c5780633e5e3c23146102445780633f7286f41461024c57806351da903d1461025457600080fd5b80630a9254e4116101b85780630a9254e4146101f95780631806a9a5146102015780631ed7831c146102095780632ade38801461022757600080fd5b806305a898e2146101df57806306978ca3146101e95780630724d8e3146101f1575b600080fd5b6101e7610330565b005b6101e76104e7565b6101e76105ff565b6101e76107b3565b6101e761121f565b61021161131c565b60405161021e9190617a41565b60405180910390f35b61022f61137e565b60405161021e9190617add565b6101e76114c0565b610211611933565b610211611993565b6101e76119f3565b6101e7611b82565b61026c611f7b565b60405161021e9190617c43565b6101e76120fd565b610289612200565b60405161021e9190617ce1565b61029e6122d0565b60405161021e9190617d58565b6101e76123cb565b6101e76125ed565b61029e6127aa565b6101e76128a5565b610289612b39565b6102db612c09565b604051901515815260200161021e565b6101e7612cdd565b6101e7612e60565b6101e7613012565b61021161318d565b6101e76131ed565b6101e76134b0565b6101e7613731565b601f546102db9060ff1681565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390610428906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b15801561044257600080fd5b505af1158015610456573d6000803e3d6000fd5b50506020546023546040517fd09e3b780000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063d09e3b7893506104b19260009288929116908790602890600401617f2b565b600060405180830381600087803b1580156104cb57600080fd5b505af11580156104df573d6000803e3d6000fd5b505050505050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e73756666696369656e74455448416d6f756e7400000000000000000000006044820152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561057d57600080fd5b505af1158015610591573d6000803e3d6000fd5b50506020546026546040517f726ac97c0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063726ac97c935085926105e6921690602890600401617f80565b6000604051808303818588803b1580156104cb57600080fd5b6027546020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039182166084820152620186a092919091163190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561069b57600080fd5b505af11580156106af573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c906106fe908690600090602890617fa2565b60405180910390a36020546026546040517f726ac97c0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263726ac97c9286926107599290911690602890600401617f80565b6000604051808303818588803b15801561077257600080fd5b505af1158015610786573d6000803e3d6000fd5b50506027546001600160a01b03163192506107ae91506107a890508484618007565b82613847565b505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805490911661567817905560405161080590617954565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561088a573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560275460405191169081906108d390617961565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610906573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190861694810194909452604484019290925290921660648201526109f7919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526138c6565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155602754602554604051929391821692911690610a839061796e565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610abf573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556020546024546027546025546040519385169492831693918316921690610b1a9061797b565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610b5e573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fca669fa700000000000000000000000000000000000000000000000000000000815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610bfc57600080fd5b505af1158015610c10573d6000803e3d6000fd5b5050602480546027546022546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b158015610c8357600080fd5b505af1158015610c97573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d1b57600080fd5b505af1158015610d2f573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610da557600080fd5b505af1158015610db9573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610e1f57600080fd5b505af1158015610e33573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610e9957600080fd5b505af1158015610ead573d6000803e3d6000fd5b50506021546023546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b158015610f1357600080fd5b505af1158015610f27573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f8957600080fd5b505af1158015610f9d573d6000803e3d6000fd5b5050602354602554602c546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152911692506340c10f199150604401600060405180830381600087803b15801561100e57600080fd5b505af1158015611022573d6000803e3d6000fd5b50506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561109857600080fd5b505af11580156110ac573d6000803e3d6000fd5b5050602254602554602c546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152600060448201529116925063106e62909150606401600060405180830381600087803b15801561112457600080fd5b505af1158015611138573d6000803e3d6000fd5b50506040805160a08101825261032180825260016020808401918252838501928352845190810190945260008085526060840185905260808401528251602880549251151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009093166001600160a01b0392831617929092178255915160298054919093167fffffffffffffffffffffffff000000000000000000000000000000000000000091909116179091559093509150602a9061120f9082618090565b5060808201518160030155905050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b1580156112b557600080fd5b505af11580156112c9573d6000803e3d6000fd5b50506020546040517f726ac97c0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063726ac97c915083906105e690600090602890600401617f80565b6060601680548060200260200160405190810160405280929190818152602001828054801561137457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611356575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156114b757600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156114a057838290600052602060002001805461141390617def565b80601f016020809104026020016040519081016040528092919081815260200182805461143f90617def565b801561148c5780601f106114615761010080835404028352916020019161148c565b820191906000526020600020905b81548152906001019060200180831161146f57829003601f168201915b5050505050815260200190600101906113f4565b5050505081525050815260200190600101906113a2565b50505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa15801561152c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611550919061814f565b905061155d600082613847565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101879052929350169063095ea7b3906044016020604051808303816000875af1158015611640573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116649190618168565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156116f357600080fd5b505af1158015611707573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c9261175d92899290911690879060289061818a565b60405180910390a36020546026546023546040517fd09e3b780000000000000000000000000000000000000000000000000000000081526001600160a01b039384169363d09e3b78936117c193908216928992909116908790602890600401617f2b565b600060405180830381600087803b1580156117db57600080fd5b505af11580156117ef573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561185b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187f919061814f565b905061188b8482613847565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156118f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611919919061814f565b905061192c85602c546107a891906181c4565b5050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015611374576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611356575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611374576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611356575050505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611aed57600080fd5b505af1158015611b01573d6000803e3d6000fd5b50506020546040517f1becceb40000000000000000000000000000000000000000000000000000000081526001600160a01b039091169250631becceb49150611b549060009085906028906004016181d7565b600060405180830381600087803b158015611b6e57600080fd5b505af115801561192c573d6000803e3d6000fd5b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa158015611bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c12919061814f565b9050611c1f600082613847565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af1158015611c8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb19190618168565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611d4057600080fd5b505af1158015611d54573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c92611da892889290911690602890617fa2565b60405180910390a36020546026546023546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b039384169363102614b093611e0a939082169288929091169060289060040161820b565b600060405180830381600087803b158015611e2457600080fd5b505af1158015611e38573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611ea4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec8919061814f565b9050611ed48382613847565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f62919061814f565b9050611f7584602c546107a891906181c4565b50505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156114b75783829060005260206000209060020201604051806040016040529081600082018054611fd290617def565b80601f0160208091040260200160405190810160405280929190818152602001828054611ffe90617def565b801561204b5780601f106120205761010080835404028352916020019161204b565b820191906000526020600020905b81548152906001019060200180831161202e57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156120e557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116120925790505b50505050508152505081526020019060010190611f9f565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561219357600080fd5b505af11580156121a7573d6000803e3d6000fd5b50506020546023546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063102614b09350611b5492600092879291169060289060040161820b565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156114b757838290600052602060002001805461224390617def565b80601f016020809104026020016040519081016040528092919081815260200182805461226f90617def565b80156122bc5780601f10612291576101008083540402835291602001916122bc565b820191906000526020600020905b81548152906001019060200180831161229f57829003601f168201915b505050505081526020019060010190612224565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156114b75760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156123b357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116123605790505b505050505081525050815260200190600101906122f4565b6027546026546040516001600160a01b039182166024820152620186a09291909116319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156124dc57600080fd5b505af11580156124f0573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c90612541908790600090879060289061818a565b60405180910390a36020546026546040517f744b9b8b0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263744b9b8b92879261259e929091169086906028906004016181d7565b6000604051808303818588803b1580156125b757600080fd5b505af11580156125cb573d6000803e3d6000fd5b50506027546001600160a01b0316319250611f7591506107a890508585618007565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156126f057600080fd5b505af1158015612704573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97490612750908590602890618242565b60405180910390a36020546026546040517f1becceb40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692631becceb492611b549291169085906028906004016181d7565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156114b75760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561288d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161283a5790505b505050505081525050815260200190600101906127ce565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a06024820181905292919091169063095ea7b3906044016020604051808303816000875af115801561291a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293e9190618168565b506025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156129b157600080fd5b505af11580156129c5573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b158015612a2b57600080fd5b505af1158015612a3f573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b158015612ac957600080fd5b505af1158015612add573d6000803e3d6000fd5b50506020546026546023546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063102614b09450611b5493928316928792169060289060040161820b565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156114b7578382906000526020600020018054612b7c90617def565b80601f0160208091040260200160405190810160405280929190818152602001828054612ba890617def565b8015612bf55780601f10612bca57610100808354040283529160200191612bf5565b820191906000526020600020905b815481529060010190602001808311612bd857829003601f168201915b505050505081526020019060010190612b5d565b60085460009060ff1615612c21575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd6919061814f565b1415905090565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612dd49060040160208082526017908201527f496e73756666696369656e744552433230416d6f756e74000000000000000000604082015260600190565b600060405180830381600087803b158015612dee57600080fd5b505af1158015612e02573d6000803e3d6000fd5b50506020546026546023546040517fd09e3b780000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063d09e3b7894506104b19392831692889216908790602890600401617f2b565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612f579060040160208082526015908201527f496e73756666696369656e74455448416d6f756e740000000000000000000000604082015260600190565b600060405180830381600087803b158015612f7157600080fd5b505af1158015612f85573d6000803e3d6000fd5b50506020546026546040517f744b9b8b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063744b9b8b93508692612fdc92169086906028906004016181d7565b6000604051808303818588803b158015612ff557600080fd5b505af1158015613009573d6000803e3d6000fd5b50505050505050565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb39061310a906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b15801561312457600080fd5b505af1158015613138573d6000803e3d6000fd5b50506020546040517f744b9b8b0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063744b9b8b91508490612fdc9060009086906028906004016181d7565b60606015805480602002602001604051908101604052809291908181526020018280548015611374576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611356575050505050905090565b602480546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a093810184905291169063095ea7b3906044016020604051808303816000875af115801561325f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132839190618168565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561331257600080fd5b505af1158015613326573d6000803e3d6000fd5b50506026546025546024546040516001600160a01b03938416955091831693507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c9261337a92879290911690602890617fa2565b60405180910390a36020546026546024546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b039384169363102614b0936133dc939082169287929091169060289060040161820b565b600060405180830381600087803b1580156133f657600080fd5b505af115801561340a573d6000803e3d6000fd5b5050602480546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613475573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613499919061814f565b90506134ac82602c546107a891906181c4565b5050565b6026546040516001600160a01b039091166024820152620186a09060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052929350169063095ea7b3906044016020604051808303816000875af1158015613598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135bc9190618168565b506025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561362f57600080fd5b505af1158015613643573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b1580156136a957600080fd5b505af11580156136bd573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401612dd4565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260006024820181905292919091169063095ea7b3906044016020604051808303816000875af11580156137a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c89190618168565b506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e73756666696369656e744552433230416d6f756e740000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401612aaf565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156138b257600080fd5b505afa1580156104df573d6000803e3d6000fd5b60006138d0617988565b6138db8484836138e5565b9150505b92915050565b6000806138f28584613960565b90506139556040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613940929190618267565b6040516020818303038152906040528561396c565b9150505b9392505050565b6000613959838361399a565b60c081015151600090156139905761398984848460c001516139b5565b9050613959565b6139898484613b5b565b60006139a68383613c46565b6139598383602001518461396c565b6000806139c0613c52565b905060006139ce8683613d25565b905060006139e582606001518360200151856141cb565b905060006139f5838389896143dd565b90506000613a028261525a565b602081015181519192509060030b15613a7557898260400151604051602001613a2c929190618289565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613a6c9160040161830a565b60405180910390fd5b6000613ab86040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615429565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613b0b90849060040161830a565b602060405180830381865afa158015613b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b4c919061831d565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613bb090879060040161830a565b600060405180830381865afa158015613bcd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bf591908101906183ff565b90506000613c238285604051602001613c0f929190618434565b604051602081830303815290604052615629565b90506001600160a01b0381166138db578484604051602001613a2c929190618463565b6134ac8282600061563c565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613cd990849060040161850e565b600060405180830381865afa158015613cf6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d1e9190810190618555565b9250505090565b613d576040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613da26040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613dab8561573f565b60208201526000613dbb86615b24565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613dfd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e259190810190618555565b86838560200151604051602001613e3f949392919061859e565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613e9790859060040161830a565b600060405180830381865afa158015613eb4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613edc9190810190618555565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613f249084906004016186a2565b602060405180830381865afa158015613f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f659190618168565b613f7a5781604051602001613a2c91906186f4565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890613fbf908490600401618786565b600060405180830381865afa158015613fdc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140049190810190618555565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061404b9084906004016187d8565b602060405180830381865afa158015614068573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408c9190618168565b15614121576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906140d69084906004016187d8565b600060405180830381865afa1580156140f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261411b9190810190618555565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001614146919061882a565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614172929190618896565b600060405180830381865afa15801561418f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141b79190810190618555565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816141e75790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614247576142476188bb565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061429b5761429b6188bb565b6020026020010181905250846040516020016142b791906188ea565b604051602081830303815290604052816002815181106142d9576142d96188bb565b6020026020010181905250826040516020016142f59190618956565b60405160208183030381529060405281600381518110614317576143176188bb565b6020026020010181905250600061432d8261525a565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506143be9060408051808201825260008082526020918201528151808301909252845182528085019082015290615da7565b6143d35785604051602001613a2c9190618997565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561442d565b511590565b6145a1578260200151156144e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613a6c565b8260c00151156145a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613a6c565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816145ba57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061461590618a28565b935060ff168151811061462a5761462a6188bb565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161467b9190618a47565b60405160208183030381529060405282828061469690618a28565b935060ff16815181106146ab576146ab6188bb565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806146f890618a28565b935060ff168151811061470d5761470d6188bb565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061475a90618a28565b935060ff168151811061476f5761476f6188bb565b6020026020010181905250876020015182828061478b90618a28565b935060ff16815181106147a0576147a06188bb565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806147ed90618a28565b935060ff1681518110614802576148026188bb565b60209081029190910101528751828261481a81618a28565b935060ff168151811061482f5761482f6188bb565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061487c90618a28565b935060ff1681518110614891576148916188bb565b60200260200101819052506148a546615e08565b82826148b081618a28565b935060ff16815181106148c5576148c56188bb565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061491290618a28565b935060ff1681518110614927576149276188bb565b60200260200101819052508682828061493f90618a28565b935060ff1681518110614954576149546188bb565b6020908102919091010152855115614a7b5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826149a581618a28565b935060ff16815181106149ba576149ba6188bb565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614a0a90899060040161830a565b600060405180830381865afa158015614a27573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614a4f9190810190618555565b8282614a5a81618a28565b935060ff1681518110614a6f57614a6f6188bb565b60200260200101819052505b846020015115614b4b5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614ac481618a28565b935060ff1681518110614ad957614ad96188bb565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614b2690618a28565b935060ff1681518110614b3b57614b3b6188bb565b6020026020010181905250614d12565b614b836144288660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614c165760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614bc681618a28565b935060ff1681518110614bdb57614bdb6188bb565b60200260200101819052508460a00151604051602001614bfb91906188ea565b604051602081830303815290604052828280614b2690618a28565b8460c00151158015614c59575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614c5790511590565b155b15614d125760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614c9d81618a28565b935060ff1681518110614cb257614cb26188bb565b6020026020010181905250614cc688615ea8565b604051602001614cd691906188ea565b604051602081830303815290604052828280614cf190618a28565b935060ff1681518110614d0657614d066188bb565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614d4690511590565b614ddb5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614d8981618a28565b935060ff1681518110614d9e57614d9e6188bb565b60200260200101819052508460400151828280614dba90618a28565b935060ff1681518110614dcf57614dcf6188bb565b60200260200101819052505b606085015115614efc5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614e2481618a28565b935060ff1681518110614e3957614e396188bb565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614ea8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614ed09190810190618555565b8282614edb81618a28565b935060ff1681518110614ef057614ef06188bb565b60200260200101819052505b60e08501515115614fa35760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614f4681618a28565b935060ff1681518110614f5b57614f5b6188bb565b6020026020010181905250614f778560e0015160000151615e08565b8282614f8281618a28565b935060ff1681518110614f9757614f976188bb565b60200260200101819052505b60e0850151602001511561504d5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282614ff081618a28565b935060ff1681518110615005576150056188bb565b60200260200101819052506150218560e0015160200151615e08565b828261502c81618a28565b935060ff1681518110615041576150416188bb565b60200260200101819052505b60e085015160400151156150f75760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261509a81618a28565b935060ff16815181106150af576150af6188bb565b60200260200101819052506150cb8560e0015160400151615e08565b82826150d681618a28565b935060ff16815181106150eb576150eb6188bb565b60200260200101819052505b60e085015160600151156151a15760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261514481618a28565b935060ff1681518110615159576151596188bb565b60200260200101819052506151758560e0015160600151615e08565b828261518081618a28565b935060ff1681518110615195576151956188bb565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156151bf576151bf61801a565b6040519080825280602002602001820160405280156151f257816020015b60608152602001906001900390816151dd5790505b50905060005b8260ff168160ff16101561524b57838160ff168151811061521b5761521b6188bb565b6020026020010151828260ff1681518110615238576152386188bb565b60209081029190910101526001016151f8565b5093505050505b949350505050565b6152816040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161530791869101618ab2565b600060405180830381865afa158015615324573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261534c9190810190618555565b9050600061535a8683616997565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161538a9190617ce1565b6000604051808303816000875af11580156153a9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526153d19190810190618af9565b805190915060030b158015906153ea5750602081015151155b80156153f95750604081015151155b156143d35781600081518110615411576154116188bb565b6020026020010151604051602001613a2c9190618baf565b6060600061545e8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506154959082905b90616aec565b156155f25760006155128261550c846155066154d88a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616b13565b90616b75565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615576908290616aec565b156155e057604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526155dd905b8290616bfa565b90505b6155e981616c20565b92505050613959565b821561560b578484604051602001613a2c929190618d9b565b5050604080516020810190915260008152613959565b509392505050565b6000808251602084016000f09392505050565b8160a001511561564b57505050565b6000615658848484616c89565b905060006156658261525a565b602081015181519192509060030b1580156157015750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157019060408051808201825260008082526020918201528151808301909252845182528085019082015261548f565b1561570e57505050505050565b6040820151511561572e578160400151604051602001613a2c9190618e42565b80604051602001613a2c9190618ea0565b606060006157748360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506157d9905b8290615da7565b1561584857604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261395990615843908390617224565b616c20565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158aa905b82906172ae565b60010361597757604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615910906155d6565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261395990615843905b8390616bfa565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159d6906157d2565b15615b0d57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615a3e908390617348565b905060008160018351615a5191906181c4565b81518110615a6157615a616188bb565b60200260200101519050615b04615843615ad76040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617224565b95945050505050565b82604051602001613a2c9190618f0b565b50919050565b60606000615b598360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615bbb906157d2565b15615bc95761395981616c20565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615c28906158a3565b600103615c9257604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526139599061584390615970565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615cf1906157d2565b15615b0d57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615d59908390617348565b9050600181511115615d95578060028251615d7491906181c4565b81518110615d8457615d846188bb565b602002602001015192505050919050565b5082604051602001613a2c9190618f0b565b805182516000911115615dbc575060006138df565b81518351602085015160009291615dd291618007565b615ddc91906181c4565b905082602001518103615df35760019150506138df565b82516020840151819020912014905092915050565b60606000615e15836173ed565b600101905060008167ffffffffffffffff811115615e3557615e3561801a565b6040519080825280601f01601f191660200182016040528015615e5f576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615e6957509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615f34905b82906174cf565b15615f7457505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fd390615f2d565b1561601357505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261607290615f2d565b156160b257505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261611190615f2d565b806161765750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261617690615f2d565b156161b657505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261621590615f2d565b8061627a5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261627a90615f2d565b156162ba57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261631990615f2d565b8061637e5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261637e90615f2d565b156163be57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261641d90615f2d565b806164825750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261648290615f2d565b156164c257505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261652190615f2d565b1561656157505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165c090615f2d565b1561660057505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261665f90615f2d565b1561669f57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166fe90615f2d565b1561673e57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261679d90615f2d565b156167dd57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261683c90615f2d565b806168a15750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168a190615f2d565b156168e157505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261694090615f2d565b1561698057505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613a2c9290602001618fe9565b60608060005b8451811015616a2257818582815181106169b9576169b96188bb565b60200260200101516040516020016169d2929190618434565b6040516020818303038152906040529150600185516169f191906181c4565b8114616a1a5781604051602001616a089190619152565b60405160208183030381529060405291505b60010161699d565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616a3b5790505090508381600081518110616a6657616a666188bb565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616aba57616aba6188bb565b60200260200101819052508181600281518110616ad957616ad96188bb565b6020908102919091010152949350505050565b6020808301518351835192840151600093616b0a92918491906174e3565b14159392505050565b60408051808201909152600080825260208201526000616b4584600001518560200151856000015186602001516175f4565b9050836020015181616b5791906181c4565b84518590616b669083906181c4565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616b9a5750816138df565b6020808301519084015160019114616bc15750815160208481015190840151829020919020145b8015616bf257825184518590616bd89083906181c4565b9052508251602085018051616bee908390618007565b9052505b509192915050565b6040805180820190915260008082526020820152616c19838383617714565b5092915050565b60606000826000015167ffffffffffffffff811115616c4157616c4161801a565b6040519080825280601f01601f191660200182016040528015616c6b576020820181803683370190505b5090506000602082019050616c1981856020015186600001516177bf565b60606000616c95613c52565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616cb257905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616d0d90618a28565b935060ff1681518110616d2257616d226188bb565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616d739190619193565b604051602081830303815290604052828280616d8e90618a28565b935060ff1681518110616da357616da36188bb565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616df090618a28565b935060ff1681518110616e0557616e056188bb565b602002602001018190525082604051602001616e219190618956565b604051602081830303815290604052828280616e3c90618a28565b935060ff1681518110616e5157616e516188bb565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616e9e90618a28565b935060ff1681518110616eb357616eb36188bb565b6020026020010181905250616ec88784617839565b8282616ed381618a28565b935060ff1681518110616ee857616ee86188bb565b602090810291909101015285515115616f945760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616f3a81618a28565b935060ff1681518110616f4f57616f4f6188bb565b6020026020010181905250616f68866000015184617839565b8282616f7381618a28565b935060ff1681518110616f8857616f886188bb565b60200260200101819052505b8560800151156170025760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282616fdd81618a28565b935060ff1681518110616ff257616ff26188bb565b6020026020010181905250617068565b84156170685760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261704781618a28565b935060ff168151811061705c5761705c6188bb565b60200260200101819052505b604086015151156171045760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826170b281618a28565b935060ff16815181106170c7576170c76188bb565b602002602001018190525085604001518282806170e390618a28565b935060ff16815181106170f8576170f86188bb565b60200260200101819052505b85606001511561716e5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261714d81618a28565b935060ff1681518110617162576171626188bb565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561718c5761718c61801a565b6040519080825280602002602001820160405280156171bf57816020015b60608152602001906001900390816171aa5790505b50905060005b8260ff168160ff16101561721857838160ff16815181106171e8576171e86188bb565b6020026020010151828260ff1681518110617205576172056188bb565b60209081029190910101526001016171c5565b50979650505050505050565b60408051808201909152600080825260208201528151835110156172495750816138df565b8151835160208501516000929161725f91618007565b61726991906181c4565b6020840151909150600190821461728a575082516020840151819020908220145b80156172a5578351855186906172a19083906181c4565b9052505b50929392505050565b60008082600001516172d285600001518660200151866000015187602001516175f4565b6172dc9190618007565b90505b835160208501516172f09190618007565b8111616c195781617300816191d8565b925050826000015161733785602001518361731b91906181c4565b865161732791906181c4565b83866000015187602001516175f4565b6173419190618007565b90506172df565b6060600061735684846172ae565b617361906001618007565b67ffffffffffffffff8111156173795761737961801a565b6040519080825280602002602001820160405280156173ac57816020015b60608152602001906001900390816173975790505b50905060005b8151811015615621576173c86158438686616bfa565b8282815181106173da576173da6188bb565b60209081029190910101526001016173b2565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617436577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617462576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061748057662386f26fc10000830492506010015b6305f5e1008310617498576305f5e100830492506008015b61271083106174ac57612710830492506004015b606483106174be576064830492506002015b600a83106138df5760010192915050565b60006174db8383617879565b159392505050565b6000808584116175ea5760208411617596576000841561752e57600161750a8660206181c4565b6175159060086191f2565b6175209060026192f0565b61752a91906181c4565b1990505b835181168561753d8989618007565b61754791906181c4565b805190935082165b818114617581578784116175695787945050505050615252565b83617573816192fc565b94505082845116905061754f565b61758b8785618007565b945050505050615252565b8383206175a385886181c4565b6175ad9087618007565b91505b8582106175e8578482208082036175d5576175cb8684618007565b9350505050615252565b6175e06001846181c4565b9250506175b0565b505b5092949350505050565b600083818685116176ff57602085116176ae576000851561764057600161761c8760206181c4565b6176279060086191f2565b6176329060026192f0565b61763c91906181c4565b1990505b845181166000876176518b8b618007565b61765b91906181c4565b855190915083165b8281146176a0578186106176885761767b8b8b618007565b9650505050505050615252565b85617692816191d8565b965050838651169050617663565b859650505050505050615252565b508383206000905b6176c086896181c4565b82116176fd578583208082036176dc5783945050505050615252565b6176e7600185618007565b93505081806176f5906191d8565b9250506176b6565b505b6177098787618007565b979650505050505050565b6040805180820190915260008082526020820152600061774685600001518660200151866000015187602001516175f4565b60208087018051918601919091525190915061776290826181c4565b8352845160208601516177759190618007565b810361778457600085526177b6565b835183516177929190618007565b855186906177a19083906181c4565b90525083516177b09082618007565b60208601525b50909392505050565b602081106177f757815183526177d6602084618007565b92506177e3602083618007565b91506177f06020826181c4565b90506177bf565b600019811561782657600161780d8360206181c4565b617819906101006192f0565b61782391906181c4565b90505b9151835183169219169190911790915250565b606060006178478484613d25565b805160208083015160405193945061786193909101619313565b60405160208183030381529060405291505092915050565b815181516000919081111561788c575081515b6020808501519084015160005b8381101561794557825182518082146179155760001960208710156178f4576001846178c68960206181c4565b6178d09190618007565b6178db9060086191f2565b6178e69060026192f0565b6178f091906181c4565b1990505b81811683821681810391146179125797506138df9650505050505050565b50505b617920602086618007565b945061792d602085618007565b9350505060208161793e9190618007565b9050617899565b50845186516143d3919061936b565b610c9f8061938c83390190565b6112a68061a02b83390190565b611c7f8061b2d183390190565b6117aa8061cf5083390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016179cb6179d0565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016179cb6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617a825783516001600160a01b0316835260209384019390920191600101617a5b565b509095945050505050565b60005b83811015617aa8578181015183820152602001617a90565b50506000910152565b60008151808452617ac9816020860160208601617a8d565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617bd9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617bbf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617ba9848651617ab1565b6020958601959094509290920191600101617b6f565b509197505050602094850194929092019150600101617b05565b50929695505050505050565b600081518084526020840193506020830160005b82811015617c395781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617bf9565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617bd9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617caf6040880182617ab1565b9050602082015191508681036020880152617cca8183617be5565b965050506020938401939190910190600101617c6b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617bd9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617d43858351617ab1565b94506020938401939190910190600101617d09565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617bd9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617dd96040870182617be5565b9550506020938401939190910190600101617d80565b600181811c90821680617e0357607f821691505b602082108103615b1e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a0606085015260008154617e8681617def565b8060a08801526001821660008114617ea55760018114617edf57617f13565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b8901019350617f13565b84600052602060002060005b83811015617f0a5781548a820160c00152600190910190602001617eeb565b890160c0019450505b50505060038401546080860152809250505092915050565b6001600160a01b03861681528460208201526001600160a01b038416604082015260a060608201526000617f6260a0830185617ab1565b8281036080840152617f748185617e3c565b98975050505050505050565b6001600160a01b03831681526040602082015260006152526040830184617e3c565b8381526001600160a01b0383166020820152608060408201526000608082015260a060608201526000615b0460a0830184617e3c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156138df576138df617fd8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f8211156107ae57806000526020600020601f840160051c810160208510156180705750805b601f840160051c820191505b8181101561192c576000815560010161807c565b815167ffffffffffffffff8111156180aa576180aa61801a565b6180be816180b88454617def565b84618049565b6020601f8211600181146180f257600083156180da5750848201515b600019600385901b1c1916600184901b17845561192c565b600084815260208120601f198516915b828110156181225787850151825560209485019460019092019101618102565b50848210156181405786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561816157600080fd5b5051919050565b60006020828403121561817a57600080fd5b8151801515811461395957600080fd5b8481526001600160a01b03841660208201526080604082015260006181b26080830185617ab1565b82810360608401526177098185617e3c565b818103818111156138df576138df617fd8565b6001600160a01b03841681526060602082015260006181f96060830185617ab1565b82810360408401526143d38185617e3c565b6001600160a01b03851681528360208201526001600160a01b03831660408201526080606082015260006143d36080830184617e3c565b6040815260006182556040830185617ab1565b82810360208401526139558185617e3c565b6001600160a01b03831681526040602082015260006152526040830184617ab1565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516182c181601a850160208801617a8d565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516182fe81601c840160208801617a8d565b01601c01949350505050565b6020815260006139596020830184617ab1565b60006020828403121561832f57600080fd5b81516001600160a01b038116811461395957600080fd5b6040516060810167ffffffffffffffff811182821017156183695761836961801a565b60405290565b60008067ffffffffffffffff84111561838a5761838a61801a565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156183b9576183b961801a565b6040528381529050808284018510156183d157600080fd5b615621846020830185617a8d565b600082601f8301126183f057600080fd5b6139598383516020850161836f565b60006020828403121561841157600080fd5b815167ffffffffffffffff81111561842857600080fd5b6138db848285016183df565b60008351618446818460208801617a8d565b83519083019061845a818360208801617a8d565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161849b81601a850160208801617a8d565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516184d8816033840160208801617a8d565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006139596080830184617ab1565b60006020828403121561856757600080fd5b815167ffffffffffffffff81111561857e57600080fd5b8201601f8101841361858f57600080fd5b6138db8482516020840161836f565b600085516185b0818460208a01617a8d565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516185ea816001840160208a01617a8d565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618628816002840160208901617a8d565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161866a816002840160208801617a8d565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006186b56040830184617ab1565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161872c81601f850160208701617a8d565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006187996040830184617ab1565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006187eb6040830184617ab1565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618862816014850160208701617a8d565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b6040815260006188a96040830185617ab1565b82810360208401526139558185617ab1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618922816001850160208701617a8d565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618968818460208701617a8d565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618a1b81604b850160208701617a8d565b91909101604b0192915050565b600060ff821660ff8103618a3e57618a3e617fd8565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618aa5816029850160208701617a8d565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006139596080830184617ab1565b600060208284031215618b0b57600080fd5b815167ffffffffffffffff811115618b2257600080fd5b820160608185031215618b3457600080fd5b618b3c618346565b81518060030b8114618b4d57600080fd5b8152602082015167ffffffffffffffff811115618b6957600080fd5b618b75868285016183df565b602083015250604082015167ffffffffffffffff811115618b9557600080fd5b618ba1868285016183df565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618c0d816021850160208701617a8d565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351618df9816021850160208801617a8d565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351618e3681602e840160208801617a8d565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618aa5816029850160208701617a8d565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251618efe816022850160208701617a8d565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251618f4381600e850160208701617a8d565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351619021816018850160208801617a8d565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161905e81601c840160208801617a8d565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619164818460208701617a8d565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f726540000000008152600082516191cb81601c850160208701617a8d565b91909101601c0192915050565b600060001982036191eb576191eb617fd8565b5060010190565b80820281158282048414176138df576138df617fd8565b6001815b60018411156192445780850481111561922857619228617fd8565b600184161561923657908102905b60019390931c92800261920d565b935093915050565b60008261925b575060016138df565b81619268575060006138df565b816001811461927e5760028114619288576192a4565b60019150506138df565b60ff84111561929957619299617fd8565b50506001821b6138df565b5060208310610133831016604e8410600b84101617156192c7575081810a6138df565b6192d46000198484619209565b80600019048211156192e8576192e8617fd8565b029392505050565b6000613959838361924c565b60008161930b5761930b617fd8565b506000190190565b60008351619325818460208801617a8d565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161935f816001840160208801617a8d565b01600101949350505050565b8181036000831280158383131683831282161715616c1957616c19617fd856fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122001ec0ce060384773f3d3389fab7bed652c6b8ee389a7471cce10d00d87a75a0c64736f6c634300081a003360a060405234801561001057600080fd5b50604051611c7f380380611c7f83398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611c5f8339815191528261014c565b50610143600080516020611c5f8339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b6080516119e8610277600039600081816101ca01528181610556015281816105ab015281816107c8015261081d01526119e86000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638456cb59116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103d5578063e63ab1e9146103e8578063eab103df1461040f57600080fd5b8063d547741f1461038c578063d936547e1461039f578063d9caed12146103c257600080fd5b80639a590427116100bd5780639a5904271461035e5780639b19251a14610371578063a217fddf1461038457600080fd5b80638456cb59146102f657806385f438c1146102fe57806391d148541461032557600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102c55780635c975abb146102d85780635eb72e15146102e357600080fd5b806336568abe146102835780633f4ba83a14610296578063570618e11461029e57600080fd5b8063248a9ca311610176578063248a9ca314610219578063252f07bf1461024b5780632f2ff15d1461027057600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610204575b600080fd5b6101b06101ab3660046113c2565b610422565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bc565b610217610212366004611462565b6104bb565b005b61023d6102273660046114d5565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61021761027e3660046114ee565b61067b565b6102176102913660046114ee565b6106a7565b6102176106f8565b61023d7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec906001600160a01b031681565b60025460ff166101b0565b6102176102f136600461151e565b61072d565b6102176108f2565b61023d7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b06103333660046114ee565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61021761036c3660046115c1565b610924565b61021761037f3660046115c1565b6109d8565b61023d600081565b61021761039a3660046114ee565b610a8f565b6101b06103ad3660046115c1565b60036020526000908152604090205460ff1681565b6102176103d03660046115de565b610ab5565b6102176103e336600461161f565b610bad565b61023d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61021761041d3660046116be565b610dd9565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104b557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104c3610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104ed81610e72565b6104f5610e7c565b6001600160a01b03851660009081526003602052604090205460ff16610547576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61057b6001600160a01b0386167f000000000000000000000000000000000000000000000000000000000000000086610ebb565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906105e89088908a90899089908990600401611724565b600060405180830381600087803b15801561060257600080fd5b505af1158015610616573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161066193929190611767565b60405180910390a3506106746001600055565b5050505050565b6000828152600160208190526040909120015461069781610e72565b6106a18383610f2f565b50505050565b6001600160a01b03811633146106e9576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106f38282610fc2565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61072281610e72565b61072a611049565b50565b610735610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461075f81610e72565b610767610e7c565b6001600160a01b03861660009081526003602052604090205460ff166107b9576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107ed6001600160a01b0387167f000000000000000000000000000000000000000000000000000000000000000087610ebb565b6040517f36c99f3b0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b9061085c9089908b908a908a908a908a90600401611857565b600060405180830381600087803b15801561087657600080fd5b505af115801561088a573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37878787876040516108d794939291906118ae565b60405180910390a3506108ea6001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61091c81610e72565b61072a61109b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61094e81610e72565b6001600160a01b03821661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a0281610e72565b6001600160a01b038216610a42576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610aab81610e72565b6106a18383610fc2565b610abd610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ae781610e72565b610aef610e7c565b6001600160a01b03831660009081526003602052604090205460ff16610b41576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b556001600160a01b0384168584610ebb565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610b9a91815260200190565b60405180910390a3506106f36001600055565b610bb5610e2f565b610bbd610e7c565b60045474010000000000000000000000000000000000000000900460ff16610c11576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610c63576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce791906118da565b9050610cfe6001600160a01b0386163330876110d8565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610d85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da991906118da565b610db391906118f3565b8787604051610dc695949392919061192d565b60405180910390a2506108ea6001600055565b6000610de481610e72565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610e6b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61072a8133611111565b60025460ff1615610eb9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b038381166024830152604482018390526106f391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611188565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16610fba5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104b5565b5060006104b5565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1615610fba5760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104b5565b611051611204565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6110a3610e7c565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861107e3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106a19186918216906323b872dd90608401610ee8565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611184576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b600061119d6001600160a01b03841683611240565b905080516000141580156111c25750808060200190518101906111c09190611966565b155b156106f3576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161117b565b60025460ff16610eb9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061124e83836000611255565b9392505050565b606081471015611293576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161117b565b600080856001600160a01b031684866040516112af9190611983565b60006040518083038185875af1925050503d80600081146112ec576040519150601f19603f3d011682016040523d82523d6000602084013e6112f1565b606091505b509150915061130186838361130b565b9695505050505050565b6060826113205761131b82611380565b61124e565b815115801561133757506001600160a01b0384163b155b15611379576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161117b565b508061124e565b8051156113905780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156113d457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461124e57600080fd5b6001600160a01b038116811461072a57600080fd5b60008083601f84011261142b57600080fd5b50813567ffffffffffffffff81111561144357600080fd5b60208301915083602082850101111561145b57600080fd5b9250929050565b60008060008060006080868803121561147a57600080fd5b853561148581611404565b9450602086013561149581611404565b935060408601359250606086013567ffffffffffffffff8111156114b857600080fd5b6114c488828901611419565b969995985093965092949392505050565b6000602082840312156114e757600080fd5b5035919050565b6000806040838503121561150157600080fd5b82359150602083013561151381611404565b809150509250929050565b60008060008060008060a0878903121561153757600080fd5b863561154281611404565b9550602087013561155281611404565b945060408701359350606087013567ffffffffffffffff81111561157557600080fd5b61158189828a01611419565b909450925050608087013567ffffffffffffffff8111156115a157600080fd5b87016080818a0312156115b357600080fd5b809150509295509295509295565b6000602082840312156115d357600080fd5b813561124e81611404565b6000806000606084860312156115f357600080fd5b83356115fe81611404565b9250602084013561160e81611404565b929592945050506040919091013590565b6000806000806000806080878903121561163857600080fd5b863567ffffffffffffffff81111561164f57600080fd5b61165b89828a01611419565b909750955050602087013561166f81611404565b935060408701359250606087013567ffffffffffffffff81111561169257600080fd5b61169e89828a01611419565b979a9699509497509295939492505050565b801515811461072a57600080fd5b6000602082840312156116d057600080fd5b813561124e816116b0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061175c6080830184866116db565b979650505050505050565b8381526040602082015260006117816040830184866116db565b95945050505050565b6000813561179781611404565b6001600160a01b0316835260208201356117b081611404565b6001600160a01b03166020840152604082013567ffffffffffffffff81168082146117da57600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261181657600080fd5b820160208101903567ffffffffffffffff81111561183357600080fd5b80360382131561184257600080fd5b608060608601526117816080860182846116db565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061188f60a0830185876116db565b82810360808401526118a1818561178a565b9998505050505050505050565b8481526060602082015260006118c86060830185876116db565b828103604084015261175c818561178a565b6000602082840312156118ec57600080fd5b5051919050565b818103818111156104b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006119416060830187896116db565b856020840152828103604084015261195a8185876116db565b98975050505050505050565b60006020828403121561197857600080fd5b815161124e816116b0565b6000825160005b818110156119a4576020818601810151858301520161198a565b50600092019182525091905056fea2646970667358221220dc0b6596b7b61441087636724be59e8874b026b619128cbecb229a5609d1f02d64736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b506040516117aa3803806117aa83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516114d26102d86000396000818161020a015281816105d6015281816108290152818161099a01528181610aef0152610c110152600081816101be01528181610546015281816105a90152818161079901526107fc01526114d26000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b80632ccb404d1161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b80632ccb404d1461025d5780632f2ff15d1461027057600080fd5b8063116191b611610160578063116191b6146101b957806321e093b114610205578063248a9ca31461022c57600080fd5b806301ffc9a71461017c578063106e6290146101a4575b600080fd5b61018f61018a366004610fd3565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611045565b610462565b005b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b61024f61023a366004611078565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761026b3660046110da565b610507565b6101b761027e366004611172565b6106a1565b6101b7610291366004611172565b6106cc565b6101b7610725565b60015460ff1661018f565b6101b76102b736600461119e565b61075a565b6101b76102ca366004611078565b6108ef565b6101b76102dd366004611078565b61095d565b6101b7610a07565b61024f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611172565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61024f600081565b61024f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611172565b610a39565b61024f60035481565b61024f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610aa1565b61049c610aab565b6104a7848484610aea565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5846040516104ef91815260200190565b60405180910390a2506105026001600055565b505050565b61050f610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461053981610aa1565b610541610aab565b61056c7f00000000000000000000000000000000000000000000000000000000000000008785610aea565b6040517f36c99f3b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b90610608907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a90600401611335565b600060405180830381600087803b15801561062257600080fd5b505af1158015610636573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167fa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b8353780178787878660405161068694939291906113a6565b60405180910390a2506106996001600055565b505050505050565b6000828152600260205260409020600101546106bc81610aa1565b6106c68383610c72565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461071b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105028282610d72565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074f81610aa1565b610757610e31565b50565b610762610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078c81610aa1565b610794610aab565b6107bf7f00000000000000000000000000000000000000000000000000000000000000008684610aea565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610859907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016113dd565b600060405180830381600087803b15801561087357600080fd5b505af1158015610887573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d8686866040516108d59392919061142f565b60405180910390a2506108e86001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61091981610aa1565b610921610aab565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610965610aab565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109f357600080fd5b505af11580156108e8573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3181610aa1565b610757610eae565b600082815260026020526040902060010154610a5481610aa1565b6106c68383610d72565b600260005403610a9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107578133610f07565b60015460ff1615610ae8576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7c9190611449565b610b869084611462565b1115610bbe576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d083390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e39610f97565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610eb6610aab565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e84565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f93576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ae8576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fe557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461101557600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461104057600080fd5b919050565b60008060006060848603121561105a57600080fd5b6110638461101c565b95602085013595506040909401359392505050565b60006020828403121561108a57600080fd5b5035919050565b60008083601f8401126110a357600080fd5b50813567ffffffffffffffff8111156110bb57600080fd5b6020830191508360208285010111156110d357600080fd5b9250929050565b60008060008060008060a087890312156110f357600080fd5b6110fc8761101c565b955060208701359450604087013567ffffffffffffffff81111561111f57600080fd5b61112b89828a01611091565b90955093505060608701359150608087013567ffffffffffffffff81111561115257600080fd5b87016080818a03121561116457600080fd5b809150509295509295509295565b6000806040838503121561118557600080fd5b823591506111956020840161101c565b90509250929050565b6000806000806000608086880312156111b657600080fd5b6111bf8661101c565b945060208601359350604086013567ffffffffffffffff8111156111e257600080fd5b6111ee88828901611091565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff6112678261101c565b16825273ffffffffffffffffffffffffffffffffffffffff61128b6020830161101c565b1660208301526000604082013567ffffffffffffffff81168082146112af57600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126112eb57600080fd5b820160208101903567ffffffffffffffff81111561130857600080fd5b80360382131561131757600080fd5b6080606086015261132c608086018284611200565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061138760a083018587611200565b82810360808401526113998185611249565b9998505050505050505050565b8481526060602082015260006113c0606083018587611200565b82810360408401526113d28185611249565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113d2608083018486611200565b83815260406020820152600061132c604083018486611200565b60006020828403121561145b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220276d75628e17e347d14c84f90b610fc13968efff6201b1233b79eeaa7cb742c964736f6c634300081a0033a26469706673582212201bc800b0bc2c838a49e710528db7ca6af4ce58c3c08b36cba954a2c09fe706d864736f6c634300081a0033", } // GatewayEVMInboundTestABI is the input ABI used to generate the binding from. @@ -2352,9 +2353,9 @@ type GatewayEVMInboundTestReceivedRevert struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) FilterReceivedRevert(opts *bind.FilterOpts) (*GatewayEVMInboundTestReceivedRevertIterator, error) { logs, sub, err := _GatewayEVMInboundTest.contract.FilterLogs(opts, "ReceivedRevert") @@ -2364,9 +2365,9 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) FilterReceivedRever return &GatewayEVMInboundTestReceivedRevertIterator{contract: _GatewayEVMInboundTest.contract, event: "ReceivedRevert", logs: logs, sub: sub}, nil } -// WatchReceivedRevert is a free log subscription operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// WatchReceivedRevert is a free log subscription operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) WatchReceivedRevert(opts *bind.WatchOpts, sink chan<- *GatewayEVMInboundTestReceivedRevert) (event.Subscription, error) { logs, sub, err := _GatewayEVMInboundTest.contract.WatchLogs(opts, "ReceivedRevert") @@ -2401,9 +2402,9 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) WatchReceivedRevert }), nil } -// ParseReceivedRevert is a log parse operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// ParseReceivedRevert is a log parse operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) ParseReceivedRevert(log types.Log) (*GatewayEVMInboundTestReceivedRevert, error) { event := new(GatewayEVMInboundTestReceivedRevert) if err := _GatewayEVMInboundTest.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { @@ -2490,9 +2491,9 @@ type GatewayEVMInboundTestReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// FilterReverted is a free log retrieval operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*GatewayEVMInboundTestRevertedIterator, error) { var toRule []interface{} @@ -2511,9 +2512,9 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) FilterReverted(opts return &GatewayEVMInboundTestRevertedIterator{contract: _GatewayEVMInboundTest.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// WatchReverted is a free log subscription operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *GatewayEVMInboundTestReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2557,9 +2558,9 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) WatchReverted(opts }), nil } -// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// ParseReverted is a log parse operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) ParseReverted(log types.Log) (*GatewayEVMInboundTestReverted, error) { event := new(GatewayEVMInboundTestReverted) if err := _GatewayEVMInboundTest.contract.UnpackLog(event, "Reverted", log); err != nil { diff --git a/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go b/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go index eb51a7b8..143eb57b 100644 --- a/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go +++ b/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go @@ -31,6 +31,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -65,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\":\"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\":\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b506201105a806200003e6000396000f3fe608060405234801561001057600080fd5b50600436106102ad5760003560e01c8063a217fddf1161017b578063cebad2a6116100d8578063e6afc7901161008c578063fa18c09b11610071578063fa18c09b146104b8578063fa7626d4146104c0578063fe7bdbb2146104cd57600080fd5b8063e6afc790146104a8578063f68bd1c0146104b057600080fd5b8063dd51e82f116100bd578063dd51e82f14610471578063e20c9f7114610479578063e63ab1e91461048157600080fd5b8063cebad2a614610461578063d38b66cd1461046957600080fd5b8063b124dbf51161012f578063ba414fa611610114578063ba414fa614610439578063ccf2061614610451578063ce5871e11461045957600080fd5b8063b124dbf514610429578063b5508aa91461043157600080fd5b8063a56f7a4b11610160578063a56f7a4b146103f2578063a783c789146103fa578063b0464fdc1461042157600080fd5b8063a217fddf146103e2578063a397ffd2146103ea57600080fd5b806344671b94116102295780637d7f772a116101dd57806385226c81116101c257806385226c811461039157806385f438c1146103a6578063916a17c6146103cd57600080fd5b80637d7f772a146103815780637ebf744f1461038957600080fd5b80635d62c8601161020e5780635d62c8601461032f57806366d9a9a0146103645780636bdd212b1461037957600080fd5b806344671b941461031f57806351010e491461032757600080fd5b80631ed7831c116102805780633e5e3c23116102655780633e5e3c23146103075780633f7286f41461030f57806343fd8c7d1461031757600080fd5b80631ed7831c146102d45780632ade3880146102f257600080fd5b806304b974f9146102b25780630a9254e4146102bc5780631226c655146102c45780631855c337146102cc575b600080fd5b6102ba6104d5565b005b6102ba6106e2565b6102ba6110e0565b6102ba611281565b6102dc6113f6565b6040516102e99190619180565b60405180910390f35b6102fa611458565b6040516102e9919061921c565b6102dc61159a565b6102dc6115fa565b6102ba61165a565b6102ba6119cc565b6102ba611d4c565b6103567f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6040519081526020016102e9565b61036c611f28565b6040516102e99190619382565b6102ba6120aa565b6102ba61227a565b6102ba61258f565b610399612704565b6040516102e9919061947c565b6103567f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6103d56127d4565b6040516102e9919061948f565b610356600081565b6102ba6128cf565b6102ba612c0b565b6103567f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6103d5612d5d565b6102ba612e58565b6103996130ff565b6104416131cf565b60405190151581526020016102e9565b6102ba6132a3565b6102ba6133f5565b6102ba613566565b6102ba61378a565b6102ba6138e5565b6102dc6140da565b6103567f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102ba61413a565b6102ba6143a8565b6102ba61479d565b601f546104419060ff1681565b6102ba614aff565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052602854925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa79261057c926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b15801561059657600080fd5b505af11580156105aa573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561063357600080fd5b505af1158015610647573d6000803e3d6000fd5b50506020546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169250631cff79cd9150610697906000908590600401619526565b6000604051808303816000875af11580156106b6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106de9190810190619630565b5050565b602680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556027805482166112341790556028805490911661567817905560405161073490619081565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156107b9573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560285460405191169081906108029061908f565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610835573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260285460265492519085166024820152604481019390935292166064820152610924919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052614f74565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906109b09061909d565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156109ec573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556020546025546028546026546040519385169492831693918316921690610a47906190ab565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610a8b573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560285460405163ca669fa760e01b815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610b1057600080fd5b505af1158015610b24573d6000803e3d6000fd5b50506025546028546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152911692506315d57fd49150604401600060405180830381600087803b158015610b9557600080fd5b505af1158015610ba9573d6000803e3d6000fd5b50505050604051610bb9906190b9565b604051809103906000f080158015610bd5573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610c8157600080fd5b505af1158015610c95573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610d0b57600080fd5b505af1158015610d1f573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610d8557600080fd5b505af1158015610d99573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610dff57600080fd5b505af1158015610e13573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e7557600080fd5b505af1158015610e89573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610efa57600080fd5b505af1158015610f0e573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa89190619665565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561102957600080fd5b505af115801561103d573d6000803e3d6000fd5b5050604080516060810182526024546001600160a01b0390811682526001602080840191825284519081018552600081529383018490528251602d8054925167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090931691909316171781559093509150602e906110db908261971b565b505050565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561115257600080fd5b505af1158015611166573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156111ef57600080fd5b505af1158015611203573d6000803e3d6000fd5b50506020546040517fae7a3a6f000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063ae7a3a6f91506024015b600060405180830381600087803b15801561126757600080fd5b505af115801561127b573d6000803e3d6000fd5b50505050565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156112f357600080fd5b505af1158015611307573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb337f378000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561139157600080fd5b505af11580156113a5573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f915060240161124d565b6060601680548060200260200160405190810160405280929190818152602001828054801561144e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611430575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561159157600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561157a5783829060005260206000200180546114ed90619687565b80601f016020809104026020016040519081016040528092919081815260200182805461151990619687565b80156115665780601f1061153b57610100808354040283529160200191611566565b820191906000526020600020905b81548152906001019060200180831161154957829003601f168201915b5050505050815260200190600101906114ce565b50505050815250508152602001906001019061147c565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801561144e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611430575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561144e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611430575050505050905090565b604080516001808252818301909252600091816020015b60608152602001906001900390816116715790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e647279210000000000000000000000000000000000815250816000815181106116d1576116d16197da565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110611715576117156197da565b602090810291909101015260405160019060009061173b9085908590859060240161983b565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156117ee57600080fd5b505af1158015611802573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506118ed9190600401619873565b600060405180830381600087803b15801561190757600080fd5b505af115801561191b573d6000803e3d6000fd5b505060208054604080519283018152610123835260215490517f38e225270000000000000000000000000000000000000000000000000000000081526001600160a01b0392831695506338e22527945061197e9392909116908690600401619886565b6000604051808303816000875af115801561199d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119c59190810190619630565b5050505050565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905260215492517ff30c7ba30000000000000000000000000000000000000000000000000000000081529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611a82926001600160a01b0316916000918791016198b8565b600060405180830381600087803b158015611a9c57600080fd5b505af1158015611ab0573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611b4257600080fd5b505af1158015611b56573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611c2857600080fd5b505af1158015611c3c573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611c829060009085906198e0565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b158015611ce457600080fd5b505af1158015611cf8573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935061069792909116908590600401619526565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611dec57600080fd5b505af1158015611e00573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015611e8957600080fd5b505af1158015611e9d573d6000803e3d6000fd5b50506020546040517ff7ad60db0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063f7ad60db91508490611ef2906000908690602d906004016199ce565b6000604051808303818588803b158015611f0b57600080fd5b505af1158015611f1f573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156115915783829060005260206000209060020201604051806040016040529081600082018054611f7f90619687565b80601f0160208091040260200160405190810160405280929190818152602001828054611fab90619687565b8015611ff85780601f10611fcd57610100808354040283529160200191611ff8565b820191906000526020600020905b815481529060010190602001808311611fdb57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561209257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161203f5790505b50505050508152505081526020019060010190611f4c565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052602854925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa792612151926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b15801561216b57600080fd5b505af115801561217f573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561220857600080fd5b505af115801561221c573d6000803e3d6000fd5b5050602080546040805192830181526101238352517f38e225270000000000000000000000000000000000000000000000000000000081526001600160a01b0390911693506338e22527925061069791906000908690600401619886565b604080516001808252818301909252600091816020015b60608152602001906001900390816122915790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e647279210000000000000000000000000000000000815250816000815181106122f1576122f16197da565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110612335576123356197da565b602090810291909101015260405160019060009061235b9085908590859060240161983b565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561240e57600080fd5b505af1158015612422573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061250d9190600401619873565b600060405180830381600087803b15801561252757600080fd5b505af115801561253b573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935061197e92909116908590600401619526565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561260157600080fd5b505af1158015612615573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f0c8dc016000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561269f57600080fd5b505af11580156126b3573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef915060240161124d565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561159157838290600052602060002001805461274790619687565b80601f016020809104026020016040519081016040528092919081815260200182805461277390619687565b80156127c05780601f10612795576101008083540402835291602001916127c0565b820191906000526020600020905b8154815290600101906020018083116127a357829003601f168201915b505050505081526020019060010190612728565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156115915760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156128b757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116128645790505b505050505081525050815260200190600101906127f8565b6021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561295d57600080fd5b505af1158015612971573d6000803e3d6000fd5b50506040517f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee925060009150a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612a2c57600080fd5b505af1158015612a40573d6000803e3d6000fd5b5050602154604080518082018252600181527f3100000000000000000000000000000000000000000000000000000000000000602082015290516001600160a01b0390921693507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9250612ab791600091906198e0565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612b1857600080fd5b505af1158015612b2c573d6000803e3d6000fd5b505060208054604080518084018252610123815260215482518084018452600181527f31000000000000000000000000000000000000000000000000000000000000009581019590955291517f38e225270000000000000000000000000000000000000000000000000000000081526001600160a01b0393841696506338e225279550612bc194919390921691600401619886565b6000604051808303816000875af1158015612be0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612c089190810190619630565b50565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015612c7d57600080fd5b505af1158015612c91573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506113779190600401619873565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156115915760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e4057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612ded5790505b50505050508152505081526020019060010190612d81565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612f3c57600080fd5b505af1158015612f50573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061303b9190600401619873565b600060405180830381600087803b15801561305557600080fd5b505af1158015613069573d6000803e3d6000fd5b50506020546024546027546040517fd0b492c30000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063d0b492c394506130c993928316929091169087908790602d90600401619a02565b600060405180830381600087803b1580156130e357600080fd5b505af11580156130f7573d6000803e3d6000fd5b505050505050565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561159157838290600052602060002001805461314290619687565b80601f016020809104026020016040519081016040528092919081815260200182805461316e90619687565b80156131bb5780601f10613190576101008083540402835291602001916131bb565b820191906000526020600020905b81548152906001019060200180831161319e57829003601f168201915b505050505081526020019060010190613123565b60085460009060ff16156131e7575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329c9190619a57565b1415905090565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561331557600080fd5b505af1158015613329573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506126859190600401619873565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561346757600080fd5b505af115801561347b573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561350457600080fd5b505af1158015613518573d6000803e3d6000fd5b50506020546040517f10188aef000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b0390911692506310188aef915060240161124d565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561360657600080fd5b505af115801561361a573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506137059190600401619873565b600060405180830381600087803b15801561371f57600080fd5b505af1158015613733573d6000803e3d6000fd5b50506020546021546040517ff7ad60db0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063f7ad60db93508692611ef29216908690602d906004016199ce565b60408051602081018252600080825291516137aa91607b91602401619526565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f676cc05400000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561385d57600080fd5b505af1158015613871573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fed699775000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401611cca565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561393e57600080fd5b505af1158015613952573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613a3d9190600401619873565b600060405180830381600087803b158015613a5757600080fd5b505af1158015613a6b573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613abf57600080fd5b505af1158015613ad3573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613b3057600080fd5b505af1158015613b44573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613c2f9190600401619873565b600060405180830381600087803b158015613c4957600080fd5b505af1158015613c5d573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613cb157600080fd5b505af1158015613cc5573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613d2257600080fd5b505af1158015613d36573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d8a57600080fd5b505af1158015613d9e573d6000803e3d6000fd5b5050604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905292517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c06650000000000000000000000000000000000000000000000000000000091810191909152909350737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09101600060405180830381600087803b158015613e8057600080fd5b505af1158015613e94573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613ef157600080fd5b505af1158015613f05573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350613f5992909116908590600401619526565b6000604051808303816000875af1158015613f78573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613fa09190810190619630565b5060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613ffa57600080fd5b505af115801561400e573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561406257600080fd5b505af1158015614076573d6000803e3d6000fd5b50506021546040517ff30c7ba3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f30c7ba39250611a82916001600160a01b03169060009086906004016198b8565b6060601580548060200260200160405190810160405280929190818152602001828054801561144e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611430575050505050905090565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561421e57600080fd5b505af1158015614232573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061431d9190600401619873565b600060405180830381600087803b15801561433757600080fd5b505af115801561434b573d6000803e3d6000fd5b50506020546024546027546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635131ab5994506130c993928316929091169087908790600401619a70565b604080516001808252818301909252600091816020015b60608152602001906001900390816143bf5790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e6472792100000000000000000000000000000000008152508160008151811061441f5761441f6197da565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110614463576144636197da565b60209081029190910101526040516001906000906144899085908590859060240161983b565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf0000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614546916001600160a01b03919091169060009086906004016198b8565b600060405180830381600087803b15801561456057600080fd5b505af1158015614574573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561460657600080fd5b505af115801561461a573d6000803e3d6000fd5b50506020546040517f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146935061466192506001600160a01b0390911690879087908790619aa7565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156146f757600080fd5b505af115801561470b573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506147519060009085906198e0565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa79060240161250d565b604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025909101909152602154670de0b6b3a764000091906001600160a01b0316316147fc816000614f93565b6021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561488a57600080fd5b505af115801561489e573d6000803e3d6000fd5b50506020546040517f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e93506148e292506001600160a01b0390911690602d90619aef565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561497857600080fd5b505af115801561498c573d6000803e3d6000fd5b5050602154604051600093506001600160a01b0390911691507f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436906149df90670de0b6b3a7640000908790602d90619b11565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614a4057600080fd5b505af1158015614a54573d6000803e3d6000fd5b50506020546021546040517ff7ad60db0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063f7ad60db93508792614aab9216908790602d906004016199ce565b6000604051808303818588803b158015614ac457600080fd5b505af1158015614ad8573d6000803e3d6000fd5b50506021546001600160a01b031631925061127b9150829050670de0b6b3a7640000614f93565b60408051808201909152600f81527f48656c6c6f2c20466f756e6472792100000000000000000000000000000000006020820152602154602a90600190670de0b6b3a764000090614b5c906000906001600160a01b031631614f93565b6000848484604051602401614b7393929190619b2a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614c37916001600160a01b039190911690670de0b6b3a76400009086906004016198b8565b600060405180830381600087803b158015614c5157600080fd5b505af1158015614c65573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614cf757600080fd5b505af1158015614d0b573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa9350614d5492506001600160a01b03909116908590899089908990619b54565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614dea57600080fd5b505af1158015614dfe573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150614e4b90670de0b6b3a76400009085906198e0565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614eac57600080fd5b505af1158015614ec0573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508692614f149216908690600401619526565b60006040518083038185885af1158015614f32573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052614f5b9190810190619630565b506021546119c59083906001600160a01b031631614f93565b6000614f7e6190c7565b614f89848483615012565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614ffe57600080fd5b505afa1580156130f7573d6000803e3d6000fd5b60008061501f858461508d565b90506150826040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161506d929190619526565b60405160208183030381529060405285615099565b9150505b9392505050565b600061508683836150c7565b60c081015151600090156150bd576150b684848460c001516150e2565b9050615086565b6150b68484615288565b60006150d38383615373565b61508683836020015184615099565b6000806150ed61537f565b905060006150fb8683615452565b9050600061511282606001518360200151856158f8565b9050600061512283838989615b0a565b9050600061512f82616987565b602081015181519192509060030b156151a257898260400151604051602001615159929190619b95565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261519991600401619873565b60405180910390fd5b60006151e56040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616b56565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90615238908490600401619873565b602060405180830381865afa158015615255573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906152799190619c16565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906152dd908790600401619873565b600060405180830381865afa1580156152fa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526153229190810190619630565b90506000615350828560405160200161533c929190619c3f565b604051602081830303815290604052616d56565b90506001600160a01b038116614f89578484604051602001615159929190619c6e565b6106de82826000616d69565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90615406908490600401619d19565b600060405180830381865afa158015615423573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261544b9190810190619d60565b9250505090565b6154846040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506154cf6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6154d885616e6c565b602082015260006154e886617251565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561552a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526155529190810190619d60565b8683856020015160405160200161556c9493929190619da9565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906155c4908590600401619873565b600060405180830381865afa1580156155e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156099190810190619d60565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615651908490600401619ead565b602060405180830381865afa15801561566e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156929190619665565b6156a757816040516020016151599190619eff565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906156ec908490600401619f91565b600060405180830381865afa158015615709573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157319190810190619d60565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690615778908490600401619fe3565b602060405180830381865afa158015615795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906157b99190619665565b1561584e576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615803908490600401619fe3565b600060405180830381865afa158015615820573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526158489190810190619d60565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001615873919061a035565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161589f92919061a0a1565b600060405180830381865afa1580156158bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526158e49190810190619d60565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816159145790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110615974576159746197da565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106159c8576159c86197da565b6020026020010181905250846040516020016159e4919061a0c6565b60405160208183030381529060405281600281518110615a0657615a066197da565b602002602001018190525082604051602001615a22919061a132565b60405160208183030381529060405281600381518110615a4457615a446197da565b60200260200101819052506000615a5a82616987565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250615aeb90604080518082018252600080825260209182015281518083019092528451825280850190820152906174d4565b615b005785604051602001615159919061a173565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615b5a565b511590565b615cce57826020015115615c16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401615199565b8260c0015115615cce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401615199565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615ce757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615d429061a233565b935060ff1681518110615d5757615d576197da565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615da8919061a252565b604051602081830303815290604052828280615dc39061a233565b935060ff1681518110615dd857615dd86197da565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615e259061a233565b935060ff1681518110615e3a57615e3a6197da565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615e879061a233565b935060ff1681518110615e9c57615e9c6197da565b60200260200101819052508760200151828280615eb89061a233565b935060ff1681518110615ecd57615ecd6197da565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615f1a9061a233565b935060ff1681518110615f2f57615f2f6197da565b602090810291909101015287518282615f478161a233565b935060ff1681518110615f5c57615f5c6197da565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615fa99061a233565b935060ff1681518110615fbe57615fbe6197da565b6020026020010181905250615fd246617535565b8282615fdd8161a233565b935060ff1681518110615ff257615ff26197da565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061603f9061a233565b935060ff1681518110616054576160546197da565b60200260200101819052508682828061606c9061a233565b935060ff1681518110616081576160816197da565b60209081029190910101528551156161a85760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826160d28161a233565b935060ff16815181106160e7576160e76197da565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90616137908990600401619873565b600060405180830381865afa158015616154573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261617c9190810190619d60565b82826161878161a233565b935060ff168151811061619c5761619c6197da565b60200260200101819052505b8460200151156162785760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826161f18161a233565b935060ff1681518110616206576162066197da565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806162539061a233565b935060ff1681518110616268576162686197da565b602002602001018190525061643f565b6162b0615b558660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6163435760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826162f38161a233565b935060ff1681518110616308576163086197da565b60200260200101819052508460a00151604051602001616328919061a0c6565b6040516020818303038152906040528282806162539061a233565b8460c0015115801561638657506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261638490511590565b155b1561643f5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826163ca8161a233565b935060ff16815181106163df576163df6197da565b60200260200101819052506163f3886175d5565b604051602001616403919061a0c6565b60405160208183030381529060405282828061641e9061a233565b935060ff1681518110616433576164336197da565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261647390511590565b6165085760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826164b68161a233565b935060ff16815181106164cb576164cb6197da565b602002602001018190525084604001518282806164e79061a233565b935060ff16815181106164fc576164fc6197da565b60200260200101819052505b6060850151156166295760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826165518161a233565b935060ff1681518110616566576165666197da565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156165d5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526165fd9190810190619d60565b82826166088161a233565b935060ff168151811061661d5761661d6197da565b60200260200101819052505b60e085015151156166d05760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826166738161a233565b935060ff1681518110616688576166886197da565b60200260200101819052506166a48560e0015160000151617535565b82826166af8161a233565b935060ff16815181106166c4576166c46197da565b60200260200101819052505b60e0850151602001511561677a5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261671d8161a233565b935060ff1681518110616732576167326197da565b602002602001018190525061674e8560e0015160200151617535565b82826167598161a233565b935060ff168151811061676e5761676e6197da565b60200260200101819052505b60e085015160400151156168245760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826167c78161a233565b935060ff16815181106167dc576167dc6197da565b60200260200101819052506167f88560e0015160400151617535565b82826168038161a233565b935060ff1681518110616818576168186197da565b60200260200101819052505b60e085015160600151156168ce5760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826168718161a233565b935060ff1681518110616886576168866197da565b60200260200101819052506168a28560e0015160600151617535565b82826168ad8161a233565b935060ff16815181106168c2576168c26197da565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156168ec576168ec619548565b60405190808252806020026020018201604052801561691f57816020015b606081526020019060019003908161690a5790505b50905060005b8260ff168160ff16101561697857838160ff1681518110616948576169486197da565b6020026020010151828260ff1681518110616965576169656197da565b6020908102919091010152600101616925565b5093505050505b949350505050565b6169ae6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91616a349186910161a2bd565b600060405180830381865afa158015616a51573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616a799190810190619d60565b90506000616a8786836180c4565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401616ab7919061947c565b6000604051808303816000875af1158015616ad6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616afe919081019061a304565b805190915060030b15801590616b175750602081015151155b8015616b265750604081015151155b15615b005781600081518110616b3e57616b3e6197da565b6020026020010151604051602001615159919061a3ba565b60606000616b8b8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616bc29082905b90618219565b15616d1f576000616c3f82616c3984616c33616c058a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618240565b906182a2565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616ca3908290618219565b15616d0d57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d0a905b8290618327565b90505b616d168161834d565b92505050615086565b8215616d3857848460405160200161515992919061a5a6565b5050604080516020810190915260008152615086565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616d7857505050565b6000616d858484846183b6565b90506000616d9282616987565b602081015181519192509060030b158015616e2e5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e2e90604080518082018252600080825260209182015281518083019092528451825280850190820152616bbc565b15616e3b57505050505050565b60408201515115616e5b578160400151604051602001615159919061a64d565b80604051602001615159919061a6ab565b60606000616ea18360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616f06905b82906174d4565b15616f7557604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261508690616f70908390618951565b61834d565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616fd7905b82906189db565b6001036170a457604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261703d90616d03565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261508690616f70905b8390618327565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261710390616eff565b1561723a57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061716b908390618a75565b90506000816001835161717e919061a716565b8151811061718e5761718e6197da565b60200260200101519050617231616f706172046040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618951565b95945050505050565b82604051602001615159919061a729565b50919050565b606060006172868360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506172e890616eff565b156172f6576150868161834d565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261735590616fd0565b6001036173bf57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261508690616f709061709d565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261741e90616eff565b1561723a57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617486908390618a75565b90506001815111156174c25780600282516174a1919061a716565b815181106174b1576174b16197da565b602002602001015192505050919050565b5082604051602001615159919061a729565b8051825160009111156174e957506000614f8d565b815183516020850151600092916174ff9161a807565b617509919061a716565b905082602001518103617520576001915050614f8d565b82516020840151819020912014905092915050565b6060600061754283618b1a565b600101905060008167ffffffffffffffff81111561756257617562619548565b6040519080825280601f01601f19166020018201604052801561758c576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461759657509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617661905b8290618bfc565b156176a157505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177009061765a565b1561774057505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261779f9061765a565b156177df57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261783e9061765a565b806178a35750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178a39061765a565b156178e357505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179429061765a565b806179a75750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179a79061765a565b156179e757505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a469061765a565b80617aab5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617aab9061765a565b15617aeb57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b4a9061765a565b80617baf5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617baf9061765a565b15617bef57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c4e9061765a565b15617c8e57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ced9061765a565b15617d2d57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d8c9061765a565b15617dcc57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e2b9061765a565b15617e6b57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617eca9061765a565b15617f0a57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f699061765a565b80617fce5750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617fce9061765a565b1561800e57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261806d9061765a565b156180ad57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151615159929060200161a81a565b60608060005b845181101561814f57818582815181106180e6576180e66197da565b60200260200101516040516020016180ff929190619c3f565b60405160208183030381529060405291506001855161811e919061a716565b81146181475781604051602001618135919061a983565b60405160208183030381529060405291505b6001016180ca565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816181685790505090508381600081518110618193576181936197da565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106181e7576181e76197da565b60200260200101819052508181600281518110618206576182066197da565b6020908102919091010152949350505050565b60208083015183518351928401516000936182379291849190618c10565b14159392505050565b604080518082019091526000808252602082015260006182728460000151856020015185600001518660200151618d21565b9050836020015181618284919061a716565b8451859061829390839061a716565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156182c7575081614f8d565b60208083015190840151600191146182ee5750815160208481015190840151829020919020145b801561831f5782518451859061830590839061a716565b905250825160208501805161831b90839061a807565b9052505b509192915050565b6040805180820190915260008082526020820152618346838383618e41565b5092915050565b60606000826000015167ffffffffffffffff81111561836e5761836e619548565b6040519080825280601f01601f191660200182016040528015618398576020820181803683370190505b50905060006020820190506183468185602001518660000151618eec565b606060006183c261537f565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816183df57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061843a9061a233565b935060ff168151811061844f5761844f6197da565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016184a0919061a9c4565b6040516020818303038152906040528282806184bb9061a233565b935060ff16815181106184d0576184d06197da565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061851d9061a233565b935060ff1681518110618532576185326197da565b60200260200101819052508260405160200161854e919061a132565b6040516020818303038152906040528282806185699061a233565b935060ff168151811061857e5761857e6197da565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806185cb9061a233565b935060ff16815181106185e0576185e06197da565b60200260200101819052506185f58784618f66565b82826186008161a233565b935060ff1681518110618615576186156197da565b6020908102919091010152855151156186c15760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826186678161a233565b935060ff168151811061867c5761867c6197da565b6020026020010181905250618695866000015184618f66565b82826186a08161a233565b935060ff16815181106186b5576186b56197da565b60200260200101819052505b85608001511561872f5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261870a8161a233565b935060ff168151811061871f5761871f6197da565b6020026020010181905250618795565b84156187955760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826187748161a233565b935060ff1681518110618789576187896197da565b60200260200101819052505b604086015151156188315760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826187df8161a233565b935060ff16815181106187f4576187f46197da565b602002602001018190525085604001518282806188109061a233565b935060ff1681518110618825576188256197da565b60200260200101819052505b85606001511561889b5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261887a8161a233565b935060ff168151811061888f5761888f6197da565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156188b9576188b9619548565b6040519080825280602002602001820160405280156188ec57816020015b60608152602001906001900390816188d75790505b50905060005b8260ff168160ff16101561894557838160ff1681518110618915576189156197da565b6020026020010151828260ff1681518110618932576189326197da565b60209081029190910101526001016188f2565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618976575081614f8d565b8151835160208501516000929161898c9161a807565b618996919061a716565b602084015190915060019082146189b7575082516020840151819020908220145b80156189d2578351855186906189ce90839061a716565b9052505b50929392505050565b60008082600001516189ff8560000151866020015186600001518760200151618d21565b618a09919061a807565b90505b83516020850151618a1d919061a807565b81116183465781618a2d8161aa09565b9250508260000151618a64856020015183618a48919061a716565b8651618a54919061a716565b8386600001518760200151618d21565b618a6e919061a807565b9050618a0c565b60606000618a8384846189db565b618a8e90600161a807565b67ffffffffffffffff811115618aa657618aa6619548565b604051908082528060200260200182016040528015618ad957816020015b6060815260200190600190039081618ac45790505b50905060005b8151811015616d4e57618af5616f708686618327565b828281518110618b0757618b076197da565b6020908102919091010152600101618adf565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310618b63577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618b8f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310618bad57662386f26fc10000830492506010015b6305f5e1008310618bc5576305f5e100830492506008015b6127108310618bd957612710830492506004015b60648310618beb576064830492506002015b600a8310614f8d5760010192915050565b6000618c088383618fa6565b159392505050565b600080858411618d175760208411618cc35760008415618c5b576001618c3786602061a716565b618c4290600861aa23565b618c4d90600261ab21565b618c57919061a716565b1990505b8351811685618c6a898961a807565b618c74919061a716565b805190935082165b818114618cae57878411618c96578794505050505061697f565b83618ca08161ab2d565b945050828451169050618c7c565b618cb8878561a807565b94505050505061697f565b838320618cd0858861a716565b618cda908761a807565b91505b858210618d1557848220808203618d0257618cf8868461a807565b935050505061697f565b618d0d60018461a716565b925050618cdd565b505b5092949350505050565b60008381868511618e2c5760208511618ddb5760008515618d6d576001618d4987602061a716565b618d5490600861aa23565b618d5f90600261ab21565b618d69919061a716565b1990505b84518116600087618d7e8b8b61a807565b618d88919061a716565b855190915083165b828114618dcd57818610618db557618da88b8b61a807565b965050505050505061697f565b85618dbf8161aa09565b965050838651169050618d90565b85965050505050505061697f565b508383206000905b618ded868961a716565b8211618e2a57858320808203618e09578394505050505061697f565b618e1460018561a807565b9350508180618e229061aa09565b925050618de3565b505b618e36878761a807565b979650505050505050565b60408051808201909152600080825260208201526000618e738560000151866020015186600001518760200151618d21565b602080870180519186019190915251909150618e8f908261a716565b835284516020860151618ea2919061a807565b8103618eb15760008552618ee3565b83518351618ebf919061a807565b85518690618ece90839061a716565b9052508351618edd908261a807565b60208601525b50909392505050565b60208110618f245781518352618f0360208461a807565b9250618f1060208361a807565b9150618f1d60208261a716565b9050618eec565b6000198115618f53576001618f3a83602061a716565b618f469061010061ab21565b618f50919061a716565b90505b9151835183169219169190911790915250565b60606000618f748484615452565b8051602080830151604051939450618f8e9390910161ab44565b60405160208183030381529060405291505092915050565b8151815160009190811115618fb9575081515b6020808501519084015160005b83811015619072578251825180821461904257600019602087101561902157600184618ff389602061a716565b618ffd919061a807565b61900890600861aa23565b61901390600261ab21565b61901d919061a716565b1990505b818116838216818103911461903f579750614f8d9650505050505050565b50505b61904d60208661a807565b945061905a60208561a807565b9350505060208161906b919061a807565b9050618fc6565b5084518651615b00919061ab9c565b610c9f806200abbd83390190565b6112a6806200b85c83390190565b611eb9806200cb0283390190565b611783806200e9bb83390190565b610ee7806201013e83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161910a61910f565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161910a6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156191c15783516001600160a01b031683526020938401939092019160010161919a565b509095945050505050565b60005b838110156191e75781810151838201526020016191cf565b50506000910152565b600081518084526192088160208601602086016191cc565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619318577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156192fe577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526192e88486516191f0565b60209586019590945092909201916001016192ae565b509197505050602094850194929092019150600101619244565b50929695505050505050565b600081518084526020840193506020830160005b828110156193785781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101619338565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619318577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526193ee60408801826191f0565b90506020820151915086810360208801526194098183619324565b9650505060209384019391909101906001016193aa565b600082825180855260208501945060208160051b8301016020850160005b8381101561947057601f1985840301885261945a8383516191f0565b602098890198909350919091019060010161943e565b50909695505050505050565b6020815260006150866020830184619420565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619318577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526195106040870182619324565b95505060209384019391909101906001016194b7565b6001600160a01b038316815260406020820152600061697f60408301846191f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561959a5761959a619548565b60405290565b60008067ffffffffffffffff8411156195bb576195bb619548565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156195ea576195ea619548565b60405283815290508082840185101561960257600080fd5b616d4e8460208301856191cc565b600082601f83011261962157600080fd5b615086838351602085016195a0565b60006020828403121561964257600080fd5b815167ffffffffffffffff81111561965957600080fd5b614f8984828501619610565b60006020828403121561967757600080fd5b8151801515811461508657600080fd5b600181811c9082168061969b57607f821691505b60208210810361724b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f8211156110db57806000526020600020601f840160051c810160208510156196fb5750805b601f840160051c820191505b818110156119c55760008155600101619707565b815167ffffffffffffffff81111561973557619735619548565b619749816197438454619687565b846196d4565b6020601f82116001811461977d57600083156197655750848201515b600019600385901b1c1916600184901b1784556119c5565b600084815260208120601f198516915b828110156197ad578785015182556020948501946001909201910161978d565b50848210156197cb5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561937857815186526020958601959091019060010161981d565b60608152600061984e6060830186619420565b82810360208401526198608186619809565b9150508215156040830152949350505050565b60208152600061508660208301846191f0565b6001600160a01b0384511681526001600160a01b038316602082015260606040820152600061723160608301846191f0565b6001600160a01b038416815282602082015260606040820152600061723160608301846191f0565b82815260406020820152600061697f60408301846191f0565b600081546001600160a01b038116845267ffffffffffffffff8160a01c1660208501525060018201606060408501526000815461993581619687565b8060608801526001821660008114619954576001811461998e576199c2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166080890152608082151560051b89010193506199c2565b84600052602060002060005b838110156199b95781548a82016080015260019091019060200161999a565b89016080019450505b50919695505050505050565b6001600160a01b03841681526060602082015260006199f060608301856191f0565b8281036040840152615b0081856198f9565b6001600160a01b03861681526001600160a01b038516602082015283604082015260a060608201526000619a3960a08301856191f0565b8281036080840152619a4b81856198f9565b98975050505050505050565b600060208284031215619a6957600080fd5b5051919050565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000615b0060808301846191f0565b6001600160a01b0385168152608060208201526000619ac96080830186619420565b8281036040840152619adb8186619809565b915050821515606083015295945050505050565b6001600160a01b038316815260406020820152600061697f60408301846198f9565b8381526060602082015260006199f060608301856191f0565b606081526000619b3d60608301866191f0565b602083019490945250901515604090910152919050565b6001600160a01b038616815284602082015260a060408201526000619b7c60a08301866191f0565b6060830194909452509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351619bcd81601a8501602088016191cc565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351619c0a81601c8401602088016191cc565b01601c01949350505050565b600060208284031215619c2857600080fd5b81516001600160a01b038116811461508657600080fd5b60008351619c518184602088016191cc565b835190830190619c658183602088016191cc565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351619ca681601a8501602088016191cc565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351619ce38160338401602088016191cc565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061508660808301846191f0565b600060208284031215619d7257600080fd5b815167ffffffffffffffff811115619d8957600080fd5b8201601f81018413619d9a57600080fd5b614f89848251602084016195a0565b60008551619dbb818460208a016191cc565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619df5816001840160208a016191cc565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451619e338160028401602089016191cc565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619e758160028401602088016191cc565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000619ec060408301846191f0565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251619f3781601f8501602087016191cc565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000619fa460408301846191f0565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000619ff660408301846191f0565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161a06d8160148501602087016191cc565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061a0b460408301856191f0565b828103602084015261508281856191f0565b7f220000000000000000000000000000000000000000000000000000000000000081526000825161a0fe8160018501602087016191cc565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161a1448184602087016191cc565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161a1f781604b8501602087016191cc565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff810361a2495761a24961a204565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161a2b08160298501602087016191cc565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061508660808301846191f0565b60006020828403121561a31657600080fd5b815167ffffffffffffffff81111561a32d57600080fd5b82016060818503121561a33f57600080fd5b61a347619577565b81518060030b811461a35857600080fd5b8152602082015167ffffffffffffffff81111561a37457600080fd5b61a38086828501619610565b602083015250604082015167ffffffffffffffff81111561a3a057600080fd5b61a3ac86828501619610565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a4188160218501602087016191cc565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a6048160218501602088016191cc565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a64181602e8401602088016191cc565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161a2b08160298501602087016191cc565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a7098160228501602087016191cc565b9190910160220192915050565b81810381811115614f8d57614f8d61a204565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a76181600e8501602087016191cc565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115614f8d57614f8d61a204565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a8528160188501602088016191cc565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a88f81601c8401602088016191cc565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a9958184602087016191cc565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a9fc81601c8501602087016191cc565b91909101601c0192915050565b6000600019820361aa1c5761aa1c61a204565b5060010190565b8082028115828204841417614f8d57614f8d61a204565b6001815b600184111561aa755780850481111561aa595761aa5961a204565b600184161561aa6757908102905b60019390931c92800261aa3e565b935093915050565b60008261aa8c57506001614f8d565b8161aa9957506000614f8d565b816001811461aaaf576002811461aab95761aad5565b6001915050614f8d565b60ff84111561aaca5761aaca61a204565b50506001821b614f8d565b5060208310610133831016604e8410600b841016171561aaf8575081810a614f8d565b61ab05600019848461aa3a565b806000190482111561ab195761ab1961a204565b029392505050565b6000615086838361aa7d565b60008161ab3c5761ab3c61a204565b506000190190565b6000835161ab568184602088016191cc565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161ab908160018401602088016191cc565b01600101949350505050565b81810360008312801583831316838312821617156183465761834661a20456fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122001ec0ce060384773f3d3389fab7bed652c6b8ee389a7471cce10d00d87a75a0c64736f6c634300081a003360a060405234801561001057600080fd5b50604051611eb9380380611eb983398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611e998339815191528261014c565b50610143600080516020611e998339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b608051611c22610277600039600081816101ca01528181610597015281816105f901528181610a280152610a8a0152611c226000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806385f438c1116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103fc578063e63ab1e91461040f578063eab103df1461043657600080fd5b8063d547741f146103b3578063d936547e146103c6578063d9caed12146103e957600080fd5b80639b19251a116100bd5780639b19251a14610385578063a217fddf14610398578063c709ab6e146103a057600080fd5b806385f438c11461030557806391d148541461032c5780639a5904271461037257600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102d25780635c975abb146102f25780638456cb59146102fd57600080fd5b806336568abe146102905780633f4ba83a146102a3578063570618e1146102ab57600080fd5b8063248a9ca311610176578063248a9ca314610226578063252f07bf146102585780632f2ff15d1461027d57600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610211575b600080fd5b6101b06101ab3660046115ca565b610449565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b61022461021f366004611677565b6104e2565b005b61024a6102343660046116ea565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61022461028b366004611703565b6106e3565b61022461029e366004611703565b61070f565b61022461076d565b61024a7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff166101b0565b6102246107a2565b61024a7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b061033a366004611703565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610224610380366004611733565b6107d4565b610224610393366004611733565b6108a2565b61024a600081565b6102246103ae366004611750565b610973565b6102246103c1366004611703565b610b79565b6101b06103d4366004611733565b60036020526000908152604090205460ff1681565b6102246103f73660046117f3565b610b9f565b61022461040a366004611834565b610ccb565b61024a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102246104443660046118d3565b610f2b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104dc57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104ea610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461051481610fc4565b61051c610fce565b73ffffffffffffffffffffffffffffffffffffffff851660009081526003602052604090205460ff1661057b576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bc73ffffffffffffffffffffffffffffffffffffffff86167f00000000000000000000000000000000000000000000000000000000000000008661100d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106369088908a90899089908990600401611939565b600060405180830381600087803b15801561065057600080fd5b505af1158015610664573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d58686866040516106c993929190611996565b60405180910390a3506106dc6001600055565b5050505050565b600082815260016020819052604090912001546106ff81610fc4565b610709838361108e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461075e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610768828261113b565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61079781610fc4565b61079f6111dc565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107cc81610fc4565b61079f61123b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107fe81610fc4565b73ffffffffffffffffffffffffffffffffffffffff821661084b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6108cc81610fc4565b73ffffffffffffffffffffffffffffffffffffffff8216610919576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61097b610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109a581610fc4565b6109ad610fce565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610a0c576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a4d73ffffffffffffffffffffffffffffffffffffffff87167f00000000000000000000000000000000000000000000000000000000000000008761100d565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610ac99089908b908a908a908a908a90600401611a77565b600060405180830381600087803b158015610ae357600080fd5b505af1158015610af7573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b87878787604051610b5e9493929190611ae8565b60405180910390a350610b716001600055565b505050505050565b60008281526001602081905260409091200154610b9581610fc4565b610709838361113b565b610ba7610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610bd181610fc4565b610bd9610fce565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205460ff16610c38576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5973ffffffffffffffffffffffffffffffffffffffff8416858461100d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610cb891815260200190565b60405180910390a3506107686001600055565b610cd3610f81565b610cdb610fce565b60045474010000000000000000000000000000000000000000900460ff16610d2f576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610d8e576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8616906370a0823190602401602060405180830381865afa158015610dfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1f9190611b14565b9050610e4373ffffffffffffffffffffffffffffffffffffffff8616333087611278565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efb9190611b14565b610f059190611b2d565b8787604051610f18959493929190611b67565b60405180910390a250610b716001600055565b6000610f3681610fc4565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610fbd576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61079f81336112be565b60025460ff161561100b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261076891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061134f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661113357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104dc565b5060006104dc565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561113357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104dc565b6111e46113e5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611243610fce565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112113390565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526107099186918216906323b872dd90608401611047565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661134b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b600061137173ffffffffffffffffffffffffffffffffffffffff841683611421565b905080516000141580156113965750808060200190518101906113949190611ba0565b155b15610768576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401611342565b60025460ff1661100b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061142f83836000611436565b9392505050565b606081471015611474576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611342565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161149d9190611bbd565b60006040518083038185875af1925050503d80600081146114da576040519150601f19603f3d011682016040523d82523d6000602084013e6114df565b606091505b50915091506114ef8683836114f9565b9695505050505050565b60608261150e5761150982611588565b61142f565b8151158015611532575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611581576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401611342565b508061142f565b8051156115985780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156115dc57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461142f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461079f57600080fd5b60008083601f84011261164057600080fd5b50813567ffffffffffffffff81111561165857600080fd5b60208301915083602082850101111561167057600080fd5b9250929050565b60008060008060006080868803121561168f57600080fd5b853561169a8161160c565b945060208601356116aa8161160c565b935060408601359250606086013567ffffffffffffffff8111156116cd57600080fd5b6116d98882890161162e565b969995985093965092949392505050565b6000602082840312156116fc57600080fd5b5035919050565b6000806040838503121561171657600080fd5b8235915060208301356117288161160c565b809150509250929050565b60006020828403121561174557600080fd5b813561142f8161160c565b60008060008060008060a0878903121561176957600080fd5b86356117748161160c565b955060208701356117848161160c565b945060408701359350606087013567ffffffffffffffff8111156117a757600080fd5b6117b389828a0161162e565b909450925050608087013567ffffffffffffffff8111156117d357600080fd5b87016060818a0312156117e557600080fd5b809150509295509295509295565b60008060006060848603121561180857600080fd5b83356118138161160c565b925060208401356118238161160c565b929592945050506040919091013590565b6000806000806000806080878903121561184d57600080fd5b863567ffffffffffffffff81111561186457600080fd5b61187089828a0161162e565b90975095505060208701356118848161160c565b935060408701359250606087013567ffffffffffffffff8111156118a757600080fd5b6118b389828a0161162e565b979a9699509497509295939492505050565b801515811461079f57600080fd5b6000602082840312156118e557600080fd5b813561142f816118c5565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061198b6080830184866118f0565b979650505050505050565b8381526040602082015260006119b06040830184866118f0565b95945050505050565b600081356119c68161160c565b73ffffffffffffffffffffffffffffffffffffffff168352602082013567ffffffffffffffff81168082146119fa57600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112611a3657600080fd5b820160208101903567ffffffffffffffff811115611a5357600080fd5b803603821315611a6257600080fd5b606060408601526119b06060860182846118f0565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a060608201526000611ac960a0830185876118f0565b8281036080840152611adb81856119b9565b9998505050505050505050565b848152606060208201526000611b026060830185876118f0565b828103604084015261198b81856119b9565b600060208284031215611b2657600080fd5b5051919050565b818103818111156104dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606081526000611b7b6060830187896118f0565b8560208401528281036040840152611b948185876118f0565b98975050505050505050565b600060208284031215611bb257600080fd5b815161142f816118c5565b6000825160005b81811015611bde5760208186018101518583015201611bc4565b50600092019182525091905056fea264697066735822122029d8a02c5c60bae7d404d08786de2b2dd6b37e11d10fa76c968c7809ff06f3b864736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161178338038061178383398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516114ab6102d86000396000818161021d01528181610531015281816108290152818161099a01528181610aef0152610c110152600081816101d1015281816104a1015281816105040152818161079901526107fc01526114ab6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c578063057e0f25146101a4575b600080fd5b61018f61018a366004610fd3565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b236600461108e565b610462565b005b6101b76101c7366004611126565b6105fc565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d366004611159565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611172565b6106a1565b6101b7610291366004611172565b6106cc565b6101b7610725565b60015460ff1661018f565b6101b76102b736600461119e565b61075a565b6101b76102ca366004611159565b6108ef565b6101b76102dd366004611159565b61095d565b6101b7610a07565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611172565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611172565b610a39565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610aa1565b61049c610aab565b6104c77f00000000000000000000000000000000000000000000000000000000000000008785610aea565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610563907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161130e565b600060405180830381600087803b15801561057d57600080fd5b505af1158015610591573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c878787866040516105e1949392919061137f565b60405180910390a2506105f46001600055565b505050505050565b610604610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062e81610aa1565b610636610aab565b610641848484610aea565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161068991815260200190565b60405180910390a25061069c6001600055565b505050565b6000828152600260205260409020600101546106bc81610aa1565b6106c68383610c72565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461071b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61069c8282610d72565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074f81610aa1565b610757610e31565b50565b610762610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078c81610aa1565b610794610aab565b6107bf7f00000000000000000000000000000000000000000000000000000000000000008684610aea565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610859907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016113b6565b600060405180830381600087803b15801561087357600080fd5b505af1158015610887573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d8686866040516108d593929190611408565b60405180910390a2506108e86001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61091981610aa1565b610921610aab565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610965610aab565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109f357600080fd5b505af11580156108e8573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3181610aa1565b610757610eae565b600082815260026020526040902060010154610a5481610aa1565b6106c68383610d72565b600260005403610a9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107578133610f07565b60015460ff1615610ae8576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7c9190611422565b610b86908461143b565b1115610bbe576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d083390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e39610f97565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610eb6610aab565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e84565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f93576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ae8576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fe557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461101557600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461104057600080fd5b919050565b60008083601f84011261105757600080fd5b50813567ffffffffffffffff81111561106f57600080fd5b60208301915083602082850101111561108757600080fd5b9250929050565b60008060008060008060a087890312156110a757600080fd5b6110b08761101c565b955060208701359450604087013567ffffffffffffffff8111156110d357600080fd5b6110df89828a01611045565b90955093505060608701359150608087013567ffffffffffffffff81111561110657600080fd5b87016060818a03121561111857600080fd5b809150509295509295509295565b60008060006060848603121561113b57600080fd5b6111448461101c565b95602085013595506040909401359392505050565b60006020828403121561116b57600080fd5b5035919050565b6000806040838503121561118557600080fd5b823591506111956020840161101c565b90509250929050565b6000806000806000608086880312156111b657600080fd5b6111bf8661101c565b945060208601359350604086013567ffffffffffffffff8111156111e257600080fd5b6111ee88828901611045565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff6112678261101c565b1682526000602082013567ffffffffffffffff811680821461128857600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126112c457600080fd5b820160208101903567ffffffffffffffff8111156112e157600080fd5b8036038213156112f057600080fd5b60606040860152611305606086018284611200565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061136060a083018587611200565b82810360808401526113728185611249565b9998505050505050505050565b848152606060208201526000611399606083018587611200565b82810360408401526113ab8185611249565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ab608083018486611200565b838152604060208201526000611305604083018486611200565b60006020828403121561143457600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212208052a0b07c987cb20e29d9c7c23109b8ff8b4b966ca2e18c207a88e5b4d79d4264736f6c634300081a00336080604052348015600f57600080fd5b506001600055610ec3806100246000396000f3fe60806040526004361061006e5760003560e01c80636ed701691161004b5780636ed70169146100e0578063c5131691146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063660b9de014610097578063676cc054146100b757005b3661007557005b005b34801561008357600080fd5b50610075610092366004610724565b610148565b3480156100a357600080fd5b506100756100b2366004610760565b6101de565b6100ca6100c536600461079b565b61021a565b6040516100d79190610896565b60405180910390f35b3480156100ec57600080fd5b5061007561024d565b34801561010157600080fd5b50610075610110366004610724565b610282565b6100756101233660046109ce565b61035d565b34801561013457600080fd5b50610075610143366004610aba565b6103a1565b6101506103d6565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610419565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b7f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e338260405161020f929190610bed565b60405180910390a150565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a19392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61028a6103d6565b6000610297600285610ccc565b9050806000036102d3576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102f573ffffffffffffffffffffffffffffffffffffffff8416338484610419565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610394959493929190610d07565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103949493929190610d91565b600260005403610412576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104ae9085906104b4565b50505050565b60006104d673ffffffffffffffffffffffffffffffffffffffff84168361054f565b905080516000141580156104fb5750808060200190518101906104f99190610e54565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061055d83836000610564565b9392505050565b6060814710156105a2576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610546565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105cb9190610e71565b60006040518083038185875af1925050503d8060008114610608576040519150601f19603f3d011682016040523d82523d6000602084013e61060d565b606091505b509150915061061d868383610627565b9695505050505050565b60608261063c57610637826106b6565b61055d565b8151158015610660575073ffffffffffffffffffffffffffffffffffffffff84163b155b156106af576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610546565b508061055d565b8051156106c65780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461071f57600080fd5b919050565b60008060006060848603121561073957600080fd5b83359250610749602085016106fb565b9150610757604085016106fb565b90509250925092565b60006020828403121561077257600080fd5b813567ffffffffffffffff81111561078957600080fd5b82016060818503121561055d57600080fd5b600080600083850360408112156107b157600080fd5b60208112156107bf57600080fd5b50839250602084013567ffffffffffffffff8111156107dd57600080fd5b8401601f810186136107ee57600080fd5b803567ffffffffffffffff81111561080557600080fd5b86602082840101111561081757600080fd5b939660209190910195509293505050565b60005b8381101561084357818101518382015260200161082b565b50506000910152565b60008151808452610864816020860160208601610828565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061055d602083018461084c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561091f5761091f6108a9565b604052919050565b600082601f83011261093857600080fd5b813567ffffffffffffffff811115610952576109526108a9565b61098360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108d8565b81815284602083860101111561099857600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106f857600080fd5b803561071f816109b5565b6000806000606084860312156109e357600080fd5b833567ffffffffffffffff8111156109fa57600080fd5b610a0686828701610927565b935050602084013591506040840135610a1e816109b5565b809150509250925092565b600067ffffffffffffffff821115610a4357610a436108a9565b5060051b60200190565b600082601f830112610a5e57600080fd5b8135610a71610a6c82610a29565b6108d8565b8082825260208201915060208360051b860101925085831115610a9357600080fd5b602085015b83811015610ab0578035835260209283019201610a98565b5095945050505050565b600080600060608486031215610acf57600080fd5b833567ffffffffffffffff811115610ae657600080fd5b8401601f81018613610af757600080fd5b8035610b05610a6c82610a29565b8082825260208201915060208360051b850101925088831115610b2757600080fd5b602084015b83811015610b6957803567ffffffffffffffff811115610b4b57600080fd5b610b5a8b602083890101610927565b84525060209283019201610b2c565b509550505050602084013567ffffffffffffffff811115610b8957600080fd5b610b9586828701610a4d565b925050610757604085016109c3565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2b836106fb565b1660408201526000602083013567ffffffffffffffff8116808214610c4f57600080fd5b6060840152506040830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610c8b57600080fd5b830160208101903567ffffffffffffffff811115610ca857600080fd5b803603821315610cb757600080fd5b6060608085015261061d60a085018284610ba4565b600082610d02577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d3c60a083018661084c565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610d87578151865260209586019590910190600101610d69565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e0f85835161084c565b94506020938401939190910190600101610dd5565b505050508281036040840152610e3a8186610d55565b915050610e4b606083018415159052565b95945050505050565b600060208284031215610e6657600080fd5b815161055d816109b5565b60008251610e83818460208701610828565b919091019291505056fea2646970667358221220d537f023478b5746f5f67760e722db6f4a51db89700ac69d6ba33759b8ac342f64736f6c634300081a0033a2646970667358221220d2b319d463bb7ef7aaf85c146da58cbc8dafc4de90ac9ebb35083a59e88cd24a64736f6c634300081a0033", + 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\":\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5062011031806200003e6000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c8063a217fddf1161017b578063cebad2a6116100d8578063e6afc7901161008c578063fa18c09b11610071578063fa18c09b146104db578063fa7626d4146104e3578063fe7bdbb2146104f057600080fd5b8063e6afc790146104cb578063f68bd1c0146104d357600080fd5b8063dd51e82f116100bd578063dd51e82f14610494578063e20c9f711461049c578063e63ab1e9146104a457600080fd5b8063cebad2a614610484578063d38b66cd1461048c57600080fd5b8063b124dbf51161012f578063ba414fa611610114578063ba414fa61461045c578063ccf2061614610474578063ce5871e11461047c57600080fd5b8063b124dbf51461044c578063b5508aa91461045457600080fd5b8063a56f7a4b11610160578063a56f7a4b14610415578063a783c7891461041d578063b0464fdc1461044457600080fd5b8063a217fddf14610405578063a397ffd21461040d57600080fd5b806344671b94116102295780637d7f772a116101dd57806385226c81116101c257806385226c81146103b457806385f438c1146103c9578063916a17c6146103f057600080fd5b80637d7f772a146103a45780637ebf744f146103ac57600080fd5b80635d62c8601161020e5780635d62c8601461035257806366d9a9a0146103875780636bdd212b1461039c57600080fd5b806344671b941461034257806351010e491461034a57600080fd5b80631ed7831c116102805780633e5e3c23116102655780633e5e3c231461032a5780633f7286f41461033257806343fd8c7d1461033a57600080fd5b80631ed7831c146102f75780632ade38801461031557600080fd5b80631226c655116102b15780631226c655146102df578063130daf59146102e75780631855c337146102ef57600080fd5b806304b974f9146102cd5780630a9254e4146102d7575b600080fd5b6102d56104f8565b005b6102d5610705565b6102d5611147565b6102d56112e8565b6102d56114af565b6102ff611624565b60405161030c9190619330565b60405180910390f35b61031d611686565b60405161030c91906193cc565b6102ff6117c8565b6102ff611828565b6102d5611888565b6102d5611bfa565b6102d5611efc565b6103797f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b60405190815260200161030c565b61038f6120d8565b60405161030c9190619532565b6102d561225a565b6102d561242a565b6102d561273f565b6103bc6128b4565b60405161030c919061962c565b6103797f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6103f8612984565b60405161030c919061963f565b610379600081565b6102d5612a7f565b6102d5612dbb565b6103797f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6103f8612f0d565b6102d5613008565b6103bc6132af565b61046461337f565b604051901515815260200161030c565b6102d5613453565b6102d56135a5565b6102d5613716565b6102d561393a565b6102d5613a95565b6102ff61428a565b6103797f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102d56142ea565b6102d5614558565b6102d561494d565b601f546104649060ff1681565b6102d5614caf565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052602854925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa79261059f926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b1580156105b957600080fd5b505af11580156105cd573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561065657600080fd5b505af115801561066a573d6000803e3d6000fd5b50506020546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169250631cff79cd91506106ba9060009085906004016196d6565b6000604051808303816000875af11580156106d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261070191908101906197e0565b5050565b602680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556027805482166112341790556028805490911661567817905560405161075790619231565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156107dc573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560285460405191169081906108259061923f565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610858573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260285460265492519085166024820152604481019390935292166064820152610947919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052615124565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906109d39061924d565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610a0f573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556020546025546028546026546040519385169492831693918316921690610a6a9061925b565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610aae573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560285460405163ca669fa760e01b815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610b3357600080fd5b505af1158015610b47573d6000803e3d6000fd5b50506025546028546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152911692506315d57fd49150604401600060405180830381600087803b158015610bb857600080fd5b505af1158015610bcc573d6000803e3d6000fd5b50505050604051610bdc90619269565b604051809103906000f080158015610bf8573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610ca457600080fd5b505af1158015610cb8573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610d2e57600080fd5b505af1158015610d42573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610da857600080fd5b505af1158015610dbc573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b158015610e2257600080fd5b505af1158015610e36573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e9857600080fd5b505af1158015610eac573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b158015610f1d57600080fd5b505af1158015610f31573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af1158015610fa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcb9190619815565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561104c57600080fd5b505af1158015611060573d6000803e3d6000fd5b5050604080516080810182526026546001600160a01b039081168252602454811660208084019182526001848601908152855191820190955260008152606084018190528351602d80549185167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911781559151602e8054965167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009097169190941617949094179091559093509150602f9061114290826198cb565b505050565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156111b957600080fd5b505af11580156111cd573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561125657600080fd5b505af115801561126a573d6000803e3d6000fd5b50506020546040517fae7a3a6f000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063ae7a3a6f91506024015b600060405180830381600087803b1580156112ce57600080fd5b505af11580156112e2573d6000803e3d6000fd5b50505050565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5ac1e07000000000000000000000000000000000000000000000000000000000179052602854925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa79261138f926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b1580156113a957600080fd5b505af11580156113bd573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ff3459a96000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561144757600080fd5b505af115801561145b573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93506106ba929091169085906004016196d6565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561152157600080fd5b505af1158015611535573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb337f378000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156115bf57600080fd5b505af11580156115d3573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f91506024016112b4565b6060601680548060200260200160405190810160405280929190818152602001828054801561167c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161165e575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156117bf57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156117a857838290600052602060002001805461171b90619837565b80601f016020809104026020016040519081016040528092919081815260200182805461174790619837565b80156117945780601f1061176957610100808354040283529160200191611794565b820191906000526020600020905b81548152906001019060200180831161177757829003601f168201915b5050505050815260200190600101906116fc565b5050505081525050815260200190600101906116aa565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801561167c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161165e575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561167c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161165e575050505050905090565b604080516001808252818301909252600091816020015b606081526020019060019003908161189f5790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e647279210000000000000000000000000000000000815250816000815181106118ff576118ff61998a565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a816000815181106119435761194361998a565b6020908102919091010152604051600190600090611969908590859085906024016199eb565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611a1c57600080fd5b505af1158015611a30573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611b1b9190600401619a23565b600060405180830381600087803b158015611b3557600080fd5b505af1158015611b49573d6000803e3d6000fd5b505060208054604080519283018152610123835260215490517f38e225270000000000000000000000000000000000000000000000000000000081526001600160a01b0392831695506338e225279450611bac9392909116908690600401619a36565b6000604051808303816000875af1158015611bcb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611bf391908101906197e0565b5050505050565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905260215492517ff30c7ba30000000000000000000000000000000000000000000000000000000081529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611cb0926001600160a01b031691600091879101619a68565b600060405180830381600087803b158015611cca57600080fd5b505af1158015611cde573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611d7057600080fd5b505af1158015611d84573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611e5657600080fd5b505af1158015611e6a573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611eb0906000908590619a90565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa79060240161142d565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260285463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611f9c57600080fd5b505af1158015611fb0573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561203957600080fd5b505af115801561204d573d6000803e3d6000fd5b50506020546040517f1b5ee25b0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169250631b5ee25b915084906120a2906000908690602d90600401619b91565b6000604051808303818588803b1580156120bb57600080fd5b505af11580156120cf573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156117bf578382906000526020600020906002020160405180604001604052908160008201805461212f90619837565b80601f016020809104026020016040519081016040528092919081815260200182805461215b90619837565b80156121a85780601f1061217d576101008083540402835291602001916121a8565b820191906000526020600020905b81548152906001019060200180831161218b57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561224257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116121ef5790505b505050505081525050815260200190600101906120fc565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed7016900000000000000000000000000000000000000000000000000000000179052602854925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa792612301926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b15801561231b57600080fd5b505af115801561232f573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156123b857600080fd5b505af11580156123cc573d6000803e3d6000fd5b5050602080546040805192830181526101238352517f38e225270000000000000000000000000000000000000000000000000000000081526001600160a01b0390911693506338e2252792506106ba91906000908690600401619a36565b604080516001808252818301909252600091816020015b60608152602001906001900390816124415790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e647279210000000000000000000000000000000000815250816000815181106124a1576124a161998a565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a816000815181106124e5576124e561998a565b602090810291909101015260405160019060009061250b908590859085906024016199eb565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156125be57600080fd5b505af11580156125d2573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506126bd9190600401619a23565b600060405180830381600087803b1580156126d757600080fd5b505af11580156126eb573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350611bac929091169085906004016196d6565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156127b157600080fd5b505af11580156127c5573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f0c8dc016000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561284f57600080fd5b505af1158015612863573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef91506024016112b4565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156117bf5783829060005260206000200180546128f790619837565b80601f016020809104026020016040519081016040528092919081815260200182805461292390619837565b80156129705780601f1061294557610100808354040283529160200191612970565b820191906000526020600020905b81548152906001019060200180831161295357829003601f168201915b5050505050815260200190600101906128d8565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156117bf5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612a6757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612a145790505b505050505081525050815260200190600101906129a8565b6021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612b0d57600080fd5b505af1158015612b21573d6000803e3d6000fd5b50506040517f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee925060009150a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612bdc57600080fd5b505af1158015612bf0573d6000803e3d6000fd5b5050602154604080518082018252600181527f3100000000000000000000000000000000000000000000000000000000000000602082015290516001600160a01b0390921693507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9250612c679160009190619a90565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612cc857600080fd5b505af1158015612cdc573d6000803e3d6000fd5b505060208054604080518084018252610123815260215482518084018452600181527f31000000000000000000000000000000000000000000000000000000000000009581019590955291517f38e225270000000000000000000000000000000000000000000000000000000081526001600160a01b0393841696506338e225279550612d7194919390921691600401619a36565b6000604051808303816000875af1158015612d90573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612db891908101906197e0565b50565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015612e2d57600080fd5b505af1158015612e41573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506115a59190600401619a23565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156117bf5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612ff057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612f9d5790505b50505050508152505081526020019060010190612f31565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156130ec57600080fd5b505af1158015613100573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506131eb9190600401619a23565b600060405180830381600087803b15801561320557600080fd5b505af1158015613219573d6000803e3d6000fd5b50506020546024546027546040517f36c99f3b0000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506336c99f3b945061327993928316929091169087908790602d90600401619bc5565b600060405180830381600087803b15801561329357600080fd5b505af11580156132a7573d6000803e3d6000fd5b505050505050565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156117bf5783829060005260206000200180546132f290619837565b80601f016020809104026020016040519081016040528092919081815260200182805461331e90619837565b801561336b5780601f106133405761010080835404028352916020019161336b565b820191906000526020600020905b81548152906001019060200180831161334e57829003601f168201915b5050505050815260200190600101906132d3565b60085460009060ff1615613397575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613428573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061344c9190619c1a565b1415905090565b6028546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156134c557600080fd5b505af11580156134d9573d6000803e3d6000fd5b5050602854604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506128359190600401619a23565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561361757600080fd5b505af115801561362b573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156136b457600080fd5b505af11580156136c8573d6000803e3d6000fd5b50506020546040517f10188aef000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b0390911692506310188aef91506024016112b4565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156137b657600080fd5b505af11580156137ca573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506138b59190600401619a23565b600060405180830381600087803b1580156138cf57600080fd5b505af11580156138e3573d6000803e3d6000fd5b50506020546021546040517f1b5ee25b0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631b5ee25b935086926120a29216908690602d90600401619b91565b604080516020810182526000808252915161395a91607b916024016196d6565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f676cc05400000000000000000000000000000000000000000000000000000000179052602854905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613a0d57600080fd5b505af1158015613a21573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fed699775000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e0915060240161142d565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613aee57600080fd5b505af1158015613b02573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613bed9190600401619a23565b600060405180830381600087803b158015613c0757600080fd5b505af1158015613c1b573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613c6f57600080fd5b505af1158015613c83573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613ce057600080fd5b505af1158015613cf4573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613ddf9190600401619a23565b600060405180830381600087803b158015613df957600080fd5b505af1158015613e0d573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613e6157600080fd5b505af1158015613e75573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613ed257600080fd5b505af1158015613ee6573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613f3a57600080fd5b505af1158015613f4e573d6000803e3d6000fd5b5050604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905292517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c06650000000000000000000000000000000000000000000000000000000091810191909152909350737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09101600060405180830381600087803b15801561403057600080fd5b505af1158015614044573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156140a157600080fd5b505af11580156140b5573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350614109929091169085906004016196d6565b6000604051808303816000875af1158015614128573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261415091908101906197e0565b5060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156141aa57600080fd5b505af11580156141be573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561421257600080fd5b505af1158015614226573d6000803e3d6000fd5b50506021546040517ff30c7ba3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f30c7ba39250611cb0916001600160a01b0316906000908690600401619a68565b6060601580548060200260200160405190810160405280929190818152602001828054801561167c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161165e575050505050905090565b60248054602754604051620186a09381018490526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602654905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156143ce57600080fd5b505af11580156143e2573d6000803e3d6000fd5b5050602654604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506144cd9190600401619a23565b600060405180830381600087803b1580156144e757600080fd5b505af11580156144fb573d6000803e3d6000fd5b50506020546024546027546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550635131ab59945061327993928316929091169087908790600401619c33565b604080516001808252818301909252600091816020015b606081526020019060019003908161456f5790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e647279210000000000000000000000000000000000815250816000815181106145cf576145cf61998a565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a816000815181106146135761461361998a565b6020908102919091010152604051600190600090614639908590859085906024016199eb565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff05b6abf0000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916146f6916001600160a01b0391909116906000908690600401619a68565b600060405180830381600087803b15801561471057600080fd5b505af1158015614724573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156147b657600080fd5b505af11580156147ca573d6000803e3d6000fd5b50506020546040517f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146935061481192506001600160a01b0390911690879087908790619c6a565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156148a757600080fd5b505af11580156148bb573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150614901906000908590619a90565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024016126bd565b604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025909101909152602154670de0b6b3a764000091906001600160a01b0316316149ac816000615143565b6021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614a3a57600080fd5b505af1158015614a4e573d6000803e3d6000fd5b50506020546040517f8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e2649350614a9292506001600160a01b0390911690602d90619cb2565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614b2857600080fd5b505af1158015614b3c573d6000803e3d6000fd5b5050602154604051600093506001600160a01b0390911691507ff196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b90614b8f90670de0b6b3a7640000908790602d90619cd4565b60405180910390a360285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614bf057600080fd5b505af1158015614c04573d6000803e3d6000fd5b50506020546021546040517f1b5ee25b0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631b5ee25b93508792614c5b9216908790602d90600401619b91565b6000604051808303818588803b158015614c7457600080fd5b505af1158015614c88573d6000803e3d6000fd5b50506021546001600160a01b03163192506112e29150829050670de0b6b3a7640000615143565b60408051808201909152600f81527f48656c6c6f2c20466f756e6472792100000000000000000000000000000000006020820152602154602a90600190670de0b6b3a764000090614d0c906000906001600160a01b031631615143565b6000848484604051602401614d2393929190619ced565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260215490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614de7916001600160a01b039190911690670de0b6b3a7640000908690600401619a68565b600060405180830381600087803b158015614e0157600080fd5b505af1158015614e15573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614ea757600080fd5b505af1158015614ebb573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa9350614f0492506001600160a01b03909116908590899089908990619d17565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614f9a57600080fd5b505af1158015614fae573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150614ffb90670de0b6b3a7640000908590619a90565b60405180910390a260285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561505c57600080fd5b505af1158015615070573d6000803e3d6000fd5b50506020546021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935086926150c492169086906004016196d6565b60006040518083038185885af11580156150e2573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261510b91908101906197e0565b50602154611bf39083906001600160a01b031631615143565b600061512e619277565b6151398484836151c2565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156151ae57600080fd5b505afa1580156132a7573d6000803e3d6000fd5b6000806151cf858461523d565b90506152326040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161521d9291906196d6565b60405160208183030381529060405285615249565b9150505b9392505050565b60006152368383615277565b60c0810151516000901561526d5761526684848460c00151615292565b9050615236565b6152668484615438565b60006152838383615523565b61523683836020015184615249565b60008061529d61552f565b905060006152ab8683615602565b905060006152c28260600151836020015185615aa8565b905060006152d283838989615cba565b905060006152df82616b37565b602081015181519192509060030b1561535257898260400151604051602001615309929190619d58565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261534991600401619a23565b60405180910390fd5b60006153956040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616d06565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906153e8908490600401619a23565b602060405180830381865afa158015615405573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906154299190619dd9565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061548d908790600401619a23565b600060405180830381865afa1580156154aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154d291908101906197e0565b9050600061550082856040516020016154ec929190619e02565b604051602081830303815290604052616f06565b90506001600160a01b038116615139578484604051602001615309929190619e31565b61070182826000616f19565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906155b6908490600401619edc565b600060405180830381865afa1580156155d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526155fb9190810190619f23565b9250505090565b6156346040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d905061567f6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6156888561701c565b6020820152600061569886617401565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156156da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157029190810190619f23565b8683856020015160405160200161571c9493929190619f6c565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190615774908590600401619a23565b600060405180830381865afa158015615791573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157b99190810190619f23565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061580190849060040161a070565b602060405180830381865afa15801561581e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906158429190619815565b6158575781604051602001615309919061a0c2565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061589c90849060040161a154565b600060405180830381865afa1580156158b9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526158e19190810190619f23565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061592890849060040161a1a6565b602060405180830381865afa158015615945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906159699190619815565b156159fe576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906159b390849060040161a1a6565b600060405180830381865afa1580156159d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526159f89190810190619f23565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001615a23919061a1f8565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401615a4f92919061a264565b600060405180830381865afa158015615a6c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615a949190810190619f23565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081615ac45790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110615b2457615b2461998a565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110615b7857615b7861998a565b602002602001018190525084604051602001615b94919061a289565b60405160208183030381529060405281600281518110615bb657615bb661998a565b602002602001018190525082604051602001615bd2919061a2f5565b60405160208183030381529060405281600381518110615bf457615bf461998a565b60200260200101819052506000615c0a82616b37565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250615c9b9060408051808201825260008082526020918201528151808301909252845182528085019082015290617684565b615cb05785604051602001615309919061a336565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615d0a565b511590565b615e7e57826020015115615dc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401615349565b8260c0015115615e7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401615349565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615e9757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615ef29061a3f6565b935060ff1681518110615f0757615f0761998a565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615f58919061a415565b604051602081830303815290604052828280615f739061a3f6565b935060ff1681518110615f8857615f8861998a565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615fd59061a3f6565b935060ff1681518110615fea57615fea61998a565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806160379061a3f6565b935060ff168151811061604c5761604c61998a565b602002602001018190525087602001518282806160689061a3f6565b935060ff168151811061607d5761607d61998a565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806160ca9061a3f6565b935060ff16815181106160df576160df61998a565b6020908102919091010152875182826160f78161a3f6565b935060ff168151811061610c5761610c61998a565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806161599061a3f6565b935060ff168151811061616e5761616e61998a565b6020026020010181905250616182466176e5565b828261618d8161a3f6565b935060ff16815181106161a2576161a261998a565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806161ef9061a3f6565b935060ff16815181106162045761620461998a565b60200260200101819052508682828061621c9061a3f6565b935060ff16815181106162315761623161998a565b60209081029190910101528551156163585760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826162828161a3f6565b935060ff16815181106162975761629761998a565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906162e7908990600401619a23565b600060405180830381865afa158015616304573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261632c9190810190619f23565b82826163378161a3f6565b935060ff168151811061634c5761634c61998a565b60200260200101819052505b8460200151156164285760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826163a18161a3f6565b935060ff16815181106163b6576163b661998a565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806164039061a3f6565b935060ff16815181106164185761641861998a565b60200260200101819052506165ef565b616460615d058660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6164f35760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826164a38161a3f6565b935060ff16815181106164b8576164b861998a565b60200260200101819052508460a001516040516020016164d8919061a289565b6040516020818303038152906040528282806164039061a3f6565b8460c0015115801561653657506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261653490511590565b155b156165ef5760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261657a8161a3f6565b935060ff168151811061658f5761658f61998a565b60200260200101819052506165a388617785565b6040516020016165b3919061a289565b6040516020818303038152906040528282806165ce9061a3f6565b935060ff16815181106165e3576165e361998a565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261662390511590565b6166b85760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826166668161a3f6565b935060ff168151811061667b5761667b61998a565b602002602001018190525084604001518282806166979061a3f6565b935060ff16815181106166ac576166ac61998a565b60200260200101819052505b6060850151156167d95760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826167018161a3f6565b935060ff16815181106167165761671661998a565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616785573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167ad9190810190619f23565b82826167b88161a3f6565b935060ff16815181106167cd576167cd61998a565b60200260200101819052505b60e085015151156168805760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826168238161a3f6565b935060ff16815181106168385761683861998a565b60200260200101819052506168548560e00151600001516176e5565b828261685f8161a3f6565b935060ff16815181106168745761687461998a565b60200260200101819052505b60e0850151602001511561692a5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826168cd8161a3f6565b935060ff16815181106168e2576168e261998a565b60200260200101819052506168fe8560e00151602001516176e5565b82826169098161a3f6565b935060ff168151811061691e5761691e61998a565b60200260200101819052505b60e085015160400151156169d45760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826169778161a3f6565b935060ff168151811061698c5761698c61998a565b60200260200101819052506169a88560e00151604001516176e5565b82826169b38161a3f6565b935060ff16815181106169c8576169c861998a565b60200260200101819052505b60e08501516060015115616a7e5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282616a218161a3f6565b935060ff1681518110616a3657616a3661998a565b6020026020010181905250616a528560e00151606001516176e5565b8282616a5d8161a3f6565b935060ff1681518110616a7257616a7261998a565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616a9c57616a9c6196f8565b604051908082528060200260200182016040528015616acf57816020015b6060815260200190600190039081616aba5790505b50905060005b8260ff168160ff161015616b2857838160ff1681518110616af857616af861998a565b6020026020010151828260ff1681518110616b1557616b1561998a565b6020908102919091010152600101616ad5565b5093505050505b949350505050565b616b5e6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91616be49186910161a480565b600060405180830381865afa158015616c01573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616c299190810190619f23565b90506000616c378683618274565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401616c67919061962c565b6000604051808303816000875af1158015616c86573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616cae919081019061a4c7565b805190915060030b15801590616cc75750602081015151155b8015616cd65750604081015151155b15615cb05781600081518110616cee57616cee61998a565b6020026020010151604051602001615309919061a57d565b60606000616d3b8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616d729082905b906183c9565b15616ecf576000616def82616de984616de3616db58a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906183f0565b90618452565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616e539082906183c9565b15616ebd57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616eba905b82906184d7565b90505b616ec6816184fd565b92505050615236565b8215616ee857848460405160200161530992919061a769565b5050604080516020810190915260008152615236565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616f2857505050565b6000616f35848484618566565b90506000616f4282616b37565b602081015181519192509060030b158015616fde5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616fde90604080518082018252600080825260209182015281518083019092528451825280850190820152616d6c565b15616feb57505050505050565b6040820151511561700b578160400151604051602001615309919061a810565b80604051602001615309919061a86e565b606060006170518360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506170b6905b8290617684565b1561712557604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261523690617120908390618b01565b6184fd565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617187905b8290618b8b565b60010361725457604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171ed90616eb3565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261523690617120905b83906184d7565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172b3906170af565b156173ea57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061731b908390618c25565b90506000816001835161732e919061a8d9565b8151811061733e5761733e61998a565b602002602001015190506173e16171206173b46040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618b01565b95945050505050565b82604051602001615309919061a8ec565b50919050565b606060006174368360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617498906170af565b156174a657615236816184fd565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261750590617180565b60010361756f57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615236906171209061724d565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175ce906170af565b156173ea57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617636908390618c25565b9050600181511115617672578060028251617651919061a8d9565b815181106176615761766161998a565b602002602001015192505050919050565b5082604051602001615309919061a8ec565b8051825160009111156176995750600061513d565b815183516020850151600092916176af9161a9ca565b6176b9919061a8d9565b9050826020015181036176d057600191505061513d565b82516020840151819020912014905092915050565b606060006176f283618cca565b600101905060008167ffffffffffffffff811115617712576177126196f8565b6040519080825280601f01601f19166020018201604052801561773c576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461774657509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617811905b8290618dac565b1561785157505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178b09061780a565b156178f057505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261794f9061780a565b1561798f57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179ee9061780a565b80617a535750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a539061780a565b15617a9357505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617af29061780a565b80617b575750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b579061780a565b15617b9757505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617bf69061780a565b80617c5b5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c5b9061780a565b15617c9b57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cfa9061780a565b80617d5f5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d5f9061780a565b15617d9f57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dfe9061780a565b15617e3e57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e9d9061780a565b15617edd57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f3c9061780a565b15617f7c57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617fdb9061780a565b1561801b57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261807a9061780a565b156180ba57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526181199061780a565b8061817e5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261817e9061780a565b156181be57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261821d9061780a565b1561825d57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151615309929060200161a9dd565b60608060005b84518110156182ff57818582815181106182965761829661998a565b60200260200101516040516020016182af929190619e02565b6040516020818303038152906040529150600185516182ce919061a8d9565b81146182f757816040516020016182e5919061ab46565b60405160208183030381529060405291505b60010161827a565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161831857905050905083816000815181106183435761834361998a565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106183975761839761998a565b602002602001018190525081816002815181106183b6576183b661998a565b6020908102919091010152949350505050565b60208083015183518351928401516000936183e79291849190618dc0565b14159392505050565b604080518082019091526000808252602082015260006184228460000151856020015185600001518660200151618ed1565b9050836020015181618434919061a8d9565b8451859061844390839061a8d9565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561847757508161513d565b602080830151908401516001911461849e5750815160208481015190840151829020919020145b80156184cf578251845185906184b590839061a8d9565b90525082516020850180516184cb90839061a9ca565b9052505b509192915050565b60408051808201909152600080825260208201526184f6838383618ff1565b5092915050565b60606000826000015167ffffffffffffffff81111561851e5761851e6196f8565b6040519080825280601f01601f191660200182016040528015618548576020820181803683370190505b50905060006020820190506184f6818560200151866000015161909c565b6060600061857261552f565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161858f57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806185ea9061a3f6565b935060ff16815181106185ff576185ff61998a565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618650919061ab87565b60405160208183030381529060405282828061866b9061a3f6565b935060ff16815181106186805761868061998a565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806186cd9061a3f6565b935060ff16815181106186e2576186e261998a565b6020026020010181905250826040516020016186fe919061a2f5565b6040516020818303038152906040528282806187199061a3f6565b935060ff168151811061872e5761872e61998a565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061877b9061a3f6565b935060ff16815181106187905761879061998a565b60200260200101819052506187a58784619116565b82826187b08161a3f6565b935060ff16815181106187c5576187c561998a565b6020908102919091010152855151156188715760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826188178161a3f6565b935060ff168151811061882c5761882c61998a565b6020026020010181905250618845866000015184619116565b82826188508161a3f6565b935060ff16815181106188655761886561998a565b60200260200101819052505b8560800151156188df5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826188ba8161a3f6565b935060ff16815181106188cf576188cf61998a565b6020026020010181905250618945565b84156189455760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826189248161a3f6565b935060ff16815181106189395761893961998a565b60200260200101819052505b604086015151156189e15760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261898f8161a3f6565b935060ff16815181106189a4576189a461998a565b602002602001018190525085604001518282806189c09061a3f6565b935060ff16815181106189d5576189d561998a565b60200260200101819052505b856060015115618a4b5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282618a2a8161a3f6565b935060ff1681518110618a3f57618a3f61998a565b60200260200101819052505b60008160ff1667ffffffffffffffff811115618a6957618a696196f8565b604051908082528060200260200182016040528015618a9c57816020015b6060815260200190600190039081618a875790505b50905060005b8260ff168160ff161015618af557838160ff1681518110618ac557618ac561998a565b6020026020010151828260ff1681518110618ae257618ae261998a565b6020908102919091010152600101618aa2565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618b2657508161513d565b81518351602085015160009291618b3c9161a9ca565b618b46919061a8d9565b60208401519091506001908214618b67575082516020840151819020908220145b8015618b8257835185518690618b7e90839061a8d9565b9052505b50929392505050565b6000808260000151618baf8560000151866020015186600001518760200151618ed1565b618bb9919061a9ca565b90505b83516020850151618bcd919061a9ca565b81116184f65781618bdd8161abcc565b9250508260000151618c14856020015183618bf8919061a8d9565b8651618c04919061a8d9565b8386600001518760200151618ed1565b618c1e919061a9ca565b9050618bbc565b60606000618c338484618b8b565b618c3e90600161a9ca565b67ffffffffffffffff811115618c5657618c566196f8565b604051908082528060200260200182016040528015618c8957816020015b6060815260200190600190039081618c745790505b50905060005b8151811015616efe57618ca561712086866184d7565b828281518110618cb757618cb761998a565b6020908102919091010152600101618c8f565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310618d13577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618d3f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310618d5d57662386f26fc10000830492506010015b6305f5e1008310618d75576305f5e100830492506008015b6127108310618d8957612710830492506004015b60648310618d9b576064830492506002015b600a831061513d5760010192915050565b6000618db88383619156565b159392505050565b600080858411618ec75760208411618e735760008415618e0b576001618de786602061a8d9565b618df290600861abe6565b618dfd90600261ace4565b618e07919061a8d9565b1990505b8351811685618e1a898961a9ca565b618e24919061a8d9565b805190935082165b818114618e5e57878411618e465787945050505050616b2f565b83618e508161acf0565b945050828451169050618e2c565b618e68878561a9ca565b945050505050616b2f565b838320618e80858861a8d9565b618e8a908761a9ca565b91505b858210618ec557848220808203618eb257618ea8868461a9ca565b9350505050616b2f565b618ebd60018461a8d9565b925050618e8d565b505b5092949350505050565b60008381868511618fdc5760208511618f8b5760008515618f1d576001618ef987602061a8d9565b618f0490600861abe6565b618f0f90600261ace4565b618f19919061a8d9565b1990505b84518116600087618f2e8b8b61a9ca565b618f38919061a8d9565b855190915083165b828114618f7d57818610618f6557618f588b8b61a9ca565b9650505050505050616b2f565b85618f6f8161abcc565b965050838651169050618f40565b859650505050505050616b2f565b508383206000905b618f9d868961a8d9565b8211618fda57858320808203618fb95783945050505050616b2f565b618fc460018561a9ca565b9350508180618fd29061abcc565b925050618f93565b505b618fe6878761a9ca565b979650505050505050565b604080518082019091526000808252602082015260006190238560000151866020015186600001518760200151618ed1565b60208087018051918601919091525190915061903f908261a8d9565b835284516020860151619052919061a9ca565b81036190615760008552619093565b8351835161906f919061a9ca565b8551869061907e90839061a8d9565b905250835161908d908261a9ca565b60208601525b50909392505050565b602081106190d457815183526190b360208461a9ca565b92506190c060208361a9ca565b91506190cd60208261a8d9565b905061909c565b60001981156191035760016190ea83602061a8d9565b6190f69061010061ace4565b619100919061a8d9565b90505b9151835183169219169190911790915250565b606060006191248484615602565b805160208083015160405193945061913e9390910161ad07565b60405160208183030381529060405291505092915050565b8151815160009190811115619169575081515b6020808501519084015160005b8381101561922257825182518082146191f25760001960208710156191d1576001846191a389602061a8d9565b6191ad919061a9ca565b6191b890600861abe6565b6191c390600261ace4565b6191cd919061a8d9565b1990505b81811683821681810391146191ef57975061513d9650505050505050565b50505b6191fd60208661a9ca565b945061920a60208561a9ca565b9350505060208161921b919061a9ca565b9050619176565b5084518651615cb0919061ad5f565b610c9f806200ad8083390190565b6112a6806200ba1f83390190565b611c7f806200ccc583390190565b6117aa806200e94483390190565b610f0e80620100ee83390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016192ba6192bf565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016192ba6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156193715783516001600160a01b031683526020938401939092019160010161934a565b509095945050505050565b60005b8381101561939757818101518382015260200161937f565b50506000910152565b600081518084526193b881602086016020860161937c565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156194c8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156194ae577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526194988486516193a0565b602095860195909450929092019160010161945e565b5091975050506020948501949290920191506001016193f4565b50929695505050505050565b600081518084526020840193506020830160005b828110156195285781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016194e8565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156194c8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261959e60408801826193a0565b90506020820151915086810360208801526195b981836194d4565b96505050602093840193919091019060010161955a565b600082825180855260208501945060208160051b8301016020850160005b8381101561962057601f1985840301885261960a8383516193a0565b60209889019890935091909101906001016195ee565b50909695505050505050565b60208152600061523660208301846195d0565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156194c8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526196c060408701826194d4565b9550506020938401939190910190600101619667565b6001600160a01b0383168152604060208201526000616b2f60408301846193a0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561974a5761974a6196f8565b60405290565b60008067ffffffffffffffff84111561976b5761976b6196f8565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561979a5761979a6196f8565b6040528381529050808284018510156197b257600080fd5b616efe84602083018561937c565b600082601f8301126197d157600080fd5b61523683835160208501619750565b6000602082840312156197f257600080fd5b815167ffffffffffffffff81111561980957600080fd5b615139848285016197c0565b60006020828403121561982757600080fd5b8151801515811461523657600080fd5b600181811c9082168061984b57607f821691505b6020821081036173fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f82111561114257806000526020600020601f840160051c810160208510156198ab5750805b601f840160051c820191505b81811015611bf357600081556001016198b7565b815167ffffffffffffffff8111156198e5576198e56196f8565b6198f9816198f38454619837565b84619884565b6020601f82116001811461992d57600083156199155750848201515b600019600385901b1c1916600184901b178455611bf3565b600084815260208120601f198516915b8281101561995d578785015182556020948501946001909201910161993d565b508482101561997b5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020840193506020830160005b828110156195285781518652602095860195909101906001016199cd565b6060815260006199fe60608301866195d0565b8281036020840152619a1081866199b9565b9150508215156040830152949350505050565b60208152600061523660208301846193a0565b6001600160a01b0384511681526001600160a01b03831660208201526060604082015260006173e160608301846193a0565b6001600160a01b03841681528260208201526060604082015260006173e160608301846193a0565b828152604060208201526000616b2f60408301846193a0565b6001600160a01b038154168252600060018201546001600160a01b038116602085015267ffffffffffffffff8160a01c16604085015250600282016080606085015260008154619af881619837565b8060808801526001821660008114619b175760018114619b5157619b85565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660a089015260a082151560051b8901019350619b85565b84600052602060002060005b83811015619b7c5781548a820160a00152600190910190602001619b5d565b890160a0019450505b50919695505050505050565b6001600160a01b0384168152606060208201526000619bb360608301856193a0565b8281036040840152615cb08185619aa9565b6001600160a01b03861681526001600160a01b038516602082015283604082015260a060608201526000619bfc60a08301856193a0565b8281036080840152619c0e8185619aa9565b98975050505050505050565b600060208284031215619c2c57600080fd5b5051919050565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000615cb060808301846193a0565b6001600160a01b0385168152608060208201526000619c8c60808301866195d0565b8281036040840152619c9e81866199b9565b915050821515606083015295945050505050565b6001600160a01b0383168152604060208201526000616b2f6040830184619aa9565b838152606060208201526000619bb360608301856193a0565b606081526000619d0060608301866193a0565b602083019490945250901515604090910152919050565b6001600160a01b038616815284602082015260a060408201526000619d3f60a08301866193a0565b6060830194909452509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351619d9081601a85016020880161937c565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351619dcd81601c84016020880161937c565b01601c01949350505050565b600060208284031215619deb57600080fd5b81516001600160a01b038116811461523657600080fd5b60008351619e1481846020880161937c565b835190830190619e2881836020880161937c565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351619e6981601a85016020880161937c565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351619ea681603384016020880161937c565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061523660808301846193a0565b600060208284031215619f3557600080fd5b815167ffffffffffffffff811115619f4c57600080fd5b8201601f81018413619f5d57600080fd5b61513984825160208401619750565b60008551619f7e818460208a0161937c565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619fb8816001840160208a0161937c565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451619ff681600284016020890161937c565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161a03881600284016020880161937c565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061a08360408301846193a0565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161a0fa81601f85016020870161937c565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061a16760408301846193a0565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061a1b960408301846193a0565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161a23081601485016020870161937c565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061a27760408301856193a0565b828103602084015261523281856193a0565b7f220000000000000000000000000000000000000000000000000000000000000081526000825161a2c181600185016020870161937c565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161a30781846020870161937c565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161a3ba81604b85016020870161937c565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff810361a40c5761a40c61a3c7565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161a47381602985016020870161937c565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061523660808301846193a0565b60006020828403121561a4d957600080fd5b815167ffffffffffffffff81111561a4f057600080fd5b82016060818503121561a50257600080fd5b61a50a619727565b81518060030b811461a51b57600080fd5b8152602082015167ffffffffffffffff81111561a53757600080fd5b61a543868285016197c0565b602083015250604082015167ffffffffffffffff81111561a56357600080fd5b61a56f868285016197c0565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a5db81602185016020870161937c565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a7c781602185016020880161937c565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a80481602e84016020880161937c565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161a47381602985016020870161937c565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a8cc81602285016020870161937c565b9190910160220192915050565b8181038181111561513d5761513d61a3c7565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a92481600e85016020870161937c565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561513d5761513d61a3c7565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161aa1581601885016020880161937c565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161aa5281601c84016020880161937c565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161ab5881846020870161937c565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161abbf81601c85016020870161937c565b91909101601c0192915050565b6000600019820361abdf5761abdf61a3c7565b5060010190565b808202811582820484141761513d5761513d61a3c7565b6001815b600184111561ac385780850481111561ac1c5761ac1c61a3c7565b600184161561ac2a57908102905b60019390931c92800261ac01565b935093915050565b60008261ac4f5750600161513d565b8161ac5c5750600061513d565b816001811461ac72576002811461ac7c5761ac98565b600191505061513d565b60ff84111561ac8d5761ac8d61a3c7565b50506001821b61513d565b5060208310610133831016604e8410600b841016171561acbb575081810a61513d565b61acc8600019848461abfd565b806000190482111561acdc5761acdc61a3c7565b029392505050565b6000615236838361ac40565b60008161acff5761acff61a3c7565b506000190190565b6000835161ad1981846020880161937c565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161ad5381600184016020880161937c565b01600101949350505050565b81810360008312801583831316838312821617156184f6576184f661a3c756fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122001ec0ce060384773f3d3389fab7bed652c6b8ee389a7471cce10d00d87a75a0c64736f6c634300081a003360a060405234801561001057600080fd5b50604051611c7f380380611c7f83398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611c5f8339815191528261014c565b50610143600080516020611c5f8339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b6080516119e8610277600039600081816101ca01528181610556015281816105ab015281816107c8015261081d01526119e86000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638456cb59116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103d5578063e63ab1e9146103e8578063eab103df1461040f57600080fd5b8063d547741f1461038c578063d936547e1461039f578063d9caed12146103c257600080fd5b80639a590427116100bd5780639a5904271461035e5780639b19251a14610371578063a217fddf1461038457600080fd5b80638456cb59146102f657806385f438c1146102fe57806391d148541461032557600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102c55780635c975abb146102d85780635eb72e15146102e357600080fd5b806336568abe146102835780633f4ba83a14610296578063570618e11461029e57600080fd5b8063248a9ca311610176578063248a9ca314610219578063252f07bf1461024b5780632f2ff15d1461027057600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610204575b600080fd5b6101b06101ab3660046113c2565b610422565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bc565b610217610212366004611462565b6104bb565b005b61023d6102273660046114d5565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61021761027e3660046114ee565b61067b565b6102176102913660046114ee565b6106a7565b6102176106f8565b61023d7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec906001600160a01b031681565b60025460ff166101b0565b6102176102f136600461151e565b61072d565b6102176108f2565b61023d7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b06103333660046114ee565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61021761036c3660046115c1565b610924565b61021761037f3660046115c1565b6109d8565b61023d600081565b61021761039a3660046114ee565b610a8f565b6101b06103ad3660046115c1565b60036020526000908152604090205460ff1681565b6102176103d03660046115de565b610ab5565b6102176103e336600461161f565b610bad565b61023d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61021761041d3660046116be565b610dd9565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104b557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104c3610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104ed81610e72565b6104f5610e7c565b6001600160a01b03851660009081526003602052604090205460ff16610547576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61057b6001600160a01b0386167f000000000000000000000000000000000000000000000000000000000000000086610ebb565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906105e89088908a90899089908990600401611724565b600060405180830381600087803b15801561060257600080fd5b505af1158015610616573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161066193929190611767565b60405180910390a3506106746001600055565b5050505050565b6000828152600160208190526040909120015461069781610e72565b6106a18383610f2f565b50505050565b6001600160a01b03811633146106e9576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106f38282610fc2565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61072281610e72565b61072a611049565b50565b610735610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461075f81610e72565b610767610e7c565b6001600160a01b03861660009081526003602052604090205460ff166107b9576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107ed6001600160a01b0387167f000000000000000000000000000000000000000000000000000000000000000087610ebb565b6040517f36c99f3b0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b9061085c9089908b908a908a908a908a90600401611857565b600060405180830381600087803b15801561087657600080fd5b505af115801561088a573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37878787876040516108d794939291906118ae565b60405180910390a3506108ea6001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61091c81610e72565b61072a61109b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61094e81610e72565b6001600160a01b03821661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a0281610e72565b6001600160a01b038216610a42576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610aab81610e72565b6106a18383610fc2565b610abd610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ae781610e72565b610aef610e7c565b6001600160a01b03831660009081526003602052604090205460ff16610b41576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b556001600160a01b0384168584610ebb565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610b9a91815260200190565b60405180910390a3506106f36001600055565b610bb5610e2f565b610bbd610e7c565b60045474010000000000000000000000000000000000000000900460ff16610c11576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610c63576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce791906118da565b9050610cfe6001600160a01b0386163330876110d8565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610d85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da991906118da565b610db391906118f3565b8787604051610dc695949392919061192d565b60405180910390a2506108ea6001600055565b6000610de481610e72565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610e6b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61072a8133611111565b60025460ff1615610eb9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b038381166024830152604482018390526106f391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611188565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16610fba5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104b5565b5060006104b5565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1615610fba5760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104b5565b611051611204565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6110a3610e7c565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861107e3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106a19186918216906323b872dd90608401610ee8565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611184576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b600061119d6001600160a01b03841683611240565b905080516000141580156111c25750808060200190518101906111c09190611966565b155b156106f3576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161117b565b60025460ff16610eb9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061124e83836000611255565b9392505050565b606081471015611293576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161117b565b600080856001600160a01b031684866040516112af9190611983565b60006040518083038185875af1925050503d80600081146112ec576040519150601f19603f3d011682016040523d82523d6000602084013e6112f1565b606091505b509150915061130186838361130b565b9695505050505050565b6060826113205761131b82611380565b61124e565b815115801561133757506001600160a01b0384163b155b15611379576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161117b565b508061124e565b8051156113905780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156113d457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461124e57600080fd5b6001600160a01b038116811461072a57600080fd5b60008083601f84011261142b57600080fd5b50813567ffffffffffffffff81111561144357600080fd5b60208301915083602082850101111561145b57600080fd5b9250929050565b60008060008060006080868803121561147a57600080fd5b853561148581611404565b9450602086013561149581611404565b935060408601359250606086013567ffffffffffffffff8111156114b857600080fd5b6114c488828901611419565b969995985093965092949392505050565b6000602082840312156114e757600080fd5b5035919050565b6000806040838503121561150157600080fd5b82359150602083013561151381611404565b809150509250929050565b60008060008060008060a0878903121561153757600080fd5b863561154281611404565b9550602087013561155281611404565b945060408701359350606087013567ffffffffffffffff81111561157557600080fd5b61158189828a01611419565b909450925050608087013567ffffffffffffffff8111156115a157600080fd5b87016080818a0312156115b357600080fd5b809150509295509295509295565b6000602082840312156115d357600080fd5b813561124e81611404565b6000806000606084860312156115f357600080fd5b83356115fe81611404565b9250602084013561160e81611404565b929592945050506040919091013590565b6000806000806000806080878903121561163857600080fd5b863567ffffffffffffffff81111561164f57600080fd5b61165b89828a01611419565b909750955050602087013561166f81611404565b935060408701359250606087013567ffffffffffffffff81111561169257600080fd5b61169e89828a01611419565b979a9699509497509295939492505050565b801515811461072a57600080fd5b6000602082840312156116d057600080fd5b813561124e816116b0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061175c6080830184866116db565b979650505050505050565b8381526040602082015260006117816040830184866116db565b95945050505050565b6000813561179781611404565b6001600160a01b0316835260208201356117b081611404565b6001600160a01b03166020840152604082013567ffffffffffffffff81168082146117da57600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261181657600080fd5b820160208101903567ffffffffffffffff81111561183357600080fd5b80360382131561184257600080fd5b608060608601526117816080860182846116db565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061188f60a0830185876116db565b82810360808401526118a1818561178a565b9998505050505050505050565b8481526060602082015260006118c86060830185876116db565b828103604084015261175c818561178a565b6000602082840312156118ec57600080fd5b5051919050565b818103818111156104b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006119416060830187896116db565b856020840152828103604084015261195a8185876116db565b98975050505050505050565b60006020828403121561197857600080fd5b815161124e816116b0565b6000825160005b818110156119a4576020818601810151858301520161198a565b50600092019182525091905056fea2646970667358221220dc0b6596b7b61441087636724be59e8874b026b619128cbecb229a5609d1f02d64736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b506040516117aa3803806117aa83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516114d26102d86000396000818161020a015281816105d6015281816108290152818161099a01528181610aef0152610c110152600081816101be01528181610546015281816105a90152818161079901526107fc01526114d26000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b80632ccb404d1161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b80632ccb404d1461025d5780632f2ff15d1461027057600080fd5b8063116191b611610160578063116191b6146101b957806321e093b114610205578063248a9ca31461022c57600080fd5b806301ffc9a71461017c578063106e6290146101a4575b600080fd5b61018f61018a366004610fd3565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611045565b610462565b005b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b61024f61023a366004611078565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761026b3660046110da565b610507565b6101b761027e366004611172565b6106a1565b6101b7610291366004611172565b6106cc565b6101b7610725565b60015460ff1661018f565b6101b76102b736600461119e565b61075a565b6101b76102ca366004611078565b6108ef565b6101b76102dd366004611078565b61095d565b6101b7610a07565b61024f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611172565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61024f600081565b61024f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611172565b610a39565b61024f60035481565b61024f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610aa1565b61049c610aab565b6104a7848484610aea565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5846040516104ef91815260200190565b60405180910390a2506105026001600055565b505050565b61050f610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461053981610aa1565b610541610aab565b61056c7f00000000000000000000000000000000000000000000000000000000000000008785610aea565b6040517f36c99f3b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b90610608907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a90600401611335565b600060405180830381600087803b15801561062257600080fd5b505af1158015610636573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167fa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b8353780178787878660405161068694939291906113a6565b60405180910390a2506106996001600055565b505050505050565b6000828152600260205260409020600101546106bc81610aa1565b6106c68383610c72565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461071b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105028282610d72565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074f81610aa1565b610757610e31565b50565b610762610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078c81610aa1565b610794610aab565b6107bf7f00000000000000000000000000000000000000000000000000000000000000008684610aea565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610859907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016113dd565b600060405180830381600087803b15801561087357600080fd5b505af1158015610887573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d8686866040516108d59392919061142f565b60405180910390a2506108e86001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61091981610aa1565b610921610aab565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610965610aab565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109f357600080fd5b505af11580156108e8573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3181610aa1565b610757610eae565b600082815260026020526040902060010154610a5481610aa1565b6106c68383610d72565b600260005403610a9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107578133610f07565b60015460ff1615610ae8576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7c9190611449565b610b869084611462565b1115610bbe576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d083390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e39610f97565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610eb6610aab565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e84565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f93576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ae8576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fe557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461101557600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461104057600080fd5b919050565b60008060006060848603121561105a57600080fd5b6110638461101c565b95602085013595506040909401359392505050565b60006020828403121561108a57600080fd5b5035919050565b60008083601f8401126110a357600080fd5b50813567ffffffffffffffff8111156110bb57600080fd5b6020830191508360208285010111156110d357600080fd5b9250929050565b60008060008060008060a087890312156110f357600080fd5b6110fc8761101c565b955060208701359450604087013567ffffffffffffffff81111561111f57600080fd5b61112b89828a01611091565b90955093505060608701359150608087013567ffffffffffffffff81111561115257600080fd5b87016080818a03121561116457600080fd5b809150509295509295509295565b6000806040838503121561118557600080fd5b823591506111956020840161101c565b90509250929050565b6000806000806000608086880312156111b657600080fd5b6111bf8661101c565b945060208601359350604086013567ffffffffffffffff8111156111e257600080fd5b6111ee88828901611091565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff6112678261101c565b16825273ffffffffffffffffffffffffffffffffffffffff61128b6020830161101c565b1660208301526000604082013567ffffffffffffffff81168082146112af57600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126112eb57600080fd5b820160208101903567ffffffffffffffff81111561130857600080fd5b80360382131561131757600080fd5b6080606086015261132c608086018284611200565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061138760a083018587611200565b82810360808401526113998185611249565b9998505050505050505050565b8481526060602082015260006113c0606083018587611200565b82810360408401526113d28185611249565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113d2608083018486611200565b83815260406020820152600061132c604083018486611200565b60006020828403121561145b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220276d75628e17e347d14c84f90b610fc13968efff6201b1233b79eeaa7cb742c964736f6c634300081a00336080604052348015600f57600080fd5b506001600055610eea806100246000396000f3fe60806040526004361061006e5760003560e01c80636ed701691161004b5780636ed70169146100e0578063c5131691146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a2146100775780635ac1e07014610097578063676cc054146100b757005b3661007557005b005b34801561008357600080fd5b50610075610092366004610724565b610148565b3480156100a357600080fd5b506100756100b2366004610760565b6101de565b6100ca6100c536600461079b565b61021a565b6040516100d79190610896565b60405180910390f35b3480156100ec57600080fd5b5061007561024d565b34801561010157600080fd5b50610075610110366004610724565b610282565b6100756101233660046109ce565b61035d565b34801561013457600080fd5b50610075610143366004610aba565b6103a1565b6101506103d6565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610419565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b7f8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264338260405161020f929190610bed565b60405180910390a150565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a19392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61028a6103d6565b6000610297600285610cf3565b9050806000036102d3576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102f573ffffffffffffffffffffffffffffffffffffffff8416338484610419565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610394959493929190610d2e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103949493929190610db8565b600260005403610412576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104ae9085906104b4565b50505050565b60006104d673ffffffffffffffffffffffffffffffffffffffff84168361054f565b905080516000141580156104fb5750808060200190518101906104f99190610e7b565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061055d83836000610564565b9392505050565b6060814710156105a2576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610546565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105cb9190610e98565b60006040518083038185875af1925050503d8060008114610608576040519150601f19603f3d011682016040523d82523d6000602084013e61060d565b606091505b509150915061061d868383610627565b9695505050505050565b60608261063c57610637826106b6565b61055d565b8151158015610660575073ffffffffffffffffffffffffffffffffffffffff84163b155b156106af576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610546565b508061055d565b8051156106c65780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461071f57600080fd5b919050565b60008060006060848603121561073957600080fd5b83359250610749602085016106fb565b9150610757604085016106fb565b90509250925092565b60006020828403121561077257600080fd5b813567ffffffffffffffff81111561078957600080fd5b82016080818503121561055d57600080fd5b600080600083850360408112156107b157600080fd5b60208112156107bf57600080fd5b50839250602084013567ffffffffffffffff8111156107dd57600080fd5b8401601f810186136107ee57600080fd5b803567ffffffffffffffff81111561080557600080fd5b86602082840101111561081757600080fd5b939660209190910195509293505050565b60005b8381101561084357818101518382015260200161082b565b50506000910152565b60008151808452610864816020860160208601610828565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061055d602083018461084c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561091f5761091f6108a9565b604052919050565b600082601f83011261093857600080fd5b813567ffffffffffffffff811115610952576109526108a9565b61098360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108d8565b81815284602083860101111561099857600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106f857600080fd5b803561071f816109b5565b6000806000606084860312156109e357600080fd5b833567ffffffffffffffff8111156109fa57600080fd5b610a0686828701610927565b935050602084013591506040840135610a1e816109b5565b809150509250925092565b600067ffffffffffffffff821115610a4357610a436108a9565b5060051b60200190565b600082601f830112610a5e57600080fd5b8135610a71610a6c82610a29565b6108d8565b8082825260208201915060208360051b860101925085831115610a9357600080fd5b602085015b83811015610ab0578035835260209283019201610a98565b5095945050505050565b600080600060608486031215610acf57600080fd5b833567ffffffffffffffff811115610ae657600080fd5b8401601f81018613610af757600080fd5b8035610b05610a6c82610a29565b8082825260208201915060208360051b850101925088831115610b2757600080fd5b602084015b83811015610b6957803567ffffffffffffffff811115610b4b57600080fd5b610b5a8b602083890101610927565b84525060209283019201610b2c565b509550505050602084013567ffffffffffffffff811115610b8957600080fd5b610b9586828701610a4d565b925050610757604085016109c3565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2b836106fb565b16604082015273ffffffffffffffffffffffffffffffffffffffff610c52602084016106fb565b1660608201526000604083013567ffffffffffffffff8116808214610c7657600080fd5b6080840152506060830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610cb257600080fd5b830160208101903567ffffffffffffffff811115610ccf57600080fd5b803603821315610cde57600080fd5b608060a085015261061d60c085018284610ba4565b600082610d29577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d6360a083018661084c565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610dae578151865260209586019590910190600101610d90565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e4b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e3685835161084c565b94506020938401939190910190600101610dfc565b505050508281036040840152610e618186610d7c565b915050610e72606083018415159052565b95945050505050565b600060208284031215610e8d57600080fd5b815161055d816109b5565b60008251610eaa818460208701610828565b919091019291505056fea264697066735822122075e241dc7d0b3cc5bb3ca3c583250993ad9bf6a64ef50849b87060df5ab2e8e364736f6c634300081a0033a264697066735822122024fa1253bd78bc7dc9c454649075e10ca9884f58a0a1e09e20a4fea23ab89ff164736f6c634300081a0033", } // GatewayEVMTestABI is the input ABI used to generate the binding from. @@ -1057,6 +1058,27 @@ func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestForwardCallToReceive return _GatewayEVMTest.Contract.TestForwardCallToReceiveOnCallUsingAuthCall(&_GatewayEVMTest.TransactOpts) } +// TestForwardCallToReceiveOnRevertFails is a paid mutator transaction binding the contract method 0x130daf59. +// +// Solidity: function testForwardCallToReceiveOnRevertFails() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactor) TestForwardCallToReceiveOnRevertFails(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GatewayEVMTest.contract.Transact(opts, "testForwardCallToReceiveOnRevertFails") +} + +// TestForwardCallToReceiveOnRevertFails is a paid mutator transaction binding the contract method 0x130daf59. +// +// Solidity: function testForwardCallToReceiveOnRevertFails() returns() +func (_GatewayEVMTest *GatewayEVMTestSession) TestForwardCallToReceiveOnRevertFails() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestForwardCallToReceiveOnRevertFails(&_GatewayEVMTest.TransactOpts) +} + +// TestForwardCallToReceiveOnRevertFails is a paid mutator transaction binding the contract method 0x130daf59. +// +// Solidity: function testForwardCallToReceiveOnRevertFails() returns() +func (_GatewayEVMTest *GatewayEVMTestTransactorSession) TestForwardCallToReceiveOnRevertFails() (*types.Transaction, error) { + return _GatewayEVMTest.Contract.TestForwardCallToReceiveOnRevertFails(&_GatewayEVMTest.TransactOpts) +} + // TestForwardCallToReceivePayable is a paid mutator transaction binding the contract method 0xfe7bdbb2. // // Solidity: function testForwardCallToReceivePayable() returns() @@ -2738,9 +2760,9 @@ type GatewayEVMTestReceivedRevert struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_GatewayEVMTest *GatewayEVMTestFilterer) FilterReceivedRevert(opts *bind.FilterOpts) (*GatewayEVMTestReceivedRevertIterator, error) { logs, sub, err := _GatewayEVMTest.contract.FilterLogs(opts, "ReceivedRevert") @@ -2750,9 +2772,9 @@ func (_GatewayEVMTest *GatewayEVMTestFilterer) FilterReceivedRevert(opts *bind.F return &GatewayEVMTestReceivedRevertIterator{contract: _GatewayEVMTest.contract, event: "ReceivedRevert", logs: logs, sub: sub}, nil } -// WatchReceivedRevert is a free log subscription operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// WatchReceivedRevert is a free log subscription operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_GatewayEVMTest *GatewayEVMTestFilterer) WatchReceivedRevert(opts *bind.WatchOpts, sink chan<- *GatewayEVMTestReceivedRevert) (event.Subscription, error) { logs, sub, err := _GatewayEVMTest.contract.WatchLogs(opts, "ReceivedRevert") @@ -2787,9 +2809,9 @@ func (_GatewayEVMTest *GatewayEVMTestFilterer) WatchReceivedRevert(opts *bind.Wa }), nil } -// ParseReceivedRevert is a log parse operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// ParseReceivedRevert is a log parse operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_GatewayEVMTest *GatewayEVMTestFilterer) ParseReceivedRevert(log types.Log) (*GatewayEVMTestReceivedRevert, error) { event := new(GatewayEVMTestReceivedRevert) if err := _GatewayEVMTest.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { @@ -2876,9 +2898,9 @@ type GatewayEVMTestReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// FilterReverted is a free log retrieval operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVMTest *GatewayEVMTestFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*GatewayEVMTestRevertedIterator, error) { var toRule []interface{} @@ -2897,9 +2919,9 @@ func (_GatewayEVMTest *GatewayEVMTestFilterer) FilterReverted(opts *bind.FilterO return &GatewayEVMTestRevertedIterator{contract: _GatewayEVMTest.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// WatchReverted is a free log subscription operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVMTest *GatewayEVMTestFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *GatewayEVMTestReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2943,9 +2965,9 @@ func (_GatewayEVMTest *GatewayEVMTestFilterer) WatchReverted(opts *bind.WatchOpt }), nil } -// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// ParseReverted is a log parse operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVMTest *GatewayEVMTestFilterer) ParseReverted(log types.Log) (*GatewayEVMTestReverted, error) { event := new(GatewayEVMTestReverted) if err := _GatewayEVMTest.contract.UnpackLog(event, "Reverted", log); err != nil { @@ -3629,9 +3651,9 @@ type GatewayEVMTestWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVMTest *GatewayEVMTestFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*GatewayEVMTestWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -3650,9 +3672,9 @@ func (_GatewayEVMTest *GatewayEVMTestFilterer) FilterWithdrawnAndReverted(opts * return &GatewayEVMTestWithdrawnAndRevertedIterator{contract: _GatewayEVMTest.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVMTest *GatewayEVMTestFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *GatewayEVMTestWithdrawnAndReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -3696,9 +3718,9 @@ func (_GatewayEVMTest *GatewayEVMTestFilterer) WatchWithdrawnAndReverted(opts *b }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVMTest *GatewayEVMTestFilterer) ParseWithdrawnAndReverted(log types.Log) (*GatewayEVMTestWithdrawnAndReverted, error) { event := new(GatewayEVMTestWithdrawnAndReverted) if err := _GatewayEVMTest.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { diff --git a/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go b/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go index ef9195fc..8af09280 100644 --- a/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go +++ b/v2/pkg/gatewayevmechidnatest.sol/gatewayevmechidnatest.go @@ -36,6 +36,7 @@ type MessageContext struct { // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -52,8 +53,8 @@ type RevertOptions struct { // GatewayEVMEchidnaTestMetaData contains all meta data concerning the GatewayEVMEchidnaTest contract. var GatewayEVMEchidnaTestMetaData = &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\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"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: "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f80613cd683390190565b611eb98061497583390190565b608051613a8d6102496000396000818161239f015281816123c801526128360152613a8d6000f3fe60806040526004361061024f5760003560e01c80635d62c86011610138578063ad3cb1cc116100b0578063d0b492c31161007f578063dda79b7511610064578063dda79b751461072d578063e63ab1e91461074d578063f7ad60db1461078157600080fd5b8063d0b492c3146106ed578063d547741f1461070d57600080fd5b8063ad3cb1cc14610644578063ae7a3a6f1461068d578063c0c53b8b146106ad578063d09e3b78146106cd57600080fd5b806381100bf01161010757806391d14854116100ec57806391d1485414610596578063a217fddf146105fb578063a783c7891461061057600080fd5b806381100bf0146105615780638456cb591461058157600080fd5b80635d62c860146104e75780636ab90f9b1461051b578063726ac97c1461053b578063744b9b8b1461054e57600080fd5b806338e22527116101cb5780635131ab591161019a57806357bec62f1161017f57806357bec62f146104705780635b112591146104905780635c975abb146104b057600080fd5b80635131ab591461043b57806352d1902d1461045b57600080fd5b806338e22527146103e05780633c2f05a8146103f35780633f4ba83a146104135780634f1ef2861461042857600080fd5b80631cff79cd11610222578063248a9ca311610207578063248a9ca3146103435780632f2ff15d146103a057806336568abe146103c057600080fd5b80631cff79cd146102eb57806321e093b11461030b57600080fd5b806301ffc9a71461025457806310188aef14610289578063102614b0146102ab5780631becceb4146102cb575b600080fd5b34801561026057600080fd5b5061027461026f366004612fa2565b610794565b60405190151581526020015b60405180910390f35b34801561029557600080fd5b506102a96102a4366004613000565b61082d565b005b3480156102b757600080fd5b506102a96102c6366004613033565b610908565b3480156102d757600080fd5b506102a96102e63660046130e4565b610a02565b6102fe6102f936600461314b565b610a80565b60405161028091906131ee565b34801561031757600080fd5b5060035461032b906001600160a01b031681565b6040516001600160a01b039091168152602001610280565b34801561034f57600080fd5b5061039261035e366004613201565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610280565b3480156103ac57600080fd5b506102a96103bb36600461321a565b610b38565b3480156103cc57600080fd5b506102a96103db36600461321a565b610b7c565b6102fe6103ee366004613246565b610bcd565b3480156103ff57600080fd5b5060045461032b906001600160a01b031681565b34801561041f57600080fd5b506102a9610cb9565b6102a9610436366004613337565b610cee565b34801561044757600080fd5b506102a96104563660046133c8565b610d0d565b34801561046757600080fd5b5061039261100d565b34801561047c57600080fd5b5060025461032b906001600160a01b031681565b34801561049c57600080fd5b5060015461032b906001600160a01b031681565b3480156104bc57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610274565b3480156104f357600080fd5b506103927f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561052757600080fd5b506102a9610536366004613437565b61103c565b6102a9610549366004613479565b611167565b6102a961055c3660046130e4565b6112df565b34801561056d57600080fd5b5060055461032b906001600160a01b031681565b34801561058d57600080fd5b506102a961145b565b3480156105a257600080fd5b506102746105b136600461321a565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561060757600080fd5b50610392600081565b34801561061c57600080fd5b506103927f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561065057600080fd5b506102fe6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561069957600080fd5b506102a96106a8366004613000565b61148d565b3480156106b957600080fd5b506102a96106c83660046134c7565b611568565b3480156106d957600080fd5b506102a96106e836600461350a565b611804565b3480156106f957600080fd5b506102a96107083660046135b4565b6118fc565b34801561071957600080fd5b506102a961072836600461321a565b611aa5565b34801561073957600080fd5b5060005461032b906001600160a01b031681565b34801561075957600080fd5b506103927f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102a961078f36600461363f565b611ae9565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061082757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061083881611cd1565b6001600160a01b03821661085f5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b0316156108a2576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108cc7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611cdb565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b610910611dc8565b610918611e26565b82600003610952576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166109795760405163d92e233d60e01b815260040160405180910390fd5b610984338385611ea7565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8585856040516109cb939291906137cc565b60405180910390a36109fc60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b610a0a611dc8565b610a12611e26565b6001600160a01b038416610a395760405163d92e233d60e01b815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d9748585856040516109cb93929190613802565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610aac81611cd1565b610ab4611dc8565b6001600160a01b038516610adb5760405163d92e233d60e01b815260040160405180910390fd5b6000610ae886868661210a565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610b2793929190613828565b60405180910390a295945050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b7281611cd1565b6109fc8383611cdb565b6001600160a01b0381163314610bbe576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bc882826121bd565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610bf981611cd1565b610c01611dc8565b610c09611e26565b6001600160a01b038516610c305760405163d92e233d60e01b815260040160405180910390fd5b6060610c3e87878787612281565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610c7d93929190613828565b60405180910390a29150610cb060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ce381611cd1565b610ceb612304565b50565b610cf6612394565b610cff82612464565b610d09828261246f565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610d3781611cd1565b610d3f611dc8565b610d47611e26565b83600003610d81576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610da85760405163d92e233d60e01b815260040160405180910390fd5b610db28686612575565b610de8576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610e50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e749190613842565b610eaa576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eb585848461210a565b50610ec08686612575565b610ef6576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7a919061385f565b90508015610f8c57610f8c8782612605565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382878787604051610fd393929190613828565b60405180910390a35061100560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061101761282b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b1580156110a257600080fd5b505af11580156110b6573d6000803e3d6000fd5b50506004546110d492506001600160a01b0316905085858585610d0d565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015611136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115a919061385f565b156109fc576109fc613878565b61116f611dc8565b611177611e26565b346000036111b1576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166111d85760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611225576040519150601f19603f3d011682016040523d82523d6000602084013e61122a565b606091505b5050905080611265576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c346000866040516112ad939291906137cc565b60405180910390a350610d0960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6112e7611dc8565b6112ef611e26565b34600003611329576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166113505760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d806000811461139d576040519150601f19603f3d011682016040523d82523d6000602084013e6113a2565b606091505b50509050806113dd576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008888886040516114299594939291906138a7565b60405180910390a3506109fc60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61148581611cd1565b610ceb61288d565b600061149881611cd1565b6001600160a01b0382166114bf5760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b031615611502576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61152c7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611cdb565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115b35750825b905060008267ffffffffffffffff1660011480156115d05750303b155b9050811580156115de575080155b15611615576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116765784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061169357506001600160a01b038716155b156116b15760405163d92e233d60e01b815260040160405180910390fd5b6116b9612906565b6116c161290e565b6116c9612906565b6116d161291e565b6116dc600087611cdb565b506117077f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611cdb565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556117657f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611cdb565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156117fa5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b61180c611dc8565b611814611e26565b8460000361184e576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166118755760405163d92e233d60e01b815260040160405180910390fd5b611880338587611ea7565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c87878787876040516118cb9594939291906138a7565b60405180910390a361100560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961192681611cd1565b61192e611dc8565b611936611e26565b84600003611970576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166119975760405163d92e233d60e01b815260040160405180910390fd5b6119ab6001600160a01b038816878761292e565b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de0906119f0908590600401613948565b600060405180830381600087803b158015611a0a57600080fd5b505af1158015611a1e573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143687878787604051611a6b949392919061395b565b60405180910390a3611a9c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611adf81611cd1565b6109fc83836121bd565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb611b1381611cd1565b611b1b611dc8565b611b23611e26565b6001600160a01b038516611b4a5760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d8060008114611b97576040519150601f19603f3d011682016040523d82523d6000602084013e611b9c565b606091505b5050905080611bd7576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de090611c1c908690600401613948565b600060405180830381600087803b158015611c3657600080fd5b505af1158015611c4a573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143634888888604051611c98949392919061395b565b60405180910390a350611cca60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610ceb81336129a2565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611dbe576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611d743390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610827565b6000915050610827565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611e24576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611ea1576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b039081169083160361200b57611ed26001600160a01b038316843084612a2f565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f629190613842565b611f98576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611ff757600080fd5b505af1158015611a9c573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561206e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120929190613842565b6120c8576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610bc8906001600160a01b038481169186911684612a2f565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60606121168383612a68565b600080856001600160a01b0316348686604051612134929190613992565b60006040518083038185875af1925050503d8060008114612171576040519150601f19603f3d011682016040523d82523d6000602084013e612176565b606091505b5091509150816121b2576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611dbe576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610827565b6060836001600160a01b031663676cc054348786866040518563ffffffff1660e01b81526004016122b4939291906139a2565b60006040518083038185885af11580156122d2573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526122fb91908101906139cd565b95945050505050565b61230c612aed565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061242d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166124217f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611e24576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d0981611cd1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156124c9575060408051601f3d908101601f191682019092526124c69181019061385f565b60015b61250f576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461256b576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612506565b610bc88383612b48565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af11580156125e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b69190613842565b6003546001600160a01b0390811690831603612754576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ab9190613842565b6126e1576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561274057600080fd5b505af1158015611005573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156127b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127db9190613842565b612811576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610d09906001600160a01b0384811691168361292e565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e24576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612895611dc8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612376565b611e24612b9e565b612916612b9e565b611e24612c05565b612926612b9e565b611e24612c0d565b6040516001600160a01b03838116602483015260448201839052610bc891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612c5e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610d09576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612506565b6040516001600160a01b0384811660248301528381166044830152606482018390526109fc9186918216906323b872dd9060840161295b565b60048110610d095781357f98933fac000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610bc8576040517fed69977500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611e24576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b5182612cda565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b9657610bc88282612d82565b610d09612def565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611e24576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120e4612b9e565b612c15612b9e565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6000612c736001600160a01b03841683612e27565b90508051600014158015612c98575080806020019051810190612c969190613842565b155b15610bc8576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612506565b806001600160a01b03163b600003612d29576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612506565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612d9f9190613a3b565b600060405180830381855af49150503d8060008114612dda576040519150601f19603f3d011682016040523d82523d6000602084013e612ddf565b606091505b50915091506122fb858383612e35565b3415611e24576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606121b683836000612eaa565b606082612e4a57612e4582612f60565b6121b6565b8151158015612e6157506001600160a01b0384163b155b15612ea3576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612506565b50806121b6565b606081471015612ee8576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612506565b600080856001600160a01b03168486604051612f049190613a3b565b60006040518083038185875af1925050503d8060008114612f41576040519150601f19603f3d011682016040523d82523d6000602084013e612f46565b606091505b5091509150612f56868383612e35565b9695505050505050565b805115612f705780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612fb457600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146121b657600080fd5b80356001600160a01b0381168114612ffb57600080fd5b919050565b60006020828403121561301257600080fd5b6121b682612fe4565b600060a0828403121561302d57600080fd5b50919050565b6000806000806080858703121561304957600080fd5b61305285612fe4565b93506020850135925061306760408601612fe4565b9150606085013567ffffffffffffffff81111561308357600080fd5b61308f8782880161301b565b91505092959194509250565b60008083601f8401126130ad57600080fd5b50813567ffffffffffffffff8111156130c557600080fd5b6020830191508360208285010111156130dd57600080fd5b9250929050565b600080600080606085870312156130fa57600080fd5b61310385612fe4565b9350602085013567ffffffffffffffff81111561311f57600080fd5b61312b8782880161309b565b909450925050604085013567ffffffffffffffff81111561308357600080fd5b60008060006040848603121561316057600080fd5b61316984612fe4565b9250602084013567ffffffffffffffff81111561318557600080fd5b6131918682870161309b565b9497909650939450505050565b60005b838110156131b95781810151838201526020016131a1565b50506000910152565b600081518084526131da81602086016020860161319e565b601f01601f19169290920160200192915050565b6020815260006121b660208301846131c2565b60006020828403121561321357600080fd5b5035919050565b6000806040838503121561322d57600080fd5b8235915061323d60208401612fe4565b90509250929050565b600080600080848603606081121561325d57600080fd5b602081121561326b57600080fd5b5084935061327b60208601612fe4565b9250604085013567ffffffffffffffff81111561329757600080fd5b6132a38782880161309b565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613307576133076132af565b604052919050565b600067ffffffffffffffff821115613329576133296132af565b50601f01601f191660200190565b6000806040838503121561334a57600080fd5b61335383612fe4565b9150602083013567ffffffffffffffff81111561336f57600080fd5b8301601f8101851361338057600080fd5b803561339361338e8261330f565b6132de565b8181528660208385010111156133a857600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000806000806000608086880312156133e057600080fd5b6133e986612fe4565b94506133f760208701612fe4565b935060408601359250606086013567ffffffffffffffff81111561341a57600080fd5b6134268882890161309b565b969995985093965092949392505050565b6000806000806060858703121561344d57600080fd5b61345685612fe4565b935060208501359250604085013567ffffffffffffffff81111561329757600080fd5b6000806040838503121561348c57600080fd5b61349583612fe4565b9150602083013567ffffffffffffffff8111156134b157600080fd5b6134bd8582860161301b565b9150509250929050565b6000806000606084860312156134dc57600080fd5b6134e584612fe4565b92506134f360208501612fe4565b915061350160408501612fe4565b90509250925092565b60008060008060008060a0878903121561352357600080fd5b61352c87612fe4565b95506020870135945061354160408801612fe4565b9350606087013567ffffffffffffffff81111561355d57600080fd5b61356989828a0161309b565b909450925050608087013567ffffffffffffffff81111561358957600080fd5b61359589828a0161301b565b9150509295509295509295565b60006060828403121561302d57600080fd5b60008060008060008060a087890312156135cd57600080fd5b6135d687612fe4565b95506135e460208801612fe4565b945060408701359350606087013567ffffffffffffffff81111561360757600080fd5b61361389828a0161309b565b909450925050608087013567ffffffffffffffff81111561363357600080fd5b61359589828a016135a2565b6000806000806060858703121561365557600080fd5b61365e85612fe4565b9350602085013567ffffffffffffffff81111561367a57600080fd5b6136868782880161309b565b909450925050604085013567ffffffffffffffff8111156136a657600080fd5b61308f878288016135a2565b8015158114610ceb57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f557600080fd5b830160208101925035905067ffffffffffffffff81111561371557600080fd5b8036038213156130dd57600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b0361376082612fe4565b16825260006020820135613773816136b2565b151560208401526001600160a01b0361378e60408401612fe4565b1660408401526137a160608301836136c0565b60a060608601526137b660a086018284613724565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a0606082015260006122fb60a083018461374f565b604081526000613816604083018587613724565b8281036020840152612f56818561374f565b8381526040602082015260006122fb604083018486613724565b60006020828403121561385457600080fd5b81516121b6816136b2565b60006020828403121561387157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8581526001600160a01b03851660208201526080604082015260006138d0608083018587613724565b82810360608401526138e2818561374f565b98975050505050505050565b6001600160a01b036138ff82612fe4565b1682526000602082013567ffffffffffffffff811680821461392057600080fd5b60208501525061393360408301836136c0565b606060408601526122fb606086018284613724565b6020815260006121b660208301846138ee565b848152606060208201526000613975606083018587613724565b828103604084015261398781856138ee565b979650505050505050565b8183823760009101908152919050565b6001600160a01b036139b385612fe4565b1681526040602082015260006122fb604083018486613724565b6000602082840312156139df57600080fd5b815167ffffffffffffffff8111156139f657600080fd5b8201601f81018413613a0757600080fd5b8051613a1561338e8261330f565b818152856020838501011115613a2a57600080fd5b6122fb82602083016020860161319e565b60008251613a4d81846020870161319e565b919091019291505056fea2646970667358221220f26b917cc0f534b97d1381b83873c7fa4565569e560937dad65f5e0c1916c55864736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a003360a060405234801561001057600080fd5b50604051611eb9380380611eb983398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611e998339815191528261014c565b50610143600080516020611e998339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b608051611c22610277600039600081816101ca01528181610597015281816105f901528181610a280152610a8a0152611c226000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806385f438c1116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103fc578063e63ab1e91461040f578063eab103df1461043657600080fd5b8063d547741f146103b3578063d936547e146103c6578063d9caed12146103e957600080fd5b80639b19251a116100bd5780639b19251a14610385578063a217fddf14610398578063c709ab6e146103a057600080fd5b806385f438c11461030557806391d148541461032c5780639a5904271461037257600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102d25780635c975abb146102f25780638456cb59146102fd57600080fd5b806336568abe146102905780633f4ba83a146102a3578063570618e1146102ab57600080fd5b8063248a9ca311610176578063248a9ca314610226578063252f07bf146102585780632f2ff15d1461027d57600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610211575b600080fd5b6101b06101ab3660046115ca565b610449565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b61022461021f366004611677565b6104e2565b005b61024a6102343660046116ea565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61022461028b366004611703565b6106e3565b61022461029e366004611703565b61070f565b61022461076d565b61024a7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff166101b0565b6102246107a2565b61024a7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b061033a366004611703565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610224610380366004611733565b6107d4565b610224610393366004611733565b6108a2565b61024a600081565b6102246103ae366004611750565b610973565b6102246103c1366004611703565b610b79565b6101b06103d4366004611733565b60036020526000908152604090205460ff1681565b6102246103f73660046117f3565b610b9f565b61022461040a366004611834565b610ccb565b61024a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102246104443660046118d3565b610f2b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104dc57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104ea610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461051481610fc4565b61051c610fce565b73ffffffffffffffffffffffffffffffffffffffff851660009081526003602052604090205460ff1661057b576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bc73ffffffffffffffffffffffffffffffffffffffff86167f00000000000000000000000000000000000000000000000000000000000000008661100d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106369088908a90899089908990600401611939565b600060405180830381600087803b15801561065057600080fd5b505af1158015610664573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d58686866040516106c993929190611996565b60405180910390a3506106dc6001600055565b5050505050565b600082815260016020819052604090912001546106ff81610fc4565b610709838361108e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461075e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610768828261113b565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61079781610fc4565b61079f6111dc565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107cc81610fc4565b61079f61123b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107fe81610fc4565b73ffffffffffffffffffffffffffffffffffffffff821661084b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6108cc81610fc4565b73ffffffffffffffffffffffffffffffffffffffff8216610919576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61097b610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109a581610fc4565b6109ad610fce565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610a0c576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a4d73ffffffffffffffffffffffffffffffffffffffff87167f00000000000000000000000000000000000000000000000000000000000000008761100d565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610ac99089908b908a908a908a908a90600401611a77565b600060405180830381600087803b158015610ae357600080fd5b505af1158015610af7573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b87878787604051610b5e9493929190611ae8565b60405180910390a350610b716001600055565b505050505050565b60008281526001602081905260409091200154610b9581610fc4565b610709838361113b565b610ba7610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610bd181610fc4565b610bd9610fce565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205460ff16610c38576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5973ffffffffffffffffffffffffffffffffffffffff8416858461100d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610cb891815260200190565b60405180910390a3506107686001600055565b610cd3610f81565b610cdb610fce565b60045474010000000000000000000000000000000000000000900460ff16610d2f576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610d8e576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8616906370a0823190602401602060405180830381865afa158015610dfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1f9190611b14565b9050610e4373ffffffffffffffffffffffffffffffffffffffff8616333087611278565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efb9190611b14565b610f059190611b2d565b8787604051610f18959493929190611b67565b60405180910390a250610b716001600055565b6000610f3681610fc4565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610fbd576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61079f81336112be565b60025460ff161561100b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261076891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061134f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661113357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104dc565b5060006104dc565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561113357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104dc565b6111e46113e5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611243610fce565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112113390565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526107099186918216906323b872dd90608401611047565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661134b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b600061137173ffffffffffffffffffffffffffffffffffffffff841683611421565b905080516000141580156113965750808060200190518101906113949190611ba0565b155b15610768576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401611342565b60025460ff1661100b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061142f83836000611436565b9392505050565b606081471015611474576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611342565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161149d9190611bbd565b60006040518083038185875af1925050503d80600081146114da576040519150601f19603f3d011682016040523d82523d6000602084013e6114df565b606091505b50915091506114ef8683836114f9565b9695505050505050565b60608261150e5761150982611588565b61142f565b8151158015611532575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611581576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401611342565b508061142f565b8051156115985780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156115dc57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461142f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461079f57600080fd5b60008083601f84011261164057600080fd5b50813567ffffffffffffffff81111561165857600080fd5b60208301915083602082850101111561167057600080fd5b9250929050565b60008060008060006080868803121561168f57600080fd5b853561169a8161160c565b945060208601356116aa8161160c565b935060408601359250606086013567ffffffffffffffff8111156116cd57600080fd5b6116d98882890161162e565b969995985093965092949392505050565b6000602082840312156116fc57600080fd5b5035919050565b6000806040838503121561171657600080fd5b8235915060208301356117288161160c565b809150509250929050565b60006020828403121561174557600080fd5b813561142f8161160c565b60008060008060008060a0878903121561176957600080fd5b86356117748161160c565b955060208701356117848161160c565b945060408701359350606087013567ffffffffffffffff8111156117a757600080fd5b6117b389828a0161162e565b909450925050608087013567ffffffffffffffff8111156117d357600080fd5b87016060818a0312156117e557600080fd5b809150509295509295509295565b60008060006060848603121561180857600080fd5b83356118138161160c565b925060208401356118238161160c565b929592945050506040919091013590565b6000806000806000806080878903121561184d57600080fd5b863567ffffffffffffffff81111561186457600080fd5b61187089828a0161162e565b90975095505060208701356118848161160c565b935060408701359250606087013567ffffffffffffffff8111156118a757600080fd5b6118b389828a0161162e565b979a9699509497509295939492505050565b801515811461079f57600080fd5b6000602082840312156118e557600080fd5b813561142f816118c5565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061198b6080830184866118f0565b979650505050505050565b8381526040602082015260006119b06040830184866118f0565b95945050505050565b600081356119c68161160c565b73ffffffffffffffffffffffffffffffffffffffff168352602082013567ffffffffffffffff81168082146119fa57600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112611a3657600080fd5b820160208101903567ffffffffffffffff811115611a5357600080fd5b803603821315611a6257600080fd5b606060408601526119b06060860182846118f0565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a060608201526000611ac960a0830185876118f0565b8281036080840152611adb81856119b9565b9998505050505050505050565b848152606060208201526000611b026060830185876118f0565b828103604084015261198b81856119b9565b600060208284031215611b2657600080fd5b5051919050565b818103818111156104dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606081526000611b7b6060830187896118f0565b8560208401528281036040840152611b948185876118f0565b98975050505050505050565b600060208284031215611bb257600080fd5b815161142f816118c5565b6000825160005b81811015611bde5760208186018101518583015201611bc4565b50600092019182525091905056fea264697066735822122029d8a02c5c60bae7d404d08786de2b2dd6b37e11d10fa76c968c7809ff06f3b864736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a", + 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\":\"echidnaCaller\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"testERC20\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractTestERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"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: "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f80613d6b83390190565b611c7f80614a0a83390190565b608051613b22610249600039600081816124130152818161243c01526128aa0152613b226000f3fe60806040526004361061024f5760003560e01c80635b11259111610138578063a217fddf116100b0578063c0c53b8b1161007f578063d547741f11610064578063d547741f14610720578063dda79b7514610740578063e63ab1e91461076057600080fd5b8063c0c53b8b146106e0578063d09e3b781461070057600080fd5b8063a217fddf1461062e578063a783c78914610643578063ad3cb1cc14610677578063ae7a3a6f146106c057600080fd5b8063726ac97c1161010757806381100bf0116100ec57806381100bf0146105945780638456cb59146105b457806391d14854146105c957600080fd5b8063726ac97c1461056e578063744b9b8b1461058157600080fd5b80635b112591146104c35780635c975abb146104e35780635d62c8601461051a5780636ab90f9b1461054e57600080fd5b806336568abe116101cb5780633f4ba83a1161019a5780635131ab591161017f5780635131ab591461046e57806352d1902d1461048e57806357bec62f146104a357600080fd5b80633f4ba83a146104465780634f1ef2861461045b57600080fd5b806336568abe146103d357806336c99f3b146103f357806338e22527146104135780633c2f05a81461042657600080fd5b80631becceb41161022257806321e093b11161020757806321e093b11461031e578063248a9ca3146103565780632f2ff15d146103b357600080fd5b80631becceb4146102de5780631cff79cd146102fe57600080fd5b806301ffc9a71461025457806310188aef14610289578063102614b0146102ab5780631b5ee25b146102cb575b600080fd5b34801561026057600080fd5b5061027461026f36600461301d565b610794565b60405190151581526020015b60405180910390f35b34801561029557600080fd5b506102a96102a436600461307b565b61082d565b005b3480156102b757600080fd5b506102a96102c63660046130ae565b610908565b6102a96102d9366004613171565b610a02565b3480156102ea57600080fd5b506102a96102f93660046131e4565b610bea565b61031161030c36600461324b565b610c68565b60405161028091906132ee565b34801561032a57600080fd5b5060035461033e906001600160a01b031681565b6040516001600160a01b039091168152602001610280565b34801561036257600080fd5b506103a5610371366004613301565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610280565b3480156103bf57600080fd5b506102a96103ce36600461331a565b610d20565b3480156103df57600080fd5b506102a96103ee36600461331a565b610d64565b3480156103ff57600080fd5b506102a961040e366004613346565b610db5565b6103116104213660046133de565b610f5e565b34801561043257600080fd5b5060045461033e906001600160a01b031681565b34801561045257600080fd5b506102a961104a565b6102a96104693660046134cf565b61107f565b34801561047a57600080fd5b506102a9610489366004613560565b61109e565b34801561049a57600080fd5b506103a561139e565b3480156104af57600080fd5b5060025461033e906001600160a01b031681565b3480156104cf57600080fd5b5060015461033e906001600160a01b031681565b3480156104ef57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610274565b34801561052657600080fd5b506103a57f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561055a57600080fd5b506102a96105693660046135cf565b6113cd565b6102a961057c366004613611565b6114f8565b6102a961058f3660046131e4565b611670565b3480156105a057600080fd5b5060055461033e906001600160a01b031681565b3480156105c057600080fd5b506102a96117ec565b3480156105d557600080fd5b506102746105e436600461331a565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561063a57600080fd5b506103a5600081565b34801561064f57600080fd5b506103a57f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561068357600080fd5b506103116040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156106cc57600080fd5b506102a96106db36600461307b565b61181e565b3480156106ec57600080fd5b506102a96106fb36600461365f565b6118f9565b34801561070c57600080fd5b506102a961071b3660046136a2565b611b95565b34801561072c57600080fd5b506102a961073b36600461331a565b611c8d565b34801561074c57600080fd5b5060005461033e906001600160a01b031681565b34801561076c57600080fd5b506103a57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061082757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061083881611cd1565b6001600160a01b03821661085f5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b0316156108a2576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108cc7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611cdb565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b610910611dc8565b610918611e26565b82600003610952576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166109795760405163d92e233d60e01b815260040160405180910390fd5b610984338385611ea7565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8585856040516109cb93929190613847565b60405180910390a36109fc60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610a2c81611cd1565b610a34611dc8565b610a3c611e26565b6001600160a01b038516610a635760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610ab0576040519150601f19603f3d011682016040523d82523d6000602084013e610ab5565b606091505b5050905080610af0576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5ac1e0700000000000000000000000000000000000000000000000000000000081526001600160a01b03871690635ac1e07090610b359086906004016138f1565b600060405180830381600087803b158015610b4f57600080fd5b505af1158015610b63573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167ff196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b34888888604051610bb19493929190613904565b60405180910390a350610be360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610bf2611dc8565b610bfa611e26565b6001600160a01b038416610c215760405163d92e233d60e01b815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d9748585856040516109cb9392919061393b565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c9481611cd1565b610c9c611dc8565b6001600160a01b038516610cc35760405163d92e233d60e01b815260040160405180910390fd5b6000610cd086868661210a565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610d0f93929190613961565b60405180910390a295945050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610d5a81611cd1565b6109fc8383611cdb565b6001600160a01b0381163314610da6576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610db082826121bd565b505050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ddf81611cd1565b610de7611dc8565b610def611e26565b84600003610e29576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616610e505760405163d92e233d60e01b815260040160405180910390fd5b610e646001600160a01b0388168787612281565b6040517f5ac1e0700000000000000000000000000000000000000000000000000000000081526001600160a01b03871690635ac1e07090610ea99085906004016138f1565b600060405180830381600087803b158015610ec357600080fd5b505af1158015610ed7573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167ff196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b87878787604051610f249493929190613904565b60405180910390a3610f5560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610f8a81611cd1565b610f92611dc8565b610f9a611e26565b6001600160a01b038516610fc15760405163d92e233d60e01b815260040160405180910390fd5b6060610fcf878787876122f5565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34878760405161100e93929190613961565b60405180910390a2915061104160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61107481611cd1565b61107c612378565b50565b611087612408565b611090826124d8565b61109a82826124e3565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96110c881611cd1565b6110d0611dc8565b6110d8611e26565b83600003611112576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0385166111395760405163d92e233d60e01b815260040160405180910390fd5b61114386866125e9565b611179576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af11580156111e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611205919061397b565b61123b576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124685848461210a565b5061125186866125e9565b611287576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa1580156112e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130b9190613998565b9050801561131d5761131d8782612679565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161136493929190613961565b60405180910390a35061139660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60006113a861289f565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561143357600080fd5b505af1158015611447573d6000803e3d6000fd5b505060045461146592506001600160a01b031690508585858561109e565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa1580156114c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114eb9190613998565b156109fc576109fc6139b1565b611500611dc8565b611508611e26565b34600003611542576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166115695760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146115b6576040519150601f19603f3d011682016040523d82523d6000602084013e6115bb565b606091505b50509050806115f6576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008660405161163e93929190613847565b60405180910390a35061109a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611678611dc8565b611680611e26565b346000036116ba576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166116e15760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d806000811461172e576040519150601f19603f3d011682016040523d82523d6000602084013e611733565b606091505b505090508061176e576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008888886040516117ba9594939291906139e0565b60405180910390a3506109fc60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61181681611cd1565b61107c612901565b600061182981611cd1565b6001600160a01b0382166118505760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b031615611893576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118bd7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611cdb565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156119445750825b905060008267ffffffffffffffff1660011480156119615750303b155b90508115801561196f575080155b156119a6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315611a075784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0388161580611a2457506001600160a01b038716155b15611a425760405163d92e233d60e01b815260040160405180910390fd5b611a4a61297a565b611a52612982565b611a5a61297a565b611a62612992565b611a6d600087611cdb565b50611a987f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611cdb565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a16179055611af67f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611cdb565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611b8b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b611b9d611dc8565b611ba5611e26565b84600003611bdf576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611c065760405163d92e233d60e01b815260040160405180910390fd5b611c11338587611ea7565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8787878787604051611c5c9594939291906139e0565b60405180910390a361139660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611cc781611cd1565b6109fc83836121bd565b61107c81336129a2565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611dbe576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611d743390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610827565b6000915050610827565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611e24576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611ea1576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b039081169083160361200b57611ed26001600160a01b038316843084612a2f565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f62919061397b565b611f98576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611ff757600080fd5b505af1158015610f55573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561206e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612092919061397b565b6120c8576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610db0906001600160a01b038481169186911684612a2f565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60606121168383612a68565b600080856001600160a01b0316348686604051612134929190613a27565b60006040518083038185875af1925050503d8060008114612171576040519150601f19603f3d011682016040523d82523d6000602084013e612176565b606091505b5091509150816121b2576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611dbe576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610827565b6040516001600160a01b03838116602483015260448201839052610db091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612b68565b6060836001600160a01b031663676cc054348786866040518563ffffffff1660e01b815260040161232893929190613a37565b60006040518083038185885af1158015612346573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261236f9190810190613a62565b95945050505050565b612380612be4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806124a157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166124957f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611e24576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061109a81611cd1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561253d575060408051601f3d908101601f1916820190925261253a91810190613998565b60015b612583576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146125df576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161257a565b610db08383612c3f565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612655573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b6919061397b565b6003546001600160a01b03908116908316036127c8576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156126fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271f919061397b565b612755576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156127b457600080fd5b505af1158015611396573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561282b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284f919061397b565b612885576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005461109a906001600160a01b03848116911683612281565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e24576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612909611dc8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336123ea565b611e24612c95565b61298a612c95565b611e24612cfc565b61299a612c95565b611e24612d04565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff1661109a576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161257a565b6040516001600160a01b0384811660248301528381166044830152606482018390526109fc9186918216906323b872dd906084016122ae565b6004811061109a5781357f98933fac000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601612aed576040517fed69977500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa53e1f90000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610db0576040517ff3459a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612b7d6001600160a01b03841683612d55565b90508051600014158015612ba2575080806020019051810190612ba0919061397b565b155b15610db0576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161257a565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611e24576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c4882612d63565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612c8d57610db08282612e0b565b61109a612e78565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611e24576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120e4612c95565b612d0c612c95565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606121b683836000612eb0565b806001600160a01b03163b600003612db2576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161257a565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612e289190613ad0565b600060405180830381855af49150503d8060008114612e63576040519150601f19603f3d011682016040523d82523d6000602084013e612e68565b606091505b509150915061236f858383612f66565b3415611e24576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081471015612eee576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161257a565b600080856001600160a01b03168486604051612f0a9190613ad0565b60006040518083038185875af1925050503d8060008114612f47576040519150601f19603f3d011682016040523d82523d6000602084013e612f4c565b606091505b5091509150612f5c868383612f66565b9695505050505050565b606082612f7b57612f7682612fdb565b6121b6565b8151158015612f9257506001600160a01b0384163b155b15612fd4576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161257a565b50806121b6565b805115612feb5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561302f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146121b657600080fd5b80356001600160a01b038116811461307657600080fd5b919050565b60006020828403121561308d57600080fd5b6121b68261305f565b600060a082840312156130a857600080fd5b50919050565b600080600080608085870312156130c457600080fd5b6130cd8561305f565b9350602085013592506130e26040860161305f565b9150606085013567ffffffffffffffff8111156130fe57600080fd5b61310a87828801613096565b91505092959194509250565b60008083601f84011261312857600080fd5b50813567ffffffffffffffff81111561314057600080fd5b60208301915083602082850101111561315857600080fd5b9250929050565b6000608082840312156130a857600080fd5b6000806000806060858703121561318757600080fd5b6131908561305f565b9350602085013567ffffffffffffffff8111156131ac57600080fd5b6131b887828801613116565b909450925050604085013567ffffffffffffffff8111156131d857600080fd5b61310a8782880161315f565b600080600080606085870312156131fa57600080fd5b6132038561305f565b9350602085013567ffffffffffffffff81111561321f57600080fd5b61322b87828801613116565b909450925050604085013567ffffffffffffffff8111156130fe57600080fd5b60008060006040848603121561326057600080fd5b6132698461305f565b9250602084013567ffffffffffffffff81111561328557600080fd5b61329186828701613116565b9497909650939450505050565b60005b838110156132b95781810151838201526020016132a1565b50506000910152565b600081518084526132da81602086016020860161329e565b601f01601f19169290920160200192915050565b6020815260006121b660208301846132c2565b60006020828403121561331357600080fd5b5035919050565b6000806040838503121561332d57600080fd5b8235915061333d6020840161305f565b90509250929050565b60008060008060008060a0878903121561335f57600080fd5b6133688761305f565b95506133766020880161305f565b945060408701359350606087013567ffffffffffffffff81111561339957600080fd5b6133a589828a01613116565b909450925050608087013567ffffffffffffffff8111156133c557600080fd5b6133d189828a0161315f565b9150509295509295509295565b60008060008084860360608112156133f557600080fd5b602081121561340357600080fd5b508493506134136020860161305f565b9250604085013567ffffffffffffffff81111561342f57600080fd5b61343b87828801613116565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561349f5761349f613447565b604052919050565b600067ffffffffffffffff8211156134c1576134c1613447565b50601f01601f191660200190565b600080604083850312156134e257600080fd5b6134eb8361305f565b9150602083013567ffffffffffffffff81111561350757600080fd5b8301601f8101851361351857600080fd5b803561352b613526826134a7565b613476565b81815286602083850101111561354057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561357857600080fd5b6135818661305f565b945061358f6020870161305f565b935060408601359250606086013567ffffffffffffffff8111156135b257600080fd5b6135be88828901613116565b969995985093965092949392505050565b600080600080606085870312156135e557600080fd5b6135ee8561305f565b935060208501359250604085013567ffffffffffffffff81111561342f57600080fd5b6000806040838503121561362457600080fd5b61362d8361305f565b9150602083013567ffffffffffffffff81111561364957600080fd5b61365585828601613096565b9150509250929050565b60008060006060848603121561367457600080fd5b61367d8461305f565b925061368b6020850161305f565b91506136996040850161305f565b90509250925092565b60008060008060008060a087890312156136bb57600080fd5b6136c48761305f565b9550602087013594506136d96040880161305f565b9350606087013567ffffffffffffffff8111156136f557600080fd5b61370189828a01613116565b909450925050608087013567ffffffffffffffff81111561372157600080fd5b6133d189828a01613096565b801515811461107c57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261377057600080fd5b830160208101925035905067ffffffffffffffff81111561379057600080fd5b80360382131561315857600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b036137db8261305f565b168252600060208201356137ee8161372d565b151560208401526001600160a01b036138096040840161305f565b16604084015261381c606083018361373b565b60a0606086015261383160a08601828461379f565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a06060820152600061236f60a08301846137ca565b6001600160a01b0361388e8261305f565b1682526001600160a01b036138a56020830161305f565b1660208301526000604082013567ffffffffffffffff81168082146138c957600080fd5b6040850152506138dc606083018361373b565b6080606086015261236f60808601828461379f565b6020815260006121b6602083018461387d565b84815260606020820152600061391e60608301858761379f565b8281036040840152613930818561387d565b979650505050505050565b60408152600061394f60408301858761379f565b8281036020840152612f5c81856137ca565b83815260406020820152600061236f60408301848661379f565b60006020828403121561398d57600080fd5b81516121b68161372d565b6000602082840312156139aa57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8581526001600160a01b0385166020820152608060408201526000613a0960808301858761379f565b8281036060840152613a1b81856137ca565b98975050505050505050565b8183823760009101908152919050565b6001600160a01b03613a488561305f565b16815260406020820152600061236f60408301848661379f565b600060208284031215613a7457600080fd5b815167ffffffffffffffff811115613a8b57600080fd5b8201601f81018413613a9c57600080fd5b8051613aaa613526826134a7565b818152856020838501011115613abf57600080fd5b61236f82602083016020860161329e565b60008251613ae281846020870161329e565b919091019291505056fea2646970667358221220410f991bd09d83d98db2e20feb9939d7548e168d9dfee5819b3f462840a9095a64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a003360a060405234801561001057600080fd5b50604051611c7f380380611c7f83398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611c5f8339815191528261014c565b50610143600080516020611c5f8339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b6080516119e8610277600039600081816101ca01528181610556015281816105ab015281816107c8015261081d01526119e86000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638456cb59116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103d5578063e63ab1e9146103e8578063eab103df1461040f57600080fd5b8063d547741f1461038c578063d936547e1461039f578063d9caed12146103c257600080fd5b80639a590427116100bd5780639a5904271461035e5780639b19251a14610371578063a217fddf1461038457600080fd5b80638456cb59146102f657806385f438c1146102fe57806391d148541461032557600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102c55780635c975abb146102d85780635eb72e15146102e357600080fd5b806336568abe146102835780633f4ba83a14610296578063570618e11461029e57600080fd5b8063248a9ca311610176578063248a9ca314610219578063252f07bf1461024b5780632f2ff15d1461027057600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610204575b600080fd5b6101b06101ab3660046113c2565b610422565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bc565b610217610212366004611462565b6104bb565b005b61023d6102273660046114d5565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61021761027e3660046114ee565b61067b565b6102176102913660046114ee565b6106a7565b6102176106f8565b61023d7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec906001600160a01b031681565b60025460ff166101b0565b6102176102f136600461151e565b61072d565b6102176108f2565b61023d7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b06103333660046114ee565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61021761036c3660046115c1565b610924565b61021761037f3660046115c1565b6109d8565b61023d600081565b61021761039a3660046114ee565b610a8f565b6101b06103ad3660046115c1565b60036020526000908152604090205460ff1681565b6102176103d03660046115de565b610ab5565b6102176103e336600461161f565b610bad565b61023d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61021761041d3660046116be565b610dd9565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104b557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104c3610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104ed81610e72565b6104f5610e7c565b6001600160a01b03851660009081526003602052604090205460ff16610547576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61057b6001600160a01b0386167f000000000000000000000000000000000000000000000000000000000000000086610ebb565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906105e89088908a90899089908990600401611724565b600060405180830381600087803b15801561060257600080fd5b505af1158015610616573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161066193929190611767565b60405180910390a3506106746001600055565b5050505050565b6000828152600160208190526040909120015461069781610e72565b6106a18383610f2f565b50505050565b6001600160a01b03811633146106e9576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106f38282610fc2565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61072281610e72565b61072a611049565b50565b610735610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461075f81610e72565b610767610e7c565b6001600160a01b03861660009081526003602052604090205460ff166107b9576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107ed6001600160a01b0387167f000000000000000000000000000000000000000000000000000000000000000087610ebb565b6040517f36c99f3b0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b9061085c9089908b908a908a908a908a90600401611857565b600060405180830381600087803b15801561087657600080fd5b505af115801561088a573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37878787876040516108d794939291906118ae565b60405180910390a3506108ea6001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61091c81610e72565b61072a61109b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61094e81610e72565b6001600160a01b03821661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a0281610e72565b6001600160a01b038216610a42576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610aab81610e72565b6106a18383610fc2565b610abd610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ae781610e72565b610aef610e7c565b6001600160a01b03831660009081526003602052604090205460ff16610b41576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b556001600160a01b0384168584610ebb565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610b9a91815260200190565b60405180910390a3506106f36001600055565b610bb5610e2f565b610bbd610e7c565b60045474010000000000000000000000000000000000000000900460ff16610c11576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610c63576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce791906118da565b9050610cfe6001600160a01b0386163330876110d8565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610d85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da991906118da565b610db391906118f3565b8787604051610dc695949392919061192d565b60405180910390a2506108ea6001600055565b6000610de481610e72565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610e6b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61072a8133611111565b60025460ff1615610eb9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b038381166024830152604482018390526106f391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611188565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16610fba5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104b5565b5060006104b5565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1615610fba5760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104b5565b611051611204565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6110a3610e7c565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861107e3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106a19186918216906323b872dd90608401610ee8565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611184576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b600061119d6001600160a01b03841683611240565b905080516000141580156111c25750808060200190518101906111c09190611966565b155b156106f3576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161117b565b60025460ff16610eb9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061124e83836000611255565b9392505050565b606081471015611293576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161117b565b600080856001600160a01b031684866040516112af9190611983565b60006040518083038185875af1925050503d80600081146112ec576040519150601f19603f3d011682016040523d82523d6000602084013e6112f1565b606091505b509150915061130186838361130b565b9695505050505050565b6060826113205761131b82611380565b61124e565b815115801561133757506001600160a01b0384163b155b15611379576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161117b565b508061124e565b8051156113905780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156113d457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461124e57600080fd5b6001600160a01b038116811461072a57600080fd5b60008083601f84011261142b57600080fd5b50813567ffffffffffffffff81111561144357600080fd5b60208301915083602082850101111561145b57600080fd5b9250929050565b60008060008060006080868803121561147a57600080fd5b853561148581611404565b9450602086013561149581611404565b935060408601359250606086013567ffffffffffffffff8111156114b857600080fd5b6114c488828901611419565b969995985093965092949392505050565b6000602082840312156114e757600080fd5b5035919050565b6000806040838503121561150157600080fd5b82359150602083013561151381611404565b809150509250929050565b60008060008060008060a0878903121561153757600080fd5b863561154281611404565b9550602087013561155281611404565b945060408701359350606087013567ffffffffffffffff81111561157557600080fd5b61158189828a01611419565b909450925050608087013567ffffffffffffffff8111156115a157600080fd5b87016080818a0312156115b357600080fd5b809150509295509295509295565b6000602082840312156115d357600080fd5b813561124e81611404565b6000806000606084860312156115f357600080fd5b83356115fe81611404565b9250602084013561160e81611404565b929592945050506040919091013590565b6000806000806000806080878903121561163857600080fd5b863567ffffffffffffffff81111561164f57600080fd5b61165b89828a01611419565b909750955050602087013561166f81611404565b935060408701359250606087013567ffffffffffffffff81111561169257600080fd5b61169e89828a01611419565b979a9699509497509295939492505050565b801515811461072a57600080fd5b6000602082840312156116d057600080fd5b813561124e816116b0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061175c6080830184866116db565b979650505050505050565b8381526040602082015260006117816040830184866116db565b95945050505050565b6000813561179781611404565b6001600160a01b0316835260208201356117b081611404565b6001600160a01b03166020840152604082013567ffffffffffffffff81168082146117da57600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261181657600080fd5b820160208101903567ffffffffffffffff81111561183357600080fd5b80360382131561184257600080fd5b608060608601526117816080860182846116db565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061188f60a0830185876116db565b82810360808401526118a1818561178a565b9998505050505050505050565b8481526060602082015260006118c86060830185876116db565b828103604084015261175c818561178a565b6000602082840312156118ec57600080fd5b5051919050565b818103818111156104b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006119416060830187896116db565b856020840152828103604084015261195a8185876116db565b98975050505050505050565b60006020828403121561197857600080fd5b815161124e816116b0565b6000825160005b818110156119a4576020818601810151858301520161198a565b50600092019182525091905056fea2646970667358221220dc0b6596b7b61441087636724be59e8874b026b619128cbecb229a5609d1f02d64736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a", } // GatewayEVMEchidnaTestABI is the input ABI used to generate the binding from. @@ -866,23 +867,23 @@ func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) Execute0(m return _GatewayEVMEchidnaTest.Contract.Execute0(&_GatewayEVMEchidnaTest.TransactOpts, messageContext, destination, data) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0xf7ad60db. +// ExecuteRevert is a paid mutator transaction binding the contract method 0x1b5ee25b. // -// Solidity: function executeRevert(address destination, bytes data, (address,uint64,bytes) revertContext) payable returns() +// Solidity: function executeRevert(address destination, bytes data, (address,address,uint64,bytes) revertContext) payable returns() func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) ExecuteRevert(opts *bind.TransactOpts, destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVMEchidnaTest.contract.Transact(opts, "executeRevert", destination, data, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0xf7ad60db. +// ExecuteRevert is a paid mutator transaction binding the contract method 0x1b5ee25b. // -// Solidity: function executeRevert(address destination, bytes data, (address,uint64,bytes) revertContext) payable returns() +// Solidity: function executeRevert(address destination, bytes data, (address,address,uint64,bytes) revertContext) payable returns() func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) ExecuteRevert(destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVMEchidnaTest.Contract.ExecuteRevert(&_GatewayEVMEchidnaTest.TransactOpts, destination, data, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0xf7ad60db. +// ExecuteRevert is a paid mutator transaction binding the contract method 0x1b5ee25b. // -// Solidity: function executeRevert(address destination, bytes data, (address,uint64,bytes) revertContext) payable returns() +// Solidity: function executeRevert(address destination, bytes data, (address,address,uint64,bytes) revertContext) payable returns() func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) ExecuteRevert(destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVMEchidnaTest.Contract.ExecuteRevert(&_GatewayEVMEchidnaTest.TransactOpts, destination, data, revertContext) } @@ -992,23 +993,23 @@ func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) RenounceRo return _GatewayEVMEchidnaTest.Contract.RenounceRole(&_GatewayEVMEchidnaTest.TransactOpts, role, callerConfirmation) } -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xd0b492c3. +// RevertWithERC20 is a paid mutator transaction binding the contract method 0x36c99f3b. // -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) returns() func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactor) RevertWithERC20(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVMEchidnaTest.contract.Transact(opts, "revertWithERC20", token, to, amount, data, revertContext) } -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xd0b492c3. +// RevertWithERC20 is a paid mutator transaction binding the contract method 0x36c99f3b. // -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) returns() func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestSession) RevertWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVMEchidnaTest.Contract.RevertWithERC20(&_GatewayEVMEchidnaTest.TransactOpts, token, to, amount, data, revertContext) } -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xd0b492c3. +// RevertWithERC20 is a paid mutator transaction binding the contract method 0x36c99f3b. // -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) returns() func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestTransactorSession) RevertWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVMEchidnaTest.Contract.RevertWithERC20(&_GatewayEVMEchidnaTest.TransactOpts, token, to, amount, data, revertContext) } @@ -2097,9 +2098,9 @@ type GatewayEVMEchidnaTestReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// FilterReverted is a free log retrieval operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*GatewayEVMEchidnaTestRevertedIterator, error) { var toRule []interface{} @@ -2118,9 +2119,9 @@ func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) FilterReverted(opts return &GatewayEVMEchidnaTestRevertedIterator{contract: _GatewayEVMEchidnaTest.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// WatchReverted is a free log subscription operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *GatewayEVMEchidnaTestReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2164,9 +2165,9 @@ func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) WatchReverted(opts }), nil } -// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// ParseReverted is a log parse operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVMEchidnaTest *GatewayEVMEchidnaTestFilterer) ParseReverted(log types.Log) (*GatewayEVMEchidnaTestReverted, error) { event := new(GatewayEVMEchidnaTestReverted) if err := _GatewayEVMEchidnaTest.contract.UnpackLog(event, "Reverted", log); err != nil { diff --git a/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go b/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go index 48327986..a433cf49 100644 --- a/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go +++ b/v2/pkg/gatewayevmupgrade.t.sol/gatewayevmuupsupgradetest.go @@ -31,6 +31,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -65,8 +66,8 @@ type StdInvariantFuzzSelector struct { // GatewayEVMUUPSUpgradeTestMetaData contains all meta data concerning the GatewayEVMUUPSUpgradeTest contract. var GatewayEVMUUPSUpgradeTestMetaData = &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\":\"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\":\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061cae58061003c6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806385226c811161008c578063b5508aa911610066578063b5508aa91461018b578063ba414fa614610193578063e20c9f71146101ab578063fa7626d4146101b357600080fd5b806385226c8114610159578063916a17c61461016e578063b0464fdc1461018357600080fd5b80633e5e3c23116100c85780633e5e3c231461012c5780633f7286f41461013457806366d9a9a01461013c5780637a380ebf1461015157600080fd5b80630a9254e4146100ef5780631ed7831c146100f95780632ade388014610117575b600080fd5b6100f76101c0565b005b610101610a85565b60405161010e9190616216565b60405180910390f35b61011f610ae7565b60405161010e91906162b2565b610101610c29565b610101610c89565b610144610ce9565b60405161010e9190616418565b6100f7610e6b565b61016161152d565b60405161010e91906164b6565b6101766115fd565b60405161010e919061652d565b6101766116f8565b6101616117f3565b61019b6118c3565b604051901515815260200161010e565b610101611997565b601f5461019b9060ff1681565b602680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556027805482166112341790556028805490911661567817905560405161021290616129565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610297573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516102dc90616129565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610360573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526028546026549251908516602482015260448101939093529216606482015261044f919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526119f7565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906104db90616136565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610517573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061057290616143565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105b6573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105fb90616150565b604051809103906000f080158015610617573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074d57600080fd5b505af1158015610761573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107c757600080fd5b505af11580156107db573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108b757600080fd5b505af11580156108cb573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b15801561093c57600080fd5b505af1158015610950573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af11580156109c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ea91906165c4565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610add57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610abf575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c2057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610c09578382906000526020600020018054610b7c906165e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba8906165e6565b8015610bf55780601f10610bca57610100808354040283529160200191610bf5565b820191906000526020600020905b815481529060010190602001808311610bd857829003601f168201915b505050505081526020019060010190610b5d565b505050508152505081526020019060010190610b0b565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c205783829060005260206000209060020201604051806040016040529081600082018054610d40906165e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6c906165e6565b8015610db95780601f10610d8e57610100808354040283529160200191610db9565b820191906000526020600020905b815481529060010190602001808311610d9c57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610e5357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610e005790505b50505050508152505081526020019060010190610d0d565b60208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516000936001600160a01b039093169263dda79b7592600480820193918290030181865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190616633565b60208054604080517f5b11259100000000000000000000000000000000000000000000000000000000815290519394506000936001600160a01b0390921692635b112591926004808401938290030181865afa158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f799190616633565b604080518082018252600f81527f48656c6c6f2c20466f756e647279210000000000000000000000000000000000602080830191909152601f5483518085018552601981527f4761746577617945564d55706772616465546573742e736f6c00000000000000818401528451928301909452600082526026549495509193602a93600193670de0b6b3a764000093611023936001600160a01b036101009093048316939216611a16565b600084848460405160240161103a9392919061665c565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052601f5460215491517ff30c7ba30000000000000000000000000000000000000000000000000000000081529293506001600160a01b03610100909104811692737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926111009291169087908790600401616686565b600060405180830381600087803b15801561111a57600080fd5b505af115801561112e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061121d92506001600160a01b039091169086908a908a908a906166ae565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112b357600080fd5b505af11580156112c7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546915061130c90869086906166ef565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561138657600080fd5b505af115801561139a573d6000803e3d6000fd5b50506021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169450631cff79cd935087926113ec929116908790600401616708565b60006040518083038185885af115801561140a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526114339190810190616812565b5060208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516114c0938c936001600160a01b03169263dda79b7592600480830193928290030181865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190616633565b611a32565b60208054604080517f5b1125910000000000000000000000000000000000000000000000000000000081529051611523938b936001600160a01b031692635b11259192600480830193928290030181865afa158015611497573d6000803e3d6000fd5b5050505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611570906165e6565b80601f016020809104026020016040519081016040528092919081815260200182805461159c906165e6565b80156115e95780601f106115be576101008083540402835291602001916115e9565b820191906000526020600020905b8154815290600101906020018083116115cc57829003601f168201915b505050505081526020019060010190611551565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156116e057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161168d5790505b50505050508152505081526020019060010190611621565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156117db57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116117885790505b5050505050815250508152602001906001019061171c565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611836906165e6565b80601f0160208091040260200160405190810160405280929190818152602001828054611862906165e6565b80156118af5780601f10611884576101008083540402835291602001916118af565b820191906000526020600020905b81548152906001019060200180831161189257829003601f168201915b505050505081526020019060010190611817565b60085460009060ff16156118db575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa15801561196c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119909190616847565b1415905090565b60606015805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6000611a0161615d565b611a0c848483611ac2565b9150505b92915050565b611a1e61615d565b611a2b8585858486611b3d565b5050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f69060440160006040518083038186803b158015611aa657600080fd5b505afa158015611aba573d6000803e3d6000fd5b505050505050565b600080611acf8584611c3e565b9050611b326040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001611b1d929190616708565b60405160208183030381529060405285611c4a565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015611baf57600080fd5b505af1925050508015611bc0575060015b611bd557611bd087878787611c78565b611c35565b611be187878787611c78565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c1c57600080fd5b505af1158015611c30573d6000803e3d6000fd5b505050505b50505050505050565b6000611b368383611c91565b60c08101515160009015611c6e57611c6784848460c00151611cac565b9050611b36565b611c678484611e52565b6000611c848483611f3d565b9050611a2b858285611f49565b6000611c9d8383612313565b611b3683836020015184611c4a565b600080611cb7612323565b90506000611cc586836123f6565b90506000611cdc826060015183602001518561289c565b90506000611cec83838989612aae565b90506000611cf98261392b565b602081015181519192509060030b15611d6c57898260400151604051602001611d23929190616860565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252611d63916004016168e1565b60405180910390fd5b6000611daf6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001613afa565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90611e029084906004016168e1565b602060405180830381865afa158015611e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e439190616633565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590611ea79087906004016168e1565b600060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eec9190810190616812565b90506000611f1a8285604051602001611f069291906168f4565b604051602081830303815290604052613cfa565b90506001600160a01b038116611a0c578484604051602001611d23929190616923565b6000611c9d8383613d0d565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa158015611fe5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120099190616847565b9050806121b057600061201b86613d19565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506120a6905b60408051808201825260008082526020918201528151808301909252845182528085019082015290613e11565b806120b2575060008451115b15612135576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906120fe9088908890600401616708565b600060405180830381600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505050506121aa565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561219157600080fd5b505af11580156121a5573d6000803e3d6000fd5b505050505b50611a2b565b8060006121bc82613d19565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061221e90612079565b8061222a575060008551115b156122af576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90612278908a908a908a906004016169ce565b600060405180830381600087803b15801561229257600080fd5b505af11580156122a6573d6000803e3d6000fd5b50505050611c35565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b158015611c1c57600080fd5b61231f82826000613e25565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906123aa9084906004016169ff565b600060405180830381865afa1580156123c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123ef9190810190616a46565b9250505090565b6124286040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506124736040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61247c85613f28565b6020820152600061248c8661430d565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156124ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f69190810190616a46565b868385602001516040516020016125109493929190616a8f565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906125689085906004016168e1565b600060405180830381865afa158015612585573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125ad9190810190616a46565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906125f5908490600401616b93565b602060405180830381865afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263691906165c4565b61264b5781604051602001611d239190616be5565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612690908490600401616c77565b600060405180830381865afa1580156126ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126d59190810190616a46565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061271c908490600401616cc9565b602060405180830381865afa158015612739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275d91906165c4565b156127f2576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906127a7908490600401616cc9565b600060405180830381865afa1580156127c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127ec9190810190616a46565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016128179190616d1b565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612843929190616d87565b600060405180830381865afa158015612860573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128889190810190616a46565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816128b85790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061291857612918616dac565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061296c5761296c616dac565b6020026020010181905250846040516020016129889190616ddb565b604051602081830303815290604052816002815181106129aa576129aa616dac565b6020026020010181905250826040516020016129c69190616e47565b604051602081830303815290604052816003815181106129e8576129e8616dac565b602002602001018190525060006129fe8261392b565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250612a8f9060408051808201825260008082526020918201528151808301909252845182528085019082015290614590565b612aa45785604051602001611d239190616e88565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015612afe565b511590565b612c7257826020015115612bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401611d63565b8260c0015115612c72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401611d63565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081612c8b57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280612ce690616f48565b935060ff1681518110612cfb57612cfb616dac565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001612d4c9190616f67565b604051602081830303815290604052828280612d6790616f48565b935060ff1681518110612d7c57612d7c616dac565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280612dc990616f48565b935060ff1681518110612dde57612dde616dac565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280612e2b90616f48565b935060ff1681518110612e4057612e40616dac565b60200260200101819052508760200151828280612e5c90616f48565b935060ff1681518110612e7157612e71616dac565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280612ebe90616f48565b935060ff1681518110612ed357612ed3616dac565b602090810291909101015287518282612eeb81616f48565b935060ff1681518110612f0057612f00616dac565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280612f4d90616f48565b935060ff1681518110612f6257612f62616dac565b6020026020010181905250612f76466145f1565b8282612f8181616f48565b935060ff1681518110612f9657612f96616dac565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280612fe390616f48565b935060ff1681518110612ff857612ff8616dac565b60200260200101819052508682828061301090616f48565b935060ff168151811061302557613025616dac565b602090810291909101015285511561314c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261307681616f48565b935060ff168151811061308b5761308b616dac565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906130db9089906004016168e1565b600060405180830381865afa1580156130f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131209190810190616a46565b828261312b81616f48565b935060ff168151811061314057613140616dac565b60200260200101819052505b84602001511561321c5760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261319581616f48565b935060ff16815181106131aa576131aa616dac565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806131f790616f48565b935060ff168151811061320c5761320c616dac565b60200260200101819052506133e3565b613254612af98660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6132e75760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261329781616f48565b935060ff16815181106132ac576132ac616dac565b60200260200101819052508460a001516040516020016132cc9190616ddb565b6040516020818303038152906040528282806131f790616f48565b8460c0015115801561332a57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261332890511590565b155b156133e35760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261336e81616f48565b935060ff168151811061338357613383616dac565b602002602001018190525061339788614691565b6040516020016133a79190616ddb565b6040516020818303038152906040528282806133c290616f48565b935060ff16815181106133d7576133d7616dac565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261341790511590565b6134ac5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261345a81616f48565b935060ff168151811061346f5761346f616dac565b6020026020010181905250846040015182828061348b90616f48565b935060ff16815181106134a0576134a0616dac565b60200260200101819052505b6060850151156135cd5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826134f581616f48565b935060ff168151811061350a5761350a616dac565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015613579573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135a19190810190616a46565b82826135ac81616f48565b935060ff16815181106135c1576135c1616dac565b60200260200101819052505b60e085015151156136745760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261361781616f48565b935060ff168151811061362c5761362c616dac565b60200260200101819052506136488560e00151600001516145f1565b828261365381616f48565b935060ff168151811061366857613668616dac565b60200260200101819052505b60e0850151602001511561371e5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826136c181616f48565b935060ff16815181106136d6576136d6616dac565b60200260200101819052506136f28560e00151602001516145f1565b82826136fd81616f48565b935060ff168151811061371257613712616dac565b60200260200101819052505b60e085015160400151156137c85760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261376b81616f48565b935060ff168151811061378057613780616dac565b602002602001018190525061379c8560e00151604001516145f1565b82826137a781616f48565b935060ff16815181106137bc576137bc616dac565b60200260200101819052505b60e085015160600151156138725760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261381581616f48565b935060ff168151811061382a5761382a616dac565b60200260200101819052506138468560e00151606001516145f1565b828261385181616f48565b935060ff168151811061386657613866616dac565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156138905761389061672a565b6040519080825280602002602001820160405280156138c357816020015b60608152602001906001900390816138ae5790505b50905060005b8260ff168160ff16101561391c57838160ff16815181106138ec576138ec616dac565b6020026020010151828260ff168151811061390957613909616dac565b60209081029190910101526001016138c9565b5093505050505b949350505050565b6139526040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916139d891869101616fd2565b600060405180830381865afa1580156139f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a1d9190810190616a46565b90506000613a2b8683615180565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401613a5b91906164b6565b6000604051808303816000875af1158015613a7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613aa29190810190617019565b805190915060030b15801590613abb5750602081015151155b8015613aca5750604081015151155b15612aa45781600081518110613ae257613ae2616dac565b6020026020010151604051602001611d2391906170cf565b60606000613b2f8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150613b669082905b906152d5565b15613cc3576000613be382613bdd84613bd7613ba98a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906152fc565b9061535e565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613c479082906152d5565b15613cb157604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613cae905b82906153e3565b90505b613cba81615409565b92505050611b36565b8215613cdc578484604051602001611d239291906172bb565b5050604080516020810190915260008152611b36565b509392505050565b6000808251602084016000f09392505050565b61231f82826001613e25565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691613d8e9190617362565b600060405180830381855afa9150503d8060008114613dc9576040519150601f19603f3d011682016040523d82523d6000602084013e613dce565b606091505b5091509150818015613de1575060208151115b15613dfa57808060200190518101906139239190616a46565b505060408051602081019091526000815292915050565b6000613e1d8383615472565b159392505050565b8160a0015115613e3457505050565b6000613e4184848461554d565b90506000613e4e8261392b565b602081015181519192509060030b158015613eea5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613eea90604080518082018252600080825260209182015281518083019092528451825280850190820152613b60565b15613ef757505050505050565b60408201515115613f17578160400151604051602001611d23919061737e565b80604051602001611d2391906173dc565b60606000613f5d8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613fc2905b8290614590565b1561403157604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b369061402c908390615ae8565b615409565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614093905b8290615b72565b60010361416057604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526140f990613ca7565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b369061402c905b83906153e3565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526141bf90613fbb565b156142f657604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614227908390615c0c565b90506000816001835161423a9190617447565b8151811061424a5761424a616dac565b602002602001015190506142ed61402c6142c06040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290615ae8565b95945050505050565b82604051602001611d23919061745a565b50919050565b606060006143428360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506143a490613fbb565b156143b257611b3681615409565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526144119061408c565b60010361447b57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b369061402c90614159565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526144da90613fbb565b156142f657604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614542908390615c0c565b905060018151111561457e57806002825161455d9190617447565b8151811061456d5761456d616dac565b602002602001015192505050919050565b5082604051602001611d23919061745a565b8051825160009111156145a557506000611a10565b815183516020850151600092916145bb91617538565b6145c59190617447565b9050826020015181036145dc576001915050611a10565b82516020840151819020912014905092915050565b606060006145fe83615cb1565b600101905060008167ffffffffffffffff81111561461e5761461e61672a565b6040519080825280601f01601f191660200182016040528015614648576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461465257509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161471d905b8290613e11565b1561475d57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526147bc90614716565b156147fc57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261485b90614716565b1561489b57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148fa90614716565b8061495f5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261495f90614716565b1561499f57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149fe90614716565b80614a635750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614a6390614716565b15614aa357505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b0290614716565b80614b675750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b6790614716565b15614ba757505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614c0690614716565b80614c6b5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614c6b90614716565b15614cab57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614d0a90614716565b15614d4a57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614da990614716565b15614de957505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e4890614716565b15614e8857505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614ee790614716565b15614f2757505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f8690614716565b15614fc657505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261502590614716565b8061508a5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261508a90614716565b156150ca57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261512990614716565b1561516957505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151611d23929060200161754b565b60608060005b845181101561520b57818582815181106151a2576151a2616dac565b60200260200101516040516020016151bb9291906168f4565b6040516020818303038152906040529150600185516151da9190617447565b811461520357816040516020016151f191906176b4565b60405160208183030381529060405291505b600101615186565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081615224579050509050838160008151811061524f5761524f616dac565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106152a3576152a3616dac565b602002602001018190525081816002815181106152c2576152c2616dac565b6020908102919091010152949350505050565b60208083015183518351928401516000936152f39291849190615d93565b14159392505050565b6040805180820190915260008082526020820152600061532e8460000151856020015185600001518660200151615ea4565b90508360200151816153409190617447565b8451859061534f908390617447565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015615383575081611a10565b60208083015190840151600191146153aa5750815160208481015190840151829020919020145b80156153db578251845185906153c1908390617447565b90525082516020850180516153d7908390617538565b9052505b509192915050565b6040805180820190915260008082526020820152615402838383615fc4565b5092915050565b60606000826000015167ffffffffffffffff81111561542a5761542a61672a565b6040519080825280601f01601f191660200182016040528015615454576020820181803683370190505b5090506000602082019050615402818560200151866000015161606f565b8151815160009190811115615485575081515b6020808501519084015160005b8381101561553e578251825180821461550e5760001960208710156154ed576001846154bf896020617447565b6154c99190617538565b6154d49060086176f5565b6154df9060026177f3565b6154e99190617447565b1990505b818116838216818103911461550b579750611a109650505050505050565b50505b615519602086617538565b9450615526602085617538565b935050506020816155379190617538565b9050615492565b5084518651612aa491906177ff565b60606000615559612323565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161557657905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806155d190616f48565b935060ff16815181106155e6576155e6616dac565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001615637919061781f565b60405160208183030381529060405282828061565290616f48565b935060ff168151811061566757615667616dac565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806156b490616f48565b935060ff16815181106156c9576156c9616dac565b6020026020010181905250826040516020016156e59190616e47565b60405160208183030381529060405282828061570090616f48565b935060ff168151811061571557615715616dac565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061576290616f48565b935060ff168151811061577757615777616dac565b602002602001018190525061578c87846160e9565b828261579781616f48565b935060ff16815181106157ac576157ac616dac565b6020908102919091010152855151156158585760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826157fe81616f48565b935060ff168151811061581357615813616dac565b602002602001018190525061582c8660000151846160e9565b828261583781616f48565b935060ff168151811061584c5761584c616dac565b60200260200101819052505b8560800151156158c65760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826158a181616f48565b935060ff16815181106158b6576158b6616dac565b602002602001018190525061592c565b841561592c5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261590b81616f48565b935060ff168151811061592057615920616dac565b60200260200101819052505b604086015151156159c85760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261597681616f48565b935060ff168151811061598b5761598b616dac565b602002602001018190525085604001518282806159a790616f48565b935060ff16815181106159bc576159bc616dac565b60200260200101819052505b856060015115615a325760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282615a1181616f48565b935060ff1681518110615a2657615a26616dac565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615a5057615a5061672a565b604051908082528060200260200182016040528015615a8357816020015b6060815260200190600190039081615a6e5790505b50905060005b8260ff168160ff161015615adc57838160ff1681518110615aac57615aac616dac565b6020026020010151828260ff1681518110615ac957615ac9616dac565b6020908102919091010152600101615a89565b50979650505050505050565b6040805180820190915260008082526020820152815183511015615b0d575081611a10565b81518351602085015160009291615b2391617538565b615b2d9190617447565b60208401519091506001908214615b4e575082516020840151819020908220145b8015615b6957835185518690615b65908390617447565b9052505b50929392505050565b6000808260000151615b968560000151866020015186600001518760200151615ea4565b615ba09190617538565b90505b83516020850151615bb49190617538565b81116154025781615bc481617864565b9250508260000151615bfb856020015183615bdf9190617447565b8651615beb9190617447565b8386600001518760200151615ea4565b615c059190617538565b9050615ba3565b60606000615c1a8484615b72565b615c25906001617538565b67ffffffffffffffff811115615c3d57615c3d61672a565b604051908082528060200260200182016040528015615c7057816020015b6060815260200190600190039081615c5b5790505b50905060005b8151811015613cf257615c8c61402c86866153e3565b828281518110615c9e57615c9e616dac565b6020908102919091010152600101615c76565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310615cfa577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310615d26576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310615d4457662386f26fc10000830492506010015b6305f5e1008310615d5c576305f5e100830492506008015b6127108310615d7057612710830492506004015b60648310615d82576064830492506002015b600a8310611a105760010192915050565b600080858411615e9a5760208411615e465760008415615dde576001615dba866020617447565b615dc59060086176f5565b615dd09060026177f3565b615dda9190617447565b1990505b8351811685615ded8989617538565b615df79190617447565b805190935082165b818114615e3157878411615e195787945050505050613923565b83615e238161787e565b945050828451169050615dff565b615e3b8785617538565b945050505050613923565b838320615e538588617447565b615e5d9087617538565b91505b858210615e9857848220808203615e8557615e7b8684617538565b9350505050613923565b615e90600184617447565b925050615e60565b505b5092949350505050565b60008381868511615faf5760208511615f5e5760008515615ef0576001615ecc876020617447565b615ed79060086176f5565b615ee29060026177f3565b615eec9190617447565b1990505b84518116600087615f018b8b617538565b615f0b9190617447565b855190915083165b828114615f5057818610615f3857615f2b8b8b617538565b9650505050505050613923565b85615f4281617864565b965050838651169050615f13565b859650505050505050613923565b508383206000905b615f708689617447565b8211615fad57858320808203615f8c5783945050505050613923565b615f97600185617538565b9350508180615fa590617864565b925050615f66565b505b615fb98787617538565b979650505050505050565b60408051808201909152600080825260208201526000615ff68560000151866020015186600001518760200151615ea4565b6020808701805191860191909152519091506160129082617447565b8352845160208601516160259190617538565b81036160345760008552616066565b835183516160429190617538565b85518690616051908390617447565b90525083516160609082617538565b60208601525b50909392505050565b602081106160a75781518352616086602084617538565b9250616093602083617538565b91506160a0602082617447565b905061606f565b60001981156160d65760016160bd836020617447565b6160c9906101006177f3565b6160d39190617447565b90505b9151835183169219169190911790915250565b606060006160f784846123f6565b805160208083015160405193945061611193909101617895565b60405160208183030381529060405291505092915050565b610c9f806178ee83390190565b611eb98061858d83390190565b6117838061a44683390190565b610ee78061bbc983390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016161a06161a5565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016161a06040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156162575783516001600160a01b0316835260209384019390920191600101616230565b509095945050505050565b60005b8381101561627d578181015183820152602001616265565b50506000910152565b6000815180845261629e816020860160208601616262565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163ae577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015616394577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261637e848651616286565b6020958601959094509290920191600101616344565b5091975050506020948501949290920191506001016162da565b50929695505050505050565b600081518084526020840193506020830160005b8281101561640e5781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016163ce565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163ae577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526164846040880182616286565b905060208201519150868103602088015261649f81836163ba565b965050506020938401939190910190600101616440565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163ae577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452616518858351616286565b945060209384019391909101906001016164de565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163ae577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526165ae60408701826163ba565b9550506020938401939190910190600101616555565b6000602082840312156165d657600080fd5b81518015158114611b3657600080fd5b600181811c908216806165fa57607f821691505b602082108103614307577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561664557600080fd5b81516001600160a01b0381168114611b3657600080fd5b60608152600061666f6060830186616286565b602083019490945250901515604090910152919050565b6001600160a01b03841681528260208201526060604082015260006142ed6060830184616286565b6001600160a01b038616815284602082015260a0604082015260006166d660a0830186616286565b6060830194909452509015156080909101529392505050565b8281526040602082015260006139236040830184616286565b6001600160a01b03831681526040602082015260006139236040830184616286565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561677c5761677c61672a565b60405290565b60008067ffffffffffffffff84111561679d5761679d61672a565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156167cc576167cc61672a565b6040528381529050808284018510156167e457600080fd5b613cf2846020830185616262565b600082601f83011261680357600080fd5b611b3683835160208501616782565b60006020828403121561682457600080fd5b815167ffffffffffffffff81111561683b57600080fd5b611a0c848285016167f2565b60006020828403121561685957600080fd5b5051919050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161689881601a850160208801616262565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516168d581601c840160208801616262565b01601c01949350505050565b602081526000611b366020830184616286565b60008351616906818460208801616262565b83519083019061691a818360208801616262565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161695b81601a850160208801616262565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351616998816033840160208801616262565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006142ed6060830184616286565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000611b366080830184616286565b600060208284031215616a5857600080fd5b815167ffffffffffffffff811115616a6f57600080fd5b8201601f81018413616a8057600080fd5b611a0c84825160208401616782565b60008551616aa1818460208a01616262565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551616adb816001840160208a01616262565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451616b19816002840160208901616262565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351616b5b816002840160208801616262565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000616ba66040830184616286565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251616c1d81601f850160208701616262565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000616c8a6040830184616286565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000616cdc6040830184616286565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251616d53816014850160208701616262565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000616d9a6040830185616286565b8281036020840152611b328185616286565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251616e13816001850160208701616262565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251616e59818460208701616262565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251616f0c81604b850160208701616262565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff8103616f5e57616f5e616f19565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251616fc5816029850160208701616262565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000611b366080830184616286565b60006020828403121561702b57600080fd5b815167ffffffffffffffff81111561704257600080fd5b82016060818503121561705457600080fd5b61705c616759565b81518060030b811461706d57600080fd5b8152602082015167ffffffffffffffff81111561708957600080fd5b617095868285016167f2565b602083015250604082015167ffffffffffffffff8111156170b557600080fd5b6170c1868285016167f2565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161712d816021850160208701616262565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351617319816021850160208801616262565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161735681602e840160208801616262565b01602e01949350505050565b60008251617374818460208701616262565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251616fc5816029850160208701616262565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161743a816022850160208701616262565b9190910160220192915050565b81810381811115611a1057611a10616f19565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161749281600e850160208701616262565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115611a1057611a10616f19565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351617583816018850160208801616262565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516175c081601c840160208801616262565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516176c6818460208701616262565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417611a1057611a10616f19565b6001815b60018411156177475780850481111561772b5761772b616f19565b600184161561773957908102905b60019390931c928002617710565b935093915050565b60008261775e57506001611a10565b8161776b57506000611a10565b8160018114617781576002811461778b576177a7565b6001915050611a10565b60ff84111561779c5761779c616f19565b50506001821b611a10565b5060208310610133831016604e8410600b84101617156177ca575081810a611a10565b6177d7600019848461770c565b80600019048211156177eb576177eb616f19565b029392505050565b6000611b36838361774f565b818103600083128015838313168383128216171561540257615402616f19565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161785781601c850160208701616262565b91909101601c0192915050565b6000600019820361787757617877616f19565b5060010190565b60008161788d5761788d616f19565b506000190190565b600083516178a7818460208801616262565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516178e1816001840160208801616262565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a003360a060405234801561001057600080fd5b50604051611eb9380380611eb983398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611e998339815191528261014c565b50610143600080516020611e998339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b608051611c22610277600039600081816101ca01528181610597015281816105f901528181610a280152610a8a0152611c226000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806385f438c1116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103fc578063e63ab1e91461040f578063eab103df1461043657600080fd5b8063d547741f146103b3578063d936547e146103c6578063d9caed12146103e957600080fd5b80639b19251a116100bd5780639b19251a14610385578063a217fddf14610398578063c709ab6e146103a057600080fd5b806385f438c11461030557806391d148541461032c5780639a5904271461037257600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102d25780635c975abb146102f25780638456cb59146102fd57600080fd5b806336568abe146102905780633f4ba83a146102a3578063570618e1146102ab57600080fd5b8063248a9ca311610176578063248a9ca314610226578063252f07bf146102585780632f2ff15d1461027d57600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610211575b600080fd5b6101b06101ab3660046115ca565b610449565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b61022461021f366004611677565b6104e2565b005b61024a6102343660046116ea565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61022461028b366004611703565b6106e3565b61022461029e366004611703565b61070f565b61022461076d565b61024a7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff166101b0565b6102246107a2565b61024a7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b061033a366004611703565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610224610380366004611733565b6107d4565b610224610393366004611733565b6108a2565b61024a600081565b6102246103ae366004611750565b610973565b6102246103c1366004611703565b610b79565b6101b06103d4366004611733565b60036020526000908152604090205460ff1681565b6102246103f73660046117f3565b610b9f565b61022461040a366004611834565b610ccb565b61024a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102246104443660046118d3565b610f2b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104dc57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104ea610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461051481610fc4565b61051c610fce565b73ffffffffffffffffffffffffffffffffffffffff851660009081526003602052604090205460ff1661057b576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bc73ffffffffffffffffffffffffffffffffffffffff86167f00000000000000000000000000000000000000000000000000000000000000008661100d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106369088908a90899089908990600401611939565b600060405180830381600087803b15801561065057600080fd5b505af1158015610664573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d58686866040516106c993929190611996565b60405180910390a3506106dc6001600055565b5050505050565b600082815260016020819052604090912001546106ff81610fc4565b610709838361108e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461075e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610768828261113b565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61079781610fc4565b61079f6111dc565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107cc81610fc4565b61079f61123b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107fe81610fc4565b73ffffffffffffffffffffffffffffffffffffffff821661084b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6108cc81610fc4565b73ffffffffffffffffffffffffffffffffffffffff8216610919576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61097b610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109a581610fc4565b6109ad610fce565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610a0c576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a4d73ffffffffffffffffffffffffffffffffffffffff87167f00000000000000000000000000000000000000000000000000000000000000008761100d565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610ac99089908b908a908a908a908a90600401611a77565b600060405180830381600087803b158015610ae357600080fd5b505af1158015610af7573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b87878787604051610b5e9493929190611ae8565b60405180910390a350610b716001600055565b505050505050565b60008281526001602081905260409091200154610b9581610fc4565b610709838361113b565b610ba7610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610bd181610fc4565b610bd9610fce565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205460ff16610c38576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5973ffffffffffffffffffffffffffffffffffffffff8416858461100d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610cb891815260200190565b60405180910390a3506107686001600055565b610cd3610f81565b610cdb610fce565b60045474010000000000000000000000000000000000000000900460ff16610d2f576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610d8e576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8616906370a0823190602401602060405180830381865afa158015610dfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1f9190611b14565b9050610e4373ffffffffffffffffffffffffffffffffffffffff8616333087611278565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efb9190611b14565b610f059190611b2d565b8787604051610f18959493929190611b67565b60405180910390a250610b716001600055565b6000610f3681610fc4565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610fbd576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61079f81336112be565b60025460ff161561100b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261076891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061134f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661113357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104dc565b5060006104dc565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561113357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104dc565b6111e46113e5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611243610fce565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112113390565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526107099186918216906323b872dd90608401611047565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661134b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b600061137173ffffffffffffffffffffffffffffffffffffffff841683611421565b905080516000141580156113965750808060200190518101906113949190611ba0565b155b15610768576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401611342565b60025460ff1661100b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061142f83836000611436565b9392505050565b606081471015611474576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611342565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161149d9190611bbd565b60006040518083038185875af1925050503d80600081146114da576040519150601f19603f3d011682016040523d82523d6000602084013e6114df565b606091505b50915091506114ef8683836114f9565b9695505050505050565b60608261150e5761150982611588565b61142f565b8151158015611532575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611581576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401611342565b508061142f565b8051156115985780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156115dc57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461142f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461079f57600080fd5b60008083601f84011261164057600080fd5b50813567ffffffffffffffff81111561165857600080fd5b60208301915083602082850101111561167057600080fd5b9250929050565b60008060008060006080868803121561168f57600080fd5b853561169a8161160c565b945060208601356116aa8161160c565b935060408601359250606086013567ffffffffffffffff8111156116cd57600080fd5b6116d98882890161162e565b969995985093965092949392505050565b6000602082840312156116fc57600080fd5b5035919050565b6000806040838503121561171657600080fd5b8235915060208301356117288161160c565b809150509250929050565b60006020828403121561174557600080fd5b813561142f8161160c565b60008060008060008060a0878903121561176957600080fd5b86356117748161160c565b955060208701356117848161160c565b945060408701359350606087013567ffffffffffffffff8111156117a757600080fd5b6117b389828a0161162e565b909450925050608087013567ffffffffffffffff8111156117d357600080fd5b87016060818a0312156117e557600080fd5b809150509295509295509295565b60008060006060848603121561180857600080fd5b83356118138161160c565b925060208401356118238161160c565b929592945050506040919091013590565b6000806000806000806080878903121561184d57600080fd5b863567ffffffffffffffff81111561186457600080fd5b61187089828a0161162e565b90975095505060208701356118848161160c565b935060408701359250606087013567ffffffffffffffff8111156118a757600080fd5b6118b389828a0161162e565b979a9699509497509295939492505050565b801515811461079f57600080fd5b6000602082840312156118e557600080fd5b813561142f816118c5565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061198b6080830184866118f0565b979650505050505050565b8381526040602082015260006119b06040830184866118f0565b95945050505050565b600081356119c68161160c565b73ffffffffffffffffffffffffffffffffffffffff168352602082013567ffffffffffffffff81168082146119fa57600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112611a3657600080fd5b820160208101903567ffffffffffffffff811115611a5357600080fd5b803603821315611a6257600080fd5b606060408601526119b06060860182846118f0565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a060608201526000611ac960a0830185876118f0565b8281036080840152611adb81856119b9565b9998505050505050505050565b848152606060208201526000611b026060830185876118f0565b828103604084015261198b81856119b9565b600060208284031215611b2657600080fd5b5051919050565b818103818111156104dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606081526000611b7b6060830187896118f0565b8560208401528281036040840152611b948185876118f0565b98975050505050505050565b600060208284031215611bb257600080fd5b815161142f816118c5565b6000825160005b81811015611bde5760208186018101518583015201611bc4565b50600092019182525091905056fea264697066735822122029d8a02c5c60bae7d404d08786de2b2dd6b37e11d10fa76c968c7809ff06f3b864736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161178338038061178383398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516114ab6102d86000396000818161021d01528181610531015281816108290152818161099a01528181610aef0152610c110152600081816101d1015281816104a1015281816105040152818161079901526107fc01526114ab6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c578063057e0f25146101a4575b600080fd5b61018f61018a366004610fd3565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b236600461108e565b610462565b005b6101b76101c7366004611126565b6105fc565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d366004611159565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611172565b6106a1565b6101b7610291366004611172565b6106cc565b6101b7610725565b60015460ff1661018f565b6101b76102b736600461119e565b61075a565b6101b76102ca366004611159565b6108ef565b6101b76102dd366004611159565b61095d565b6101b7610a07565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611172565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611172565b610a39565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610aa1565b61049c610aab565b6104c77f00000000000000000000000000000000000000000000000000000000000000008785610aea565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610563907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161130e565b600060405180830381600087803b15801561057d57600080fd5b505af1158015610591573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c878787866040516105e1949392919061137f565b60405180910390a2506105f46001600055565b505050505050565b610604610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062e81610aa1565b610636610aab565b610641848484610aea565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161068991815260200190565b60405180910390a25061069c6001600055565b505050565b6000828152600260205260409020600101546106bc81610aa1565b6106c68383610c72565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461071b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61069c8282610d72565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074f81610aa1565b610757610e31565b50565b610762610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078c81610aa1565b610794610aab565b6107bf7f00000000000000000000000000000000000000000000000000000000000000008684610aea565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610859907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016113b6565b600060405180830381600087803b15801561087357600080fd5b505af1158015610887573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d8686866040516108d593929190611408565b60405180910390a2506108e86001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61091981610aa1565b610921610aab565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610965610aab565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109f357600080fd5b505af11580156108e8573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3181610aa1565b610757610eae565b600082815260026020526040902060010154610a5481610aa1565b6106c68383610d72565b600260005403610a9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107578133610f07565b60015460ff1615610ae8576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7c9190611422565b610b86908461143b565b1115610bbe576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d083390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e39610f97565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610eb6610aab565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e84565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f93576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ae8576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fe557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461101557600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461104057600080fd5b919050565b60008083601f84011261105757600080fd5b50813567ffffffffffffffff81111561106f57600080fd5b60208301915083602082850101111561108757600080fd5b9250929050565b60008060008060008060a087890312156110a757600080fd5b6110b08761101c565b955060208701359450604087013567ffffffffffffffff8111156110d357600080fd5b6110df89828a01611045565b90955093505060608701359150608087013567ffffffffffffffff81111561110657600080fd5b87016060818a03121561111857600080fd5b809150509295509295509295565b60008060006060848603121561113b57600080fd5b6111448461101c565b95602085013595506040909401359392505050565b60006020828403121561116b57600080fd5b5035919050565b6000806040838503121561118557600080fd5b823591506111956020840161101c565b90509250929050565b6000806000806000608086880312156111b657600080fd5b6111bf8661101c565b945060208601359350604086013567ffffffffffffffff8111156111e257600080fd5b6111ee88828901611045565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff6112678261101c565b1682526000602082013567ffffffffffffffff811680821461128857600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126112c457600080fd5b820160208101903567ffffffffffffffff8111156112e157600080fd5b8036038213156112f057600080fd5b60606040860152611305606086018284611200565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061136060a083018587611200565b82810360808401526113728185611249565b9998505050505050505050565b848152606060208201526000611399606083018587611200565b82810360408401526113ab8185611249565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ab608083018486611200565b838152604060208201526000611305604083018486611200565b60006020828403121561143457600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212208052a0b07c987cb20e29d9c7c23109b8ff8b4b966ca2e18c207a88e5b4d79d4264736f6c634300081a00336080604052348015600f57600080fd5b506001600055610ec3806100246000396000f3fe60806040526004361061006e5760003560e01c80636ed701691161004b5780636ed70169146100e0578063c5131691146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063660b9de014610097578063676cc054146100b757005b3661007557005b005b34801561008357600080fd5b50610075610092366004610724565b610148565b3480156100a357600080fd5b506100756100b2366004610760565b6101de565b6100ca6100c536600461079b565b61021a565b6040516100d79190610896565b60405180910390f35b3480156100ec57600080fd5b5061007561024d565b34801561010157600080fd5b50610075610110366004610724565b610282565b6100756101233660046109ce565b61035d565b34801561013457600080fd5b50610075610143366004610aba565b6103a1565b6101506103d6565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610419565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b7f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e338260405161020f929190610bed565b60405180910390a150565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a19392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61028a6103d6565b6000610297600285610ccc565b9050806000036102d3576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102f573ffffffffffffffffffffffffffffffffffffffff8416338484610419565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610394959493929190610d07565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103949493929190610d91565b600260005403610412576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104ae9085906104b4565b50505050565b60006104d673ffffffffffffffffffffffffffffffffffffffff84168361054f565b905080516000141580156104fb5750808060200190518101906104f99190610e54565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061055d83836000610564565b9392505050565b6060814710156105a2576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610546565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105cb9190610e71565b60006040518083038185875af1925050503d8060008114610608576040519150601f19603f3d011682016040523d82523d6000602084013e61060d565b606091505b509150915061061d868383610627565b9695505050505050565b60608261063c57610637826106b6565b61055d565b8151158015610660575073ffffffffffffffffffffffffffffffffffffffff84163b155b156106af576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610546565b508061055d565b8051156106c65780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461071f57600080fd5b919050565b60008060006060848603121561073957600080fd5b83359250610749602085016106fb565b9150610757604085016106fb565b90509250925092565b60006020828403121561077257600080fd5b813567ffffffffffffffff81111561078957600080fd5b82016060818503121561055d57600080fd5b600080600083850360408112156107b157600080fd5b60208112156107bf57600080fd5b50839250602084013567ffffffffffffffff8111156107dd57600080fd5b8401601f810186136107ee57600080fd5b803567ffffffffffffffff81111561080557600080fd5b86602082840101111561081757600080fd5b939660209190910195509293505050565b60005b8381101561084357818101518382015260200161082b565b50506000910152565b60008151808452610864816020860160208601610828565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061055d602083018461084c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561091f5761091f6108a9565b604052919050565b600082601f83011261093857600080fd5b813567ffffffffffffffff811115610952576109526108a9565b61098360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108d8565b81815284602083860101111561099857600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106f857600080fd5b803561071f816109b5565b6000806000606084860312156109e357600080fd5b833567ffffffffffffffff8111156109fa57600080fd5b610a0686828701610927565b935050602084013591506040840135610a1e816109b5565b809150509250925092565b600067ffffffffffffffff821115610a4357610a436108a9565b5060051b60200190565b600082601f830112610a5e57600080fd5b8135610a71610a6c82610a29565b6108d8565b8082825260208201915060208360051b860101925085831115610a9357600080fd5b602085015b83811015610ab0578035835260209283019201610a98565b5095945050505050565b600080600060608486031215610acf57600080fd5b833567ffffffffffffffff811115610ae657600080fd5b8401601f81018613610af757600080fd5b8035610b05610a6c82610a29565b8082825260208201915060208360051b850101925088831115610b2757600080fd5b602084015b83811015610b6957803567ffffffffffffffff811115610b4b57600080fd5b610b5a8b602083890101610927565b84525060209283019201610b2c565b509550505050602084013567ffffffffffffffff811115610b8957600080fd5b610b9586828701610a4d565b925050610757604085016109c3565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2b836106fb565b1660408201526000602083013567ffffffffffffffff8116808214610c4f57600080fd5b6060840152506040830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610c8b57600080fd5b830160208101903567ffffffffffffffff811115610ca857600080fd5b803603821315610cb757600080fd5b6060608085015261061d60a085018284610ba4565b600082610d02577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d3c60a083018661084c565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610d87578151865260209586019590910190600101610d69565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e0f85835161084c565b94506020938401939190910190600101610dd5565b505050508281036040840152610e3a8186610d55565b915050610e4b606083018415159052565b95945050505050565b600060208284031215610e6657600080fd5b815161055d816109b5565b60008251610e83818460208701610828565b919091019291505056fea2646970667358221220d537f023478b5746f5f67760e722db6f4a51db89700ac69d6ba33759b8ac342f64736f6c634300081a0033a2646970667358221220498549e31359700e6b328242fc8e7048e77ddf0ce509262d150dddf93118ad6264736f6c634300081a0033", + 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\":\"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\":\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061c8f98061003c6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806385226c811161008c578063b5508aa911610066578063b5508aa91461018b578063ba414fa614610193578063e20c9f71146101ab578063fa7626d4146101b357600080fd5b806385226c8114610159578063916a17c61461016e578063b0464fdc1461018357600080fd5b80633e5e3c23116100c85780633e5e3c231461012c5780633f7286f41461013457806366d9a9a01461013c5780637a380ebf1461015157600080fd5b80630a9254e4146100ef5780631ed7831c146100f95780632ade388014610117575b600080fd5b6100f76101c0565b005b610101610a85565b60405161010e9190616216565b60405180910390f35b61011f610ae7565b60405161010e91906162b2565b610101610c29565b610101610c89565b610144610ce9565b60405161010e9190616418565b6100f7610e6b565b61016161152d565b60405161010e91906164b6565b6101766115fd565b60405161010e919061652d565b6101766116f8565b6101616117f3565b61019b6118c3565b604051901515815260200161010e565b610101611997565b601f5461019b9060ff1681565b602680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556027805482166112341790556028805490911661567817905560405161021290616129565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610297573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516102dc90616129565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610360573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526028546026549251908516602482015260448101939093529216606482015261044f919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526119f7565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556028546026546040519293918216929116906104db90616136565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610517573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602554602854602654604051938516949283169391831692169061057290616143565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f0801580156105b6573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516105fb90616150565b604051809103906000f080158015610617573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106c357600080fd5b505af11580156106d7573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074d57600080fd5b505af1158015610761573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107c757600080fd5b505af11580156107db573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561084157600080fd5b505af1158015610855573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108b757600080fd5b505af11580156108cb573d6000803e3d6000fd5b5050602480546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b15801561093c57600080fd5b505af1158015610950573d6000803e3d6000fd5b5050602480546022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a1209381019390935216925063a9059cbb91506044016020604051808303816000875af11580156109c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ea91906165c4565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a6b57600080fd5b505af1158015610a7f573d6000803e3d6000fd5b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610add57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610abf575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610c2057600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610c09578382906000526020600020018054610b7c906165e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba8906165e6565b8015610bf55780601f10610bca57610100808354040283529160200191610bf5565b820191906000526020600020905b815481529060010190602001808311610bd857829003601f168201915b505050505081526020019060010190610b5d565b505050508152505081526020019060010190610b0b565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610c205783829060005260206000209060020201604051806040016040529081600082018054610d40906165e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6c906165e6565b8015610db95780601f10610d8e57610100808354040283529160200191610db9565b820191906000526020600020905b815481529060010190602001808311610d9c57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610e5357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610e005790505b50505050508152505081526020019060010190610d0d565b60208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516000936001600160a01b039093169263dda79b7592600480820193918290030181865afa158015610ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef19190616633565b60208054604080517f5b11259100000000000000000000000000000000000000000000000000000000815290519394506000936001600160a01b0390921692635b112591926004808401938290030181865afa158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f799190616633565b604080518082018252600f81527f48656c6c6f2c20466f756e647279210000000000000000000000000000000000602080830191909152601f5483518085018552601981527f4761746577617945564d55706772616465546573742e736f6c00000000000000818401528451928301909452600082526026549495509193602a93600193670de0b6b3a764000093611023936001600160a01b036101009093048316939216611a16565b600084848460405160240161103a9392919061665c565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052601f5460215491517ff30c7ba30000000000000000000000000000000000000000000000000000000081529293506001600160a01b03610100909104811692737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926111009291169087908790600401616686565b600060405180830381600087803b15801561111a57600080fd5b505af115801561112e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061121d92506001600160a01b039091169086908a908a908a906166ae565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156112b357600080fd5b505af11580156112c7573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546915061130c90869086906166ef565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561138657600080fd5b505af115801561139a573d6000803e3d6000fd5b50506021546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169450631cff79cd935087926113ec929116908790600401616708565b60006040518083038185885af115801561140a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526114339190810190616812565b5060208054604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516114c0938c936001600160a01b03169263dda79b7592600480830193928290030181865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190616633565b611a32565b60208054604080517f5b1125910000000000000000000000000000000000000000000000000000000081529051611523938b936001600160a01b031692635b11259192600480830193928290030181865afa158015611497573d6000803e3d6000fd5b5050505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611570906165e6565b80601f016020809104026020016040519081016040528092919081815260200182805461159c906165e6565b80156115e95780601f106115be576101008083540402835291602001916115e9565b820191906000526020600020905b8154815290600101906020018083116115cc57829003601f168201915b505050505081526020019060010190611551565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156116e057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161168d5790505b50505050508152505081526020019060010190611621565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610c205760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156117db57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116117885790505b5050505050815250508152602001906001019061171c565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610c20578382906000526020600020018054611836906165e6565b80601f0160208091040260200160405190810160405280929190818152602001828054611862906165e6565b80156118af5780601f10611884576101008083540402835291602001916118af565b820191906000526020600020905b81548152906001019060200180831161189257829003601f168201915b505050505081526020019060010190611817565b60085460009060ff16156118db575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa15801561196c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119909190616847565b1415905090565b60606015805480602002602001604051908101604052809291908181526020018280548015610add576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610abf575050505050905090565b6000611a0161615d565b611a0c848483611ac2565b9150505b92915050565b611a1e61615d565b611a2b8585858486611b3d565b5050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f69060440160006040518083038186803b158015611aa657600080fd5b505afa158015611aba573d6000803e3d6000fd5b505050505050565b600080611acf8584611c3e565b9050611b326040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001611b1d929190616708565b60405160208183030381529060405285611c4a565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015611baf57600080fd5b505af1925050508015611bc0575060015b611bd557611bd087878787611c78565b611c35565b611be187878787611c78565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c1c57600080fd5b505af1158015611c30573d6000803e3d6000fd5b505050505b50505050505050565b6000611b368383611c91565b60c08101515160009015611c6e57611c6784848460c00151611cac565b9050611b36565b611c678484611e52565b6000611c848483611f3d565b9050611a2b858285611f49565b6000611c9d8383612313565b611b3683836020015184611c4a565b600080611cb7612323565b90506000611cc586836123f6565b90506000611cdc826060015183602001518561289c565b90506000611cec83838989612aae565b90506000611cf98261392b565b602081015181519192509060030b15611d6c57898260400151604051602001611d23929190616860565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252611d63916004016168e1565b60405180910390fd5b6000611daf6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001613afa565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90611e029084906004016168e1565b602060405180830381865afa158015611e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e439190616633565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590611ea79087906004016168e1565b600060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611eec9190810190616812565b90506000611f1a8285604051602001611f069291906168f4565b604051602081830303815290604052613cfa565b90506001600160a01b038116611a0c578484604051602001611d23929190616923565b6000611c9d8383613d0d565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa158015611fe5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120099190616847565b9050806121b057600061201b86613d19565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506120a6905b60408051808201825260008082526020918201528151808301909252845182528085019082015290613e11565b806120b2575060008451115b15612135576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906120fe9088908890600401616708565b600060405180830381600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505050506121aa565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561219157600080fd5b505af11580156121a5573d6000803e3d6000fd5b505050505b50611a2b565b8060006121bc82613d19565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061221e90612079565b8061222a575060008551115b156122af576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90612278908a908a908a906004016169ce565b600060405180830381600087803b15801561229257600080fd5b505af11580156122a6573d6000803e3d6000fd5b50505050611c35565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b158015611c1c57600080fd5b61231f82826000613e25565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906123aa9084906004016169ff565b600060405180830381865afa1580156123c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123ef9190810190616a46565b9250505090565b6124286040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506124736040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61247c85613f28565b6020820152600061248c8661430d565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156124ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f69190810190616a46565b868385602001516040516020016125109493929190616a8f565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906125689085906004016168e1565b600060405180830381865afa158015612585573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125ad9190810190616a46565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906125f5908490600401616b93565b602060405180830381865afa158015612612573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263691906165c4565b61264b5781604051602001611d239190616be5565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890612690908490600401616c77565b600060405180830381865afa1580156126ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126d59190810190616a46565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061271c908490600401616cc9565b602060405180830381865afa158015612739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275d91906165c4565b156127f2576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906127a7908490600401616cc9565b600060405180830381865afa1580156127c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127ec9190810190616a46565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016128179190616d1b565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612843929190616d87565b600060405180830381865afa158015612860573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128889190810190616a46565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816128b85790505090506040518060400160405280600481526020017f67726570000000000000000000000000000000000000000000000000000000008152508160008151811061291857612918616dac565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061296c5761296c616dac565b6020026020010181905250846040516020016129889190616ddb565b604051602081830303815290604052816002815181106129aa576129aa616dac565b6020026020010181905250826040516020016129c69190616e47565b604051602081830303815290604052816003815181106129e8576129e8616dac565b602002602001018190525060006129fe8261392b565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250612a8f9060408051808201825260008082526020918201528151808301909252845182528085019082015290614590565b612aa45785604051602001611d239190616e88565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015612afe565b511590565b612c7257826020015115612bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401611d63565b8260c0015115612c72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401611d63565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081612c8b57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280612ce690616f48565b935060ff1681518110612cfb57612cfb616dac565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001612d4c9190616f67565b604051602081830303815290604052828280612d6790616f48565b935060ff1681518110612d7c57612d7c616dac565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280612dc990616f48565b935060ff1681518110612dde57612dde616dac565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280612e2b90616f48565b935060ff1681518110612e4057612e40616dac565b60200260200101819052508760200151828280612e5c90616f48565b935060ff1681518110612e7157612e71616dac565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280612ebe90616f48565b935060ff1681518110612ed357612ed3616dac565b602090810291909101015287518282612eeb81616f48565b935060ff1681518110612f0057612f00616dac565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280612f4d90616f48565b935060ff1681518110612f6257612f62616dac565b6020026020010181905250612f76466145f1565b8282612f8181616f48565b935060ff1681518110612f9657612f96616dac565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280612fe390616f48565b935060ff1681518110612ff857612ff8616dac565b60200260200101819052508682828061301090616f48565b935060ff168151811061302557613025616dac565b602090810291909101015285511561314c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261307681616f48565b935060ff168151811061308b5761308b616dac565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906130db9089906004016168e1565b600060405180830381865afa1580156130f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131209190810190616a46565b828261312b81616f48565b935060ff168151811061314057613140616dac565b60200260200101819052505b84602001511561321c5760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261319581616f48565b935060ff16815181106131aa576131aa616dac565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806131f790616f48565b935060ff168151811061320c5761320c616dac565b60200260200101819052506133e3565b613254612af98660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6132e75760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261329781616f48565b935060ff16815181106132ac576132ac616dac565b60200260200101819052508460a001516040516020016132cc9190616ddb565b6040516020818303038152906040528282806131f790616f48565b8460c0015115801561332a57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261332890511590565b155b156133e35760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261336e81616f48565b935060ff168151811061338357613383616dac565b602002602001018190525061339788614691565b6040516020016133a79190616ddb565b6040516020818303038152906040528282806133c290616f48565b935060ff16815181106133d7576133d7616dac565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261341790511590565b6134ac5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261345a81616f48565b935060ff168151811061346f5761346f616dac565b6020026020010181905250846040015182828061348b90616f48565b935060ff16815181106134a0576134a0616dac565b60200260200101819052505b6060850151156135cd5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826134f581616f48565b935060ff168151811061350a5761350a616dac565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015613579573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526135a19190810190616a46565b82826135ac81616f48565b935060ff16815181106135c1576135c1616dac565b60200260200101819052505b60e085015151156136745760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261361781616f48565b935060ff168151811061362c5761362c616dac565b60200260200101819052506136488560e00151600001516145f1565b828261365381616f48565b935060ff168151811061366857613668616dac565b60200260200101819052505b60e0850151602001511561371e5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826136c181616f48565b935060ff16815181106136d6576136d6616dac565b60200260200101819052506136f28560e00151602001516145f1565b82826136fd81616f48565b935060ff168151811061371257613712616dac565b60200260200101819052505b60e085015160400151156137c85760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261376b81616f48565b935060ff168151811061378057613780616dac565b602002602001018190525061379c8560e00151604001516145f1565b82826137a781616f48565b935060ff16815181106137bc576137bc616dac565b60200260200101819052505b60e085015160600151156138725760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261381581616f48565b935060ff168151811061382a5761382a616dac565b60200260200101819052506138468560e00151606001516145f1565b828261385181616f48565b935060ff168151811061386657613866616dac565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156138905761389061672a565b6040519080825280602002602001820160405280156138c357816020015b60608152602001906001900390816138ae5790505b50905060005b8260ff168160ff16101561391c57838160ff16815181106138ec576138ec616dac565b6020026020010151828260ff168151811061390957613909616dac565b60209081029190910101526001016138c9565b5093505050505b949350505050565b6139526040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916139d891869101616fd2565b600060405180830381865afa1580156139f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a1d9190810190616a46565b90506000613a2b8683615180565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401613a5b91906164b6565b6000604051808303816000875af1158015613a7a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613aa29190810190617019565b805190915060030b15801590613abb5750602081015151155b8015613aca5750604081015151155b15612aa45781600081518110613ae257613ae2616dac565b6020026020010151604051602001611d2391906170cf565b60606000613b2f8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150613b669082905b906152d5565b15613cc3576000613be382613bdd84613bd7613ba98a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906152fc565b9061535e565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613c479082906152d5565b15613cb157604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613cae905b82906153e3565b90505b613cba81615409565b92505050611b36565b8215613cdc578484604051602001611d239291906172bb565b5050604080516020810190915260008152611b36565b509392505050565b6000808251602084016000f09392505050565b61231f82826001613e25565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691613d8e9190617362565b600060405180830381855afa9150503d8060008114613dc9576040519150601f19603f3d011682016040523d82523d6000602084013e613dce565b606091505b5091509150818015613de1575060208151115b15613dfa57808060200190518101906139239190616a46565b505060408051602081019091526000815292915050565b6000613e1d8383615472565b159392505050565b8160a0015115613e3457505050565b6000613e4184848461554d565b90506000613e4e8261392b565b602081015181519192509060030b158015613eea5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613eea90604080518082018252600080825260209182015281518083019092528451825280850190820152613b60565b15613ef757505050505050565b60408201515115613f17578160400151604051602001611d23919061737e565b80604051602001611d2391906173dc565b60606000613f5d8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150613fc2905b8290614590565b1561403157604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b369061402c908390615ae8565b615409565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614093905b8290615b72565b60010361416057604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526140f990613ca7565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b369061402c905b83906153e3565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526141bf90613fbb565b156142f657604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614227908390615c0c565b90506000816001835161423a9190617447565b8151811061424a5761424a616dac565b602002602001015190506142ed61402c6142c06040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290615ae8565b95945050505050565b82604051602001611d23919061745a565b50919050565b606060006143428360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506143a490613fbb565b156143b257611b3681615409565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526144119061408c565b60010361447b57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152611b369061402c90614159565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526144da90613fbb565b156142f657604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290614542908390615c0c565b905060018151111561457e57806002825161455d9190617447565b8151811061456d5761456d616dac565b602002602001015192505050919050565b5082604051602001611d23919061745a565b8051825160009111156145a557506000611a10565b815183516020850151600092916145bb91617538565b6145c59190617447565b9050826020015181036145dc576001915050611a10565b82516020840151819020912014905092915050565b606060006145fe83615cb1565b600101905060008167ffffffffffffffff81111561461e5761461e61672a565b6040519080825280601f01601f191660200182016040528015614648576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461465257509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161471d905b8290613e11565b1561475d57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526147bc90614716565b156147fc57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261485b90614716565b1561489b57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526148fa90614716565b8061495f5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261495f90614716565b1561499f57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526149fe90614716565b80614a635750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614a6390614716565b15614aa357505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b0290614716565b80614b675750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614b6790614716565b15614ba757505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614c0690614716565b80614c6b5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614c6b90614716565b15614cab57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614d0a90614716565b15614d4a57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614da990614716565b15614de957505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614e4890614716565b15614e8857505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614ee790614716565b15614f2757505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f8690614716565b15614fc657505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261502590614716565b8061508a5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261508a90614716565b156150ca57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261512990614716565b1561516957505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151611d23929060200161754b565b60608060005b845181101561520b57818582815181106151a2576151a2616dac565b60200260200101516040516020016151bb9291906168f4565b6040516020818303038152906040529150600185516151da9190617447565b811461520357816040516020016151f191906176b4565b60405160208183030381529060405291505b600101615186565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081615224579050509050838160008151811061524f5761524f616dac565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106152a3576152a3616dac565b602002602001018190525081816002815181106152c2576152c2616dac565b6020908102919091010152949350505050565b60208083015183518351928401516000936152f39291849190615d93565b14159392505050565b6040805180820190915260008082526020820152600061532e8460000151856020015185600001518660200151615ea4565b90508360200151816153409190617447565b8451859061534f908390617447565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015615383575081611a10565b60208083015190840151600191146153aa5750815160208481015190840151829020919020145b80156153db578251845185906153c1908390617447565b90525082516020850180516153d7908390617538565b9052505b509192915050565b6040805180820190915260008082526020820152615402838383615fc4565b5092915050565b60606000826000015167ffffffffffffffff81111561542a5761542a61672a565b6040519080825280601f01601f191660200182016040528015615454576020820181803683370190505b5090506000602082019050615402818560200151866000015161606f565b8151815160009190811115615485575081515b6020808501519084015160005b8381101561553e578251825180821461550e5760001960208710156154ed576001846154bf896020617447565b6154c99190617538565b6154d49060086176f5565b6154df9060026177f3565b6154e99190617447565b1990505b818116838216818103911461550b579750611a109650505050505050565b50505b615519602086617538565b9450615526602085617538565b935050506020816155379190617538565b9050615492565b5084518651612aa491906177ff565b60606000615559612323565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161557657905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806155d190616f48565b935060ff16815181106155e6576155e6616dac565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001615637919061781f565b60405160208183030381529060405282828061565290616f48565b935060ff168151811061566757615667616dac565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806156b490616f48565b935060ff16815181106156c9576156c9616dac565b6020026020010181905250826040516020016156e59190616e47565b60405160208183030381529060405282828061570090616f48565b935060ff168151811061571557615715616dac565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061576290616f48565b935060ff168151811061577757615777616dac565b602002602001018190525061578c87846160e9565b828261579781616f48565b935060ff16815181106157ac576157ac616dac565b6020908102919091010152855151156158585760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826157fe81616f48565b935060ff168151811061581357615813616dac565b602002602001018190525061582c8660000151846160e9565b828261583781616f48565b935060ff168151811061584c5761584c616dac565b60200260200101819052505b8560800151156158c65760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826158a181616f48565b935060ff16815181106158b6576158b6616dac565b602002602001018190525061592c565b841561592c5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261590b81616f48565b935060ff168151811061592057615920616dac565b60200260200101819052505b604086015151156159c85760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261597681616f48565b935060ff168151811061598b5761598b616dac565b602002602001018190525085604001518282806159a790616f48565b935060ff16815181106159bc576159bc616dac565b60200260200101819052505b856060015115615a325760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282615a1181616f48565b935060ff1681518110615a2657615a26616dac565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615a5057615a5061672a565b604051908082528060200260200182016040528015615a8357816020015b6060815260200190600190039081615a6e5790505b50905060005b8260ff168160ff161015615adc57838160ff1681518110615aac57615aac616dac565b6020026020010151828260ff1681518110615ac957615ac9616dac565b6020908102919091010152600101615a89565b50979650505050505050565b6040805180820190915260008082526020820152815183511015615b0d575081611a10565b81518351602085015160009291615b2391617538565b615b2d9190617447565b60208401519091506001908214615b4e575082516020840151819020908220145b8015615b6957835185518690615b65908390617447565b9052505b50929392505050565b6000808260000151615b968560000151866020015186600001518760200151615ea4565b615ba09190617538565b90505b83516020850151615bb49190617538565b81116154025781615bc481617864565b9250508260000151615bfb856020015183615bdf9190617447565b8651615beb9190617447565b8386600001518760200151615ea4565b615c059190617538565b9050615ba3565b60606000615c1a8484615b72565b615c25906001617538565b67ffffffffffffffff811115615c3d57615c3d61672a565b604051908082528060200260200182016040528015615c7057816020015b6060815260200190600190039081615c5b5790505b50905060005b8151811015613cf257615c8c61402c86866153e3565b828281518110615c9e57615c9e616dac565b6020908102919091010152600101615c76565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310615cfa577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310615d26576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310615d4457662386f26fc10000830492506010015b6305f5e1008310615d5c576305f5e100830492506008015b6127108310615d7057612710830492506004015b60648310615d82576064830492506002015b600a8310611a105760010192915050565b600080858411615e9a5760208411615e465760008415615dde576001615dba866020617447565b615dc59060086176f5565b615dd09060026177f3565b615dda9190617447565b1990505b8351811685615ded8989617538565b615df79190617447565b805190935082165b818114615e3157878411615e195787945050505050613923565b83615e238161787e565b945050828451169050615dff565b615e3b8785617538565b945050505050613923565b838320615e538588617447565b615e5d9087617538565b91505b858210615e9857848220808203615e8557615e7b8684617538565b9350505050613923565b615e90600184617447565b925050615e60565b505b5092949350505050565b60008381868511615faf5760208511615f5e5760008515615ef0576001615ecc876020617447565b615ed79060086176f5565b615ee29060026177f3565b615eec9190617447565b1990505b84518116600087615f018b8b617538565b615f0b9190617447565b855190915083165b828114615f5057818610615f3857615f2b8b8b617538565b9650505050505050613923565b85615f4281617864565b965050838651169050615f13565b859650505050505050613923565b508383206000905b615f708689617447565b8211615fad57858320808203615f8c5783945050505050613923565b615f97600185617538565b9350508180615fa590617864565b925050615f66565b505b615fb98787617538565b979650505050505050565b60408051808201909152600080825260208201526000615ff68560000151866020015186600001518760200151615ea4565b6020808701805191860191909152519091506160129082617447565b8352845160208601516160259190617538565b81036160345760008552616066565b835183516160429190617538565b85518690616051908390617447565b90525083516160609082617538565b60208601525b50909392505050565b602081106160a75781518352616086602084617538565b9250616093602083617538565b91506160a0602082617447565b905061606f565b60001981156160d65760016160bd836020617447565b6160c9906101006177f3565b6160d39190617447565b90505b9151835183169219169190911790915250565b606060006160f784846123f6565b805160208083015160405193945061611193909101617895565b60405160208183030381529060405291505092915050565b610c9f806178ee83390190565b611c7f8061858d83390190565b6117aa8061a20c83390190565b610f0e8061b9b683390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016161a06161a5565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016161a06040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156162575783516001600160a01b0316835260209384019390920191600101616230565b509095945050505050565b60005b8381101561627d578181015183820152602001616265565b50506000910152565b6000815180845261629e816020860160208601616262565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163ae577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015616394577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261637e848651616286565b6020958601959094509290920191600101616344565b5091975050506020948501949290920191506001016162da565b50929695505050505050565b600081518084526020840193506020830160005b8281101561640e5781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016163ce565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163ae577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526164846040880182616286565b905060208201519150868103602088015261649f81836163ba565b965050506020938401939190910190600101616440565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163ae577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452616518858351616286565b945060209384019391909101906001016164de565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156163ae577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526165ae60408701826163ba565b9550506020938401939190910190600101616555565b6000602082840312156165d657600080fd5b81518015158114611b3657600080fd5b600181811c908216806165fa57607f821691505b602082108103614307577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561664557600080fd5b81516001600160a01b0381168114611b3657600080fd5b60608152600061666f6060830186616286565b602083019490945250901515604090910152919050565b6001600160a01b03841681528260208201526060604082015260006142ed6060830184616286565b6001600160a01b038616815284602082015260a0604082015260006166d660a0830186616286565b6060830194909452509015156080909101529392505050565b8281526040602082015260006139236040830184616286565b6001600160a01b03831681526040602082015260006139236040830184616286565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561677c5761677c61672a565b60405290565b60008067ffffffffffffffff84111561679d5761679d61672a565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156167cc576167cc61672a565b6040528381529050808284018510156167e457600080fd5b613cf2846020830185616262565b600082601f83011261680357600080fd5b611b3683835160208501616782565b60006020828403121561682457600080fd5b815167ffffffffffffffff81111561683b57600080fd5b611a0c848285016167f2565b60006020828403121561685957600080fd5b5051919050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161689881601a850160208801616262565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516168d581601c840160208801616262565b01601c01949350505050565b602081526000611b366020830184616286565b60008351616906818460208801616262565b83519083019061691a818360208801616262565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161695b81601a850160208801616262565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351616998816033840160208801616262565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006142ed6060830184616286565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000611b366080830184616286565b600060208284031215616a5857600080fd5b815167ffffffffffffffff811115616a6f57600080fd5b8201601f81018413616a8057600080fd5b611a0c84825160208401616782565b60008551616aa1818460208a01616262565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551616adb816001840160208a01616262565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451616b19816002840160208901616262565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351616b5b816002840160208801616262565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000616ba66040830184616286565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251616c1d81601f850160208701616262565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000616c8a6040830184616286565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000616cdc6040830184616286565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251616d53816014850160208701616262565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000616d9a6040830185616286565b8281036020840152611b328185616286565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251616e13816001850160208701616262565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251616e59818460208701616262565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251616f0c81604b850160208701616262565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff8103616f5e57616f5e616f19565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251616fc5816029850160208701616262565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000611b366080830184616286565b60006020828403121561702b57600080fd5b815167ffffffffffffffff81111561704257600080fd5b82016060818503121561705457600080fd5b61705c616759565b81518060030b811461706d57600080fd5b8152602082015167ffffffffffffffff81111561708957600080fd5b617095868285016167f2565b602083015250604082015167ffffffffffffffff8111156170b557600080fd5b6170c1868285016167f2565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161712d816021850160208701616262565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351617319816021850160208801616262565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161735681602e840160208801616262565b01602e01949350505050565b60008251617374818460208701616262565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251616fc5816029850160208701616262565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161743a816022850160208701616262565b9190910160220192915050565b81810381811115611a1057611a10616f19565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161749281600e850160208701616262565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115611a1057611a10616f19565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351617583816018850160208801616262565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516175c081601c840160208801616262565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516176c6818460208701616262565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417611a1057611a10616f19565b6001815b60018411156177475780850481111561772b5761772b616f19565b600184161561773957908102905b60019390931c928002617710565b935093915050565b60008261775e57506001611a10565b8161776b57506000611a10565b8160018114617781576002811461778b576177a7565b6001915050611a10565b60ff84111561779c5761779c616f19565b50506001821b611a10565b5060208310610133831016604e8410600b84101617156177ca575081810a611a10565b6177d7600019848461770c565b80600019048211156177eb576177eb616f19565b029392505050565b6000611b36838361774f565b818103600083128015838313168383128216171561540257615402616f19565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161785781601c850160208701616262565b91909101601c0192915050565b6000600019820361787757617877616f19565b5060010190565b60008161788d5761788d616f19565b506000190190565b600083516178a7818460208801616262565b7f3a0000000000000000000000000000000000000000000000000000000000000090830190815283516178e1816001840160208801616262565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a003360a060405234801561001057600080fd5b50604051611c7f380380611c7f83398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611c5f8339815191528261014c565b50610143600080516020611c5f8339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b6080516119e8610277600039600081816101ca01528181610556015281816105ab015281816107c8015261081d01526119e86000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638456cb59116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103d5578063e63ab1e9146103e8578063eab103df1461040f57600080fd5b8063d547741f1461038c578063d936547e1461039f578063d9caed12146103c257600080fd5b80639a590427116100bd5780639a5904271461035e5780639b19251a14610371578063a217fddf1461038457600080fd5b80638456cb59146102f657806385f438c1146102fe57806391d148541461032557600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102c55780635c975abb146102d85780635eb72e15146102e357600080fd5b806336568abe146102835780633f4ba83a14610296578063570618e11461029e57600080fd5b8063248a9ca311610176578063248a9ca314610219578063252f07bf1461024b5780632f2ff15d1461027057600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610204575b600080fd5b6101b06101ab3660046113c2565b610422565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bc565b610217610212366004611462565b6104bb565b005b61023d6102273660046114d5565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61021761027e3660046114ee565b61067b565b6102176102913660046114ee565b6106a7565b6102176106f8565b61023d7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec906001600160a01b031681565b60025460ff166101b0565b6102176102f136600461151e565b61072d565b6102176108f2565b61023d7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b06103333660046114ee565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61021761036c3660046115c1565b610924565b61021761037f3660046115c1565b6109d8565b61023d600081565b61021761039a3660046114ee565b610a8f565b6101b06103ad3660046115c1565b60036020526000908152604090205460ff1681565b6102176103d03660046115de565b610ab5565b6102176103e336600461161f565b610bad565b61023d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61021761041d3660046116be565b610dd9565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104b557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104c3610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104ed81610e72565b6104f5610e7c565b6001600160a01b03851660009081526003602052604090205460ff16610547576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61057b6001600160a01b0386167f000000000000000000000000000000000000000000000000000000000000000086610ebb565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906105e89088908a90899089908990600401611724565b600060405180830381600087803b15801561060257600080fd5b505af1158015610616573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161066193929190611767565b60405180910390a3506106746001600055565b5050505050565b6000828152600160208190526040909120015461069781610e72565b6106a18383610f2f565b50505050565b6001600160a01b03811633146106e9576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106f38282610fc2565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61072281610e72565b61072a611049565b50565b610735610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461075f81610e72565b610767610e7c565b6001600160a01b03861660009081526003602052604090205460ff166107b9576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107ed6001600160a01b0387167f000000000000000000000000000000000000000000000000000000000000000087610ebb565b6040517f36c99f3b0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b9061085c9089908b908a908a908a908a90600401611857565b600060405180830381600087803b15801561087657600080fd5b505af115801561088a573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37878787876040516108d794939291906118ae565b60405180910390a3506108ea6001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61091c81610e72565b61072a61109b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61094e81610e72565b6001600160a01b03821661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a0281610e72565b6001600160a01b038216610a42576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610aab81610e72565b6106a18383610fc2565b610abd610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ae781610e72565b610aef610e7c565b6001600160a01b03831660009081526003602052604090205460ff16610b41576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b556001600160a01b0384168584610ebb565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610b9a91815260200190565b60405180910390a3506106f36001600055565b610bb5610e2f565b610bbd610e7c565b60045474010000000000000000000000000000000000000000900460ff16610c11576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610c63576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce791906118da565b9050610cfe6001600160a01b0386163330876110d8565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610d85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da991906118da565b610db391906118f3565b8787604051610dc695949392919061192d565b60405180910390a2506108ea6001600055565b6000610de481610e72565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610e6b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61072a8133611111565b60025460ff1615610eb9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b038381166024830152604482018390526106f391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611188565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16610fba5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104b5565b5060006104b5565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1615610fba5760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104b5565b611051611204565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6110a3610e7c565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861107e3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106a19186918216906323b872dd90608401610ee8565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611184576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b600061119d6001600160a01b03841683611240565b905080516000141580156111c25750808060200190518101906111c09190611966565b155b156106f3576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161117b565b60025460ff16610eb9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061124e83836000611255565b9392505050565b606081471015611293576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161117b565b600080856001600160a01b031684866040516112af9190611983565b60006040518083038185875af1925050503d80600081146112ec576040519150601f19603f3d011682016040523d82523d6000602084013e6112f1565b606091505b509150915061130186838361130b565b9695505050505050565b6060826113205761131b82611380565b61124e565b815115801561133757506001600160a01b0384163b155b15611379576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161117b565b508061124e565b8051156113905780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156113d457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461124e57600080fd5b6001600160a01b038116811461072a57600080fd5b60008083601f84011261142b57600080fd5b50813567ffffffffffffffff81111561144357600080fd5b60208301915083602082850101111561145b57600080fd5b9250929050565b60008060008060006080868803121561147a57600080fd5b853561148581611404565b9450602086013561149581611404565b935060408601359250606086013567ffffffffffffffff8111156114b857600080fd5b6114c488828901611419565b969995985093965092949392505050565b6000602082840312156114e757600080fd5b5035919050565b6000806040838503121561150157600080fd5b82359150602083013561151381611404565b809150509250929050565b60008060008060008060a0878903121561153757600080fd5b863561154281611404565b9550602087013561155281611404565b945060408701359350606087013567ffffffffffffffff81111561157557600080fd5b61158189828a01611419565b909450925050608087013567ffffffffffffffff8111156115a157600080fd5b87016080818a0312156115b357600080fd5b809150509295509295509295565b6000602082840312156115d357600080fd5b813561124e81611404565b6000806000606084860312156115f357600080fd5b83356115fe81611404565b9250602084013561160e81611404565b929592945050506040919091013590565b6000806000806000806080878903121561163857600080fd5b863567ffffffffffffffff81111561164f57600080fd5b61165b89828a01611419565b909750955050602087013561166f81611404565b935060408701359250606087013567ffffffffffffffff81111561169257600080fd5b61169e89828a01611419565b979a9699509497509295939492505050565b801515811461072a57600080fd5b6000602082840312156116d057600080fd5b813561124e816116b0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061175c6080830184866116db565b979650505050505050565b8381526040602082015260006117816040830184866116db565b95945050505050565b6000813561179781611404565b6001600160a01b0316835260208201356117b081611404565b6001600160a01b03166020840152604082013567ffffffffffffffff81168082146117da57600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261181657600080fd5b820160208101903567ffffffffffffffff81111561183357600080fd5b80360382131561184257600080fd5b608060608601526117816080860182846116db565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061188f60a0830185876116db565b82810360808401526118a1818561178a565b9998505050505050505050565b8481526060602082015260006118c86060830185876116db565b828103604084015261175c818561178a565b6000602082840312156118ec57600080fd5b5051919050565b818103818111156104b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006119416060830187896116db565b856020840152828103604084015261195a8185876116db565b98975050505050505050565b60006020828403121561197857600080fd5b815161124e816116b0565b6000825160005b818110156119a4576020818601810151858301520161198a565b50600092019182525091905056fea2646970667358221220dc0b6596b7b61441087636724be59e8874b026b619128cbecb229a5609d1f02d64736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b506040516117aa3803806117aa83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516114d26102d86000396000818161020a015281816105d6015281816108290152818161099a01528181610aef0152610c110152600081816101be01528181610546015281816105a90152818161079901526107fc01526114d26000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b80632ccb404d1161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b80632ccb404d1461025d5780632f2ff15d1461027057600080fd5b8063116191b611610160578063116191b6146101b957806321e093b114610205578063248a9ca31461022c57600080fd5b806301ffc9a71461017c578063106e6290146101a4575b600080fd5b61018f61018a366004610fd3565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611045565b610462565b005b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b61024f61023a366004611078565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761026b3660046110da565b610507565b6101b761027e366004611172565b6106a1565b6101b7610291366004611172565b6106cc565b6101b7610725565b60015460ff1661018f565b6101b76102b736600461119e565b61075a565b6101b76102ca366004611078565b6108ef565b6101b76102dd366004611078565b61095d565b6101b7610a07565b61024f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611172565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61024f600081565b61024f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611172565b610a39565b61024f60035481565b61024f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610aa1565b61049c610aab565b6104a7848484610aea565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5846040516104ef91815260200190565b60405180910390a2506105026001600055565b505050565b61050f610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461053981610aa1565b610541610aab565b61056c7f00000000000000000000000000000000000000000000000000000000000000008785610aea565b6040517f36c99f3b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b90610608907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a90600401611335565b600060405180830381600087803b15801561062257600080fd5b505af1158015610636573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167fa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b8353780178787878660405161068694939291906113a6565b60405180910390a2506106996001600055565b505050505050565b6000828152600260205260409020600101546106bc81610aa1565b6106c68383610c72565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461071b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105028282610d72565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074f81610aa1565b610757610e31565b50565b610762610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078c81610aa1565b610794610aab565b6107bf7f00000000000000000000000000000000000000000000000000000000000000008684610aea565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610859907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016113dd565b600060405180830381600087803b15801561087357600080fd5b505af1158015610887573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d8686866040516108d59392919061142f565b60405180910390a2506108e86001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61091981610aa1565b610921610aab565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610965610aab565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109f357600080fd5b505af11580156108e8573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3181610aa1565b610757610eae565b600082815260026020526040902060010154610a5481610aa1565b6106c68383610d72565b600260005403610a9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107578133610f07565b60015460ff1615610ae8576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7c9190611449565b610b869084611462565b1115610bbe576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d083390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e39610f97565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610eb6610aab565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e84565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f93576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ae8576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fe557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461101557600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461104057600080fd5b919050565b60008060006060848603121561105a57600080fd5b6110638461101c565b95602085013595506040909401359392505050565b60006020828403121561108a57600080fd5b5035919050565b60008083601f8401126110a357600080fd5b50813567ffffffffffffffff8111156110bb57600080fd5b6020830191508360208285010111156110d357600080fd5b9250929050565b60008060008060008060a087890312156110f357600080fd5b6110fc8761101c565b955060208701359450604087013567ffffffffffffffff81111561111f57600080fd5b61112b89828a01611091565b90955093505060608701359150608087013567ffffffffffffffff81111561115257600080fd5b87016080818a03121561116457600080fd5b809150509295509295509295565b6000806040838503121561118557600080fd5b823591506111956020840161101c565b90509250929050565b6000806000806000608086880312156111b657600080fd5b6111bf8661101c565b945060208601359350604086013567ffffffffffffffff8111156111e257600080fd5b6111ee88828901611091565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff6112678261101c565b16825273ffffffffffffffffffffffffffffffffffffffff61128b6020830161101c565b1660208301526000604082013567ffffffffffffffff81168082146112af57600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126112eb57600080fd5b820160208101903567ffffffffffffffff81111561130857600080fd5b80360382131561131757600080fd5b6080606086015261132c608086018284611200565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061138760a083018587611200565b82810360808401526113998185611249565b9998505050505050505050565b8481526060602082015260006113c0606083018587611200565b82810360408401526113d28185611249565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113d2608083018486611200565b83815260406020820152600061132c604083018486611200565b60006020828403121561145b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220276d75628e17e347d14c84f90b610fc13968efff6201b1233b79eeaa7cb742c964736f6c634300081a00336080604052348015600f57600080fd5b506001600055610eea806100246000396000f3fe60806040526004361061006e5760003560e01c80636ed701691161004b5780636ed70169146100e0578063c5131691146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a2146100775780635ac1e07014610097578063676cc054146100b757005b3661007557005b005b34801561008357600080fd5b50610075610092366004610724565b610148565b3480156100a357600080fd5b506100756100b2366004610760565b6101de565b6100ca6100c536600461079b565b61021a565b6040516100d79190610896565b60405180910390f35b3480156100ec57600080fd5b5061007561024d565b34801561010157600080fd5b50610075610110366004610724565b610282565b6100756101233660046109ce565b61035d565b34801561013457600080fd5b50610075610143366004610aba565b6103a1565b6101506103d6565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610419565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b7f8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264338260405161020f929190610bed565b60405180910390a150565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a19392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61028a6103d6565b6000610297600285610cf3565b9050806000036102d3576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102f573ffffffffffffffffffffffffffffffffffffffff8416338484610419565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610394959493929190610d2e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103949493929190610db8565b600260005403610412576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104ae9085906104b4565b50505050565b60006104d673ffffffffffffffffffffffffffffffffffffffff84168361054f565b905080516000141580156104fb5750808060200190518101906104f99190610e7b565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061055d83836000610564565b9392505050565b6060814710156105a2576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610546565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105cb9190610e98565b60006040518083038185875af1925050503d8060008114610608576040519150601f19603f3d011682016040523d82523d6000602084013e61060d565b606091505b509150915061061d868383610627565b9695505050505050565b60608261063c57610637826106b6565b61055d565b8151158015610660575073ffffffffffffffffffffffffffffffffffffffff84163b155b156106af576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610546565b508061055d565b8051156106c65780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461071f57600080fd5b919050565b60008060006060848603121561073957600080fd5b83359250610749602085016106fb565b9150610757604085016106fb565b90509250925092565b60006020828403121561077257600080fd5b813567ffffffffffffffff81111561078957600080fd5b82016080818503121561055d57600080fd5b600080600083850360408112156107b157600080fd5b60208112156107bf57600080fd5b50839250602084013567ffffffffffffffff8111156107dd57600080fd5b8401601f810186136107ee57600080fd5b803567ffffffffffffffff81111561080557600080fd5b86602082840101111561081757600080fd5b939660209190910195509293505050565b60005b8381101561084357818101518382015260200161082b565b50506000910152565b60008151808452610864816020860160208601610828565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061055d602083018461084c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561091f5761091f6108a9565b604052919050565b600082601f83011261093857600080fd5b813567ffffffffffffffff811115610952576109526108a9565b61098360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108d8565b81815284602083860101111561099857600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106f857600080fd5b803561071f816109b5565b6000806000606084860312156109e357600080fd5b833567ffffffffffffffff8111156109fa57600080fd5b610a0686828701610927565b935050602084013591506040840135610a1e816109b5565b809150509250925092565b600067ffffffffffffffff821115610a4357610a436108a9565b5060051b60200190565b600082601f830112610a5e57600080fd5b8135610a71610a6c82610a29565b6108d8565b8082825260208201915060208360051b860101925085831115610a9357600080fd5b602085015b83811015610ab0578035835260209283019201610a98565b5095945050505050565b600080600060608486031215610acf57600080fd5b833567ffffffffffffffff811115610ae657600080fd5b8401601f81018613610af757600080fd5b8035610b05610a6c82610a29565b8082825260208201915060208360051b850101925088831115610b2757600080fd5b602084015b83811015610b6957803567ffffffffffffffff811115610b4b57600080fd5b610b5a8b602083890101610927565b84525060209283019201610b2c565b509550505050602084013567ffffffffffffffff811115610b8957600080fd5b610b9586828701610a4d565b925050610757604085016109c3565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2b836106fb565b16604082015273ffffffffffffffffffffffffffffffffffffffff610c52602084016106fb565b1660608201526000604083013567ffffffffffffffff8116808214610c7657600080fd5b6080840152506060830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610cb257600080fd5b830160208101903567ffffffffffffffff811115610ccf57600080fd5b803603821315610cde57600080fd5b608060a085015261061d60c085018284610ba4565b600082610d29577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d6360a083018661084c565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610dae578151865260209586019590910190600101610d90565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e4b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e3685835161084c565b94506020938401939190910190600101610dfc565b505050508281036040840152610e618186610d7c565b915050610e72606083018415159052565b95945050505050565b600060208284031215610e8d57600080fd5b815161055d816109b5565b60008251610eaa818460208701610828565b919091019291505056fea264697066735822122075e241dc7d0b3cc5bb3ca3c583250993ad9bf6a64ef50849b87060df5ab2e8e364736f6c634300081a0033a2646970667358221220306b916a2afb83f1f2ffb7bc9719a352a04f568a560d1d59ea4f85bd6965508864736f6c634300081a0033", } // GatewayEVMUUPSUpgradeTestABI is the input ABI used to generate the binding from. @@ -2162,9 +2163,9 @@ type GatewayEVMUUPSUpgradeTestReceivedRevert struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterReceivedRevert(opts *bind.FilterOpts) (*GatewayEVMUUPSUpgradeTestReceivedRevertIterator, error) { logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.FilterLogs(opts, "ReceivedRevert") @@ -2174,9 +2175,9 @@ func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterRecei return &GatewayEVMUUPSUpgradeTestReceivedRevertIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "ReceivedRevert", logs: logs, sub: sub}, nil } -// WatchReceivedRevert is a free log subscription operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// WatchReceivedRevert is a free log subscription operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchReceivedRevert(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestReceivedRevert) (event.Subscription, error) { logs, sub, err := _GatewayEVMUUPSUpgradeTest.contract.WatchLogs(opts, "ReceivedRevert") @@ -2211,9 +2212,9 @@ func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchReceiv }), nil } -// ParseReceivedRevert is a log parse operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// ParseReceivedRevert is a log parse operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseReceivedRevert(log types.Log) (*GatewayEVMUUPSUpgradeTestReceivedRevert, error) { event := new(GatewayEVMUUPSUpgradeTestReceivedRevert) if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { @@ -2300,9 +2301,9 @@ type GatewayEVMUUPSUpgradeTestReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// FilterReverted is a free log retrieval operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*GatewayEVMUUPSUpgradeTestRevertedIterator, error) { var toRule []interface{} @@ -2321,9 +2322,9 @@ func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) FilterRever return &GatewayEVMUUPSUpgradeTestRevertedIterator{contract: _GatewayEVMUUPSUpgradeTest.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// WatchReverted is a free log subscription operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *GatewayEVMUUPSUpgradeTestReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2367,9 +2368,9 @@ func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) WatchRevert }), nil } -// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// ParseReverted is a log parse operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVMUUPSUpgradeTest *GatewayEVMUUPSUpgradeTestFilterer) ParseReverted(log types.Log) (*GatewayEVMUUPSUpgradeTestReverted, error) { event := new(GatewayEVMUUPSUpgradeTestReverted) if err := _GatewayEVMUUPSUpgradeTest.contract.UnpackLog(event, "Reverted", log); err != nil { diff --git a/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go b/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go index 3a472e27..adb7467f 100644 --- a/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go +++ b/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go @@ -36,6 +36,7 @@ type MessageContext struct { // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -52,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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"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: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516138406100fd600039600081816121c3015281816121ec015261265a01526138406000f3fe6080604052600436106101fe5760003560e01c80635c975abb1161011d578063ad3cb1cc116100b0578063d0b492c31161007f578063dda79b7511610064578063dda79b751461067c578063e63ab1e91461069c578063f7ad60db146106d057600080fd5b8063d0b492c31461063c578063d547741f1461065c57600080fd5b8063ad3cb1cc14610593578063ae7a3a6f146105dc578063c0c53b8b146105fc578063d09e3b781461061c57600080fd5b80638456cb59116100ec5780638456cb59146104d057806391d14854146104e5578063a217fddf1461054a578063a783c7891461055f57600080fd5b80635c975abb1461043f5780635d62c86014610476578063726ac97c146104aa578063744b9b8b146104bd57600080fd5b806336568abe116101955780635131ab59116101645780635131ab59146103ca57806352d1902d146103ea57806357bec62f146103ff5780635b1125911461041f57600080fd5b806336568abe1461036f57806338e225271461038f5780633f4ba83a146103a25780634f1ef286146103b757600080fd5b80631cff79cd116101d15780631cff79cd1461029a57806321e093b1146102ba578063248a9ca3146102f25780632f2ff15d1461034f57600080fd5b806301ffc9a71461020357806310188aef14610238578063102614b01461025a5780631becceb41461027a575b600080fd5b34801561020f57600080fd5b5061022361021e366004612dc6565b6106e3565b60405190151581526020015b60405180910390f35b34801561024457600080fd5b50610258610253366004612e24565b61077c565b005b34801561026657600080fd5b50610258610275366004612e57565b610857565b34801561028657600080fd5b50610258610295366004612f08565b610951565b6102ad6102a8366004612f6f565b6109cf565b60405161022f9190613012565b3480156102c657600080fd5b506003546102da906001600160a01b031681565b6040516001600160a01b03909116815260200161022f565b3480156102fe57600080fd5b5061034161030d366004613025565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161022f565b34801561035b57600080fd5b5061025861036a36600461303e565b610a87565b34801561037b57600080fd5b5061025861038a36600461303e565b610acb565b6102ad61039d36600461306a565b610b1c565b3480156103ae57600080fd5b50610258610c08565b6102586103c536600461315b565b610c3d565b3480156103d657600080fd5b506102586103e53660046131ec565b610c5c565b3480156103f657600080fd5b50610341610f5c565b34801561040b57600080fd5b506002546102da906001600160a01b031681565b34801561042b57600080fd5b506001546102da906001600160a01b031681565b34801561044b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610223565b34801561048257600080fd5b506103417f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6102586104b836600461325b565b610f8b565b6102586104cb366004612f08565b611103565b3480156104dc57600080fd5b5061025861127f565b3480156104f157600080fd5b5061022361050036600461303e565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561055657600080fd5b50610341600081565b34801561056b57600080fd5b506103417f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561059f57600080fd5b506102ad6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105e857600080fd5b506102586105f7366004612e24565b6112b1565b34801561060857600080fd5b506102586106173660046132a9565b61138c565b34801561062857600080fd5b506102586106373660046132ec565b611628565b34801561064857600080fd5b50610258610657366004613396565b611720565b34801561066857600080fd5b5061025861067736600461303e565b6118c9565b34801561068857600080fd5b506000546102da906001600160a01b031681565b3480156106a857600080fd5b506103417f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102586106de366004613421565b61190d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061077657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061078781611af5565b6001600160a01b0382166107ae5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b0316156107f1576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61081b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611aff565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61085f611bec565b610867611c4a565b826000036108a1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166108c85760405163d92e233d60e01b815260040160405180910390fd5b6108d3338385611ccb565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c85858560405161091a939291906135ae565b60405180910390a361094b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b610959611bec565b610961611c4a565b6001600160a01b0384166109885760405163d92e233d60e01b815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97485858560405161091a939291906135e4565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109fb81611af5565b610a03611bec565b6001600160a01b038516610a2a5760405163d92e233d60e01b815260040160405180910390fd5b6000610a37868686611f2e565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546348787604051610a769392919061360a565b60405180910390a295945050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610ac181611af5565b61094b8383611aff565b6001600160a01b0381163314610b0d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b178282611fe1565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b4881611af5565b610b50611bec565b610b58611c4a565b6001600160a01b038516610b7f5760405163d92e233d60e01b815260040160405180910390fd5b6060610b8d878787876120a5565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610bcc9392919061360a565b60405180910390a29150610bff60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c3281611af5565b610c3a612128565b50565b610c456121b8565b610c4e82612288565b610c588282612293565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610c8681611af5565b610c8e611bec565b610c96611c4a565b83600003610cd0576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610cf75760405163d92e233d60e01b815260040160405180910390fd5b610d018686612399565b610d37576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc39190613624565b610df9576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e04858484611f2e565b50610e0f8686612399565b610e45576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610ea5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec99190613641565b90508015610edb57610edb8782612429565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382878787604051610f229392919061360a565b60405180910390a350610f5460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000610f6661264f565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610f93611bec565b610f9b611c4a565b34600003610fd5576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610ffc5760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611049576040519150601f19603f3d011682016040523d82523d6000602084013e61104e565b606091505b5050905080611089576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c346000866040516110d1939291906135ae565b60405180910390a350610c5860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61110b611bec565b611113611c4a565b3460000361114d576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166111745760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146111c1576040519150601f19603f3d011682016040523d82523d6000602084013e6111c6565b606091505b5050905080611201576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600088888860405161124d95949392919061365a565b60405180910390a35061094b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6112a981611af5565b610c3a6126b1565b60006112bc81611af5565b6001600160a01b0382166112e35760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b031615611326576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113507f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611aff565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113d75750825b905060008267ffffffffffffffff1660011480156113f45750303b155b905081158015611402575080155b15611439576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561149a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806114b757506001600160a01b038716155b156114d55760405163d92e233d60e01b815260040160405180910390fd5b6114dd61272a565b6114e5612732565b6114ed61272a565b6114f5612742565b611500600087611aff565b5061152b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611aff565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556115897f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611aff565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038916179055831561161e5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b611630611bec565b611638611c4a565b84600003611672576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166116995760405163d92e233d60e01b815260040160405180910390fd5b6116a4338587611ccb565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c87878787876040516116ef95949392919061365a565b60405180910390a3610f5460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961174a81611af5565b611752611bec565b61175a611c4a565b84600003611794576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166117bb5760405163d92e233d60e01b815260040160405180910390fd5b6117cf6001600160a01b0388168787612752565b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de0906118149085906004016136fb565b600060405180830381600087803b15801561182e57600080fd5b505af1158015611842573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b14368787878760405161188f949392919061370e565b60405180910390a36118c060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461190381611af5565b61094b8383611fe1565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61193781611af5565b61193f611bec565b611947611c4a565b6001600160a01b03851661196e5760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d80600081146119bb576040519150601f19603f3d011682016040523d82523d6000602084013e6119c0565b606091505b50509050806119fb576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de090611a409086906004016136fb565b600060405180830381600087803b158015611a5a57600080fd5b505af1158015611a6e573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143634888888604051611abc949392919061370e565b60405180910390a350611aee60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610c3a81336127c6565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611be2576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611b983390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610776565b6000915050610776565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c48576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cc5576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611e2f57611cf66001600160a01b038316843084612853565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d869190613624565b611dbc576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611e1b57600080fd5b505af11580156118c0573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015611e92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb69190613624565b611eec576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610b17906001600160a01b038481169186911684612853565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060611f3a838361288c565b600080856001600160a01b0316348686604051611f58929190613745565b60006040518083038185875af1925050503d8060008114611f95576040519150601f19603f3d011682016040523d82523d6000602084013e611f9a565b606091505b509150915081611fd6576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611be2576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610776565b6060836001600160a01b031663676cc054348786866040518563ffffffff1660e01b81526004016120d893929190613755565b60006040518083038185885af11580156120f6573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261211f9190810190613780565b95945050505050565b612130612911565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061225157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166122457f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c48576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c5881611af5565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156122ed575060408051601f3d908101601f191682019092526122ea91810190613641565b60015b612333576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461238f576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161232a565b610b17838361296c565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612405573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fda9190613624565b6003546001600160a01b0390811690831603612578576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156124ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cf9190613624565b612505576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561256457600080fd5b505af1158015610f54573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156125db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ff9190613624565b612635576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610c58906001600160a01b03848116911683612752565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c48576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126b9611bec565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361219a565b611c486129c2565b61273a6129c2565b611c48612a29565b61274a6129c2565b611c48612a31565b6040516001600160a01b03838116602483015260448201839052610b1791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612a82565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610c58576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161232a565b6040516001600160a01b03848116602483015283811660448301526064820183905261094b9186918216906323b872dd9060840161277f565b60048110610c585781357f98933fac000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610b17576040517fed69977500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c48576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61297582612afe565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156129ba57610b178282612ba6565b610c58612c13565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c48576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f086129c2565b612a396129c2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6000612a976001600160a01b03841683612c4b565b90508051600014158015612abc575080806020019051810190612aba9190613624565b155b15610b17576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161232a565b806001600160a01b03163b600003612b4d576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161232a565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612bc391906137ee565b600060405180830381855af49150503d8060008114612bfe576040519150601f19603f3d011682016040523d82523d6000602084013e612c03565b606091505b509150915061211f858383612c59565b3415611c48576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611fda83836000612cce565b606082612c6e57612c6982612d84565b611fda565b8151158015612c8557506001600160a01b0384163b155b15612cc7576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161232a565b5080611fda565b606081471015612d0c576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161232a565b600080856001600160a01b03168486604051612d2891906137ee565b60006040518083038185875af1925050503d8060008114612d65576040519150601f19603f3d011682016040523d82523d6000602084013e612d6a565b606091505b5091509150612d7a868383612c59565b9695505050505050565b805115612d945780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612dd857600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611fda57600080fd5b80356001600160a01b0381168114612e1f57600080fd5b919050565b600060208284031215612e3657600080fd5b611fda82612e08565b600060a08284031215612e5157600080fd5b50919050565b60008060008060808587031215612e6d57600080fd5b612e7685612e08565b935060208501359250612e8b60408601612e08565b9150606085013567ffffffffffffffff811115612ea757600080fd5b612eb387828801612e3f565b91505092959194509250565b60008083601f840112612ed157600080fd5b50813567ffffffffffffffff811115612ee957600080fd5b602083019150836020828501011115612f0157600080fd5b9250929050565b60008060008060608587031215612f1e57600080fd5b612f2785612e08565b9350602085013567ffffffffffffffff811115612f4357600080fd5b612f4f87828801612ebf565b909450925050604085013567ffffffffffffffff811115612ea757600080fd5b600080600060408486031215612f8457600080fd5b612f8d84612e08565b9250602084013567ffffffffffffffff811115612fa957600080fd5b612fb586828701612ebf565b9497909650939450505050565b60005b83811015612fdd578181015183820152602001612fc5565b50506000910152565b60008151808452612ffe816020860160208601612fc2565b601f01601f19169290920160200192915050565b602081526000611fda6020830184612fe6565b60006020828403121561303757600080fd5b5035919050565b6000806040838503121561305157600080fd5b8235915061306160208401612e08565b90509250929050565b600080600080848603606081121561308157600080fd5b602081121561308f57600080fd5b5084935061309f60208601612e08565b9250604085013567ffffffffffffffff8111156130bb57600080fd5b6130c787828801612ebf565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561312b5761312b6130d3565b604052919050565b600067ffffffffffffffff82111561314d5761314d6130d3565b50601f01601f191660200190565b6000806040838503121561316e57600080fd5b61317783612e08565b9150602083013567ffffffffffffffff81111561319357600080fd5b8301601f810185136131a457600080fd5b80356131b76131b282613133565b613102565b8181528660208385010111156131cc57600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561320457600080fd5b61320d86612e08565b945061321b60208701612e08565b935060408601359250606086013567ffffffffffffffff81111561323e57600080fd5b61324a88828901612ebf565b969995985093965092949392505050565b6000806040838503121561326e57600080fd5b61327783612e08565b9150602083013567ffffffffffffffff81111561329357600080fd5b61329f85828601612e3f565b9150509250929050565b6000806000606084860312156132be57600080fd5b6132c784612e08565b92506132d560208501612e08565b91506132e360408501612e08565b90509250925092565b60008060008060008060a0878903121561330557600080fd5b61330e87612e08565b95506020870135945061332360408801612e08565b9350606087013567ffffffffffffffff81111561333f57600080fd5b61334b89828a01612ebf565b909450925050608087013567ffffffffffffffff81111561336b57600080fd5b61337789828a01612e3f565b9150509295509295509295565b600060608284031215612e5157600080fd5b60008060008060008060a087890312156133af57600080fd5b6133b887612e08565b95506133c660208801612e08565b945060408701359350606087013567ffffffffffffffff8111156133e957600080fd5b6133f589828a01612ebf565b909450925050608087013567ffffffffffffffff81111561341557600080fd5b61337789828a01613384565b6000806000806060858703121561343757600080fd5b61344085612e08565b9350602085013567ffffffffffffffff81111561345c57600080fd5b61346887828801612ebf565b909450925050604085013567ffffffffffffffff81111561348857600080fd5b612eb387828801613384565b8015158114610c3a57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126134d757600080fd5b830160208101925035905067ffffffffffffffff8111156134f757600080fd5b803603821315612f0157600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b0361354282612e08565b1682526000602082013561355581613494565b151560208401526001600160a01b0361357060408401612e08565b16604084015261358360608301836134a2565b60a0606086015261359860a086018284613506565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a06060820152600061211f60a0830184613531565b6040815260006135f8604083018587613506565b8281036020840152612d7a8185613531565b83815260406020820152600061211f604083018486613506565b60006020828403121561363657600080fd5b8151611fda81613494565b60006020828403121561365357600080fd5b5051919050565b8581526001600160a01b0385166020820152608060408201526000613683608083018587613506565b82810360608401526136958185613531565b98975050505050505050565b6001600160a01b036136b282612e08565b1682526000602082013567ffffffffffffffff81168082146136d357600080fd5b6020850152506136e660408301836134a2565b6060604086015261211f606086018284613506565b602081526000611fda60208301846136a1565b848152606060208201526000613728606083018587613506565b828103604084015261373a81856136a1565b979650505050505050565b8183823760009101908152919050565b6001600160a01b0361376685612e08565b16815260406020820152600061211f604083018486613506565b60006020828403121561379257600080fd5b815167ffffffffffffffff8111156137a957600080fd5b8201601f810184136137ba57600080fd5b80516137c86131b282613133565b8181528560208385010111156137dd57600080fd5b61211f826020830160208601612fc2565b60008251613800818460208701612fc2565b919091019291505056fea2646970667358221220aad6517765fb8e21f81460c24729c873d456d481d1e68f7e28f429cffe3ea75064736f6c634300081a0033", + 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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"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: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161385a6100fd600039600081816122370152818161226001526126ce015261385a6000f3fe6080604052600436106101fe5760003560e01c806357bec62f1161011d578063a217fddf116100b0578063c0c53b8b1161007f578063d547741f11610064578063d547741f1461066f578063dda79b751461068f578063e63ab1e9146106af57600080fd5b8063c0c53b8b1461062f578063d09e3b781461064f57600080fd5b8063a217fddf1461057d578063a783c78914610592578063ad3cb1cc146105c6578063ae7a3a6f1461060f57600080fd5b8063726ac97c116100ec578063726ac97c146104dd578063744b9b8b146104f05780638456cb591461050357806391d148541461051857600080fd5b806357bec62f146104325780635b112591146104525780635c975abb146104725780635d62c860146104a957600080fd5b80632f2ff15d116101955780633f4ba83a116101645780633f4ba83a146103d55780634f1ef286146103ea5780635131ab59146103fd57806352d1902d1461041d57600080fd5b80632f2ff15d1461036257806336568abe1461038257806336c99f3b146103a257806338e22527146103c257600080fd5b80631becceb4116101d15780631becceb41461028d5780631cff79cd146102ad57806321e093b1146102cd578063248a9ca31461030557600080fd5b806301ffc9a71461020357806310188aef14610238578063102614b01461025a5780631b5ee25b1461027a575b600080fd5b34801561020f57600080fd5b5061022361021e366004612dc6565b6106e3565b60405190151581526020015b60405180910390f35b34801561024457600080fd5b50610258610253366004612e24565b61077c565b005b34801561026657600080fd5b50610258610275366004612e57565b610857565b610258610288366004612f1a565b610951565b34801561029957600080fd5b506102586102a8366004612f8d565b610b39565b6102c06102bb366004612ff4565b610bb7565b60405161022f9190613097565b3480156102d957600080fd5b506003546102ed906001600160a01b031681565b6040516001600160a01b03909116815260200161022f565b34801561031157600080fd5b506103546103203660046130aa565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161022f565b34801561036e57600080fd5b5061025861037d3660046130c3565b610c6f565b34801561038e57600080fd5b5061025861039d3660046130c3565b610cb3565b3480156103ae57600080fd5b506102586103bd3660046130ef565b610d04565b6102c06103d0366004613187565b610ead565b3480156103e157600080fd5b50610258610f99565b6102586103f8366004613278565b610fce565b34801561040957600080fd5b50610258610418366004613309565b610fed565b34801561042957600080fd5b506103546112ed565b34801561043e57600080fd5b506002546102ed906001600160a01b031681565b34801561045e57600080fd5b506001546102ed906001600160a01b031681565b34801561047e57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610223565b3480156104b557600080fd5b506103547f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6102586104eb366004613378565b61131c565b6102586104fe366004612f8d565b611494565b34801561050f57600080fd5b50610258611610565b34801561052457600080fd5b506102236105333660046130c3565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058957600080fd5b50610354600081565b34801561059e57600080fd5b506103547f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156105d257600080fd5b506102c06040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561061b57600080fd5b5061025861062a366004612e24565b611642565b34801561063b57600080fd5b5061025861064a3660046133c6565b61171d565b34801561065b57600080fd5b5061025861066a366004613409565b6119b9565b34801561067b57600080fd5b5061025861068a3660046130c3565b611ab1565b34801561069b57600080fd5b506000546102ed906001600160a01b031681565b3480156106bb57600080fd5b506103547f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061077657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061078781611af5565b6001600160a01b0382166107ae5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b0316156107f1576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61081b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611aff565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61085f611bec565b610867611c4a565b826000036108a1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166108c85760405163d92e233d60e01b815260040160405180910390fd5b6108d3338385611ccb565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c85858560405161091a939291906135ae565b60405180910390a361094b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61097b81611af5565b610983611bec565b61098b611c4a565b6001600160a01b0385166109b25760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d80600081146109ff576040519150601f19603f3d011682016040523d82523d6000602084013e610a04565b606091505b5050905080610a3f576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5ac1e0700000000000000000000000000000000000000000000000000000000081526001600160a01b03871690635ac1e07090610a84908690600401613658565b600060405180830381600087803b158015610a9e57600080fd5b505af1158015610ab2573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167ff196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b34888888604051610b00949392919061366b565b60405180910390a350610b3260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610b41611bec565b610b49611c4a565b6001600160a01b038416610b705760405163d92e233d60e01b815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97485858560405161091a939291906136a2565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610be381611af5565b610beb611bec565b6001600160a01b038516610c125760405163d92e233d60e01b815260040160405180910390fd5b6000610c1f868686611f2e565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546348787604051610c5e939291906136c8565b60405180910390a295945050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610ca981611af5565b61094b8383611aff565b6001600160a01b0381163314610cf5576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cff8282611fe1565b505050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610d2e81611af5565b610d36611bec565b610d3e611c4a565b84600003610d78576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616610d9f5760405163d92e233d60e01b815260040160405180910390fd5b610db36001600160a01b03881687876120a5565b6040517f5ac1e0700000000000000000000000000000000000000000000000000000000081526001600160a01b03871690635ac1e07090610df8908590600401613658565b600060405180830381600087803b158015610e1257600080fd5b505af1158015610e26573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167ff196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b87878787604051610e73949392919061366b565b60405180910390a3610ea460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ed981611af5565b610ee1611bec565b610ee9611c4a565b6001600160a01b038516610f105760405163d92e233d60e01b815260040160405180910390fd5b6060610f1e87878787612119565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610f5d939291906136c8565b60405180910390a29150610f9060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610fc381611af5565b610fcb61219c565b50565b610fd661222c565b610fdf826122fc565b610fe98282612307565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961101781611af5565b61101f611bec565b611027611c4a565b83600003611061576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0385166110885760405163d92e233d60e01b815260040160405180910390fd5b611092868661240d565b6110c8576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015611130573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115491906136e2565b61118a576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611195858484611f2e565b506111a0868661240d565b6111d6576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015611236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125a91906136ff565b9050801561126c5761126c878261249d565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b73828787876040516112b3939291906136c8565b60405180910390a3506112e560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60006112f76126c3565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b611324611bec565b61132c611c4a565b34600003611366576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661138d5760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146113da576040519150601f19603f3d011682016040523d82523d6000602084013e6113df565b606091505b505090508061141a576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600086604051611462939291906135ae565b60405180910390a350610fe960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61149c611bec565b6114a4611c4a565b346000036114de576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166115055760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611552576040519150601f19603f3d011682016040523d82523d6000602084013e611557565b606091505b5050905080611592576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008888886040516115de959493929190613718565b60405180910390a35061094b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61163a81611af5565b610fcb612725565b600061164d81611af5565b6001600160a01b0382166116745760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b0316156116b7576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116e17f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611aff565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117685750825b905060008267ffffffffffffffff1660011480156117855750303b155b905081158015611793575080155b156117ca576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561182b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061184857506001600160a01b038716155b156118665760405163d92e233d60e01b815260040160405180910390fd5b61186e61279e565b6118766127a6565b61187e61279e565b6118866127b6565b611891600087611aff565b506118bc7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611aff565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561191a7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611aff565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156119af5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b6119c1611bec565b6119c9611c4a565b84600003611a03576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611a2a5760405163d92e233d60e01b815260040160405180910390fd5b611a35338587611ccb565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8787878787604051611a80959493929190613718565b60405180910390a36112e560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611aeb81611af5565b61094b8383611fe1565b610fcb81336127c6565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611be2576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611b983390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610776565b6000915050610776565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c48576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cc5576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611e2f57611cf66001600160a01b038316843084612853565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8691906136e2565b611dbc576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611e1b57600080fd5b505af1158015610ea4573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015611e92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb691906136e2565b611eec576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610cff906001600160a01b038481169186911684612853565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060611f3a838361288c565b600080856001600160a01b0316348686604051611f5892919061375f565b60006040518083038185875af1925050503d8060008114611f95576040519150601f19603f3d011682016040523d82523d6000602084013e611f9a565b606091505b509150915081611fd6576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611be2576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610776565b6040516001600160a01b03838116602483015260448201839052610cff91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612911565b6060836001600160a01b031663676cc054348786866040518563ffffffff1660e01b815260040161214c9392919061376f565b60006040518083038185885af115801561216a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052612193919081019061379a565b95945050505050565b6121a461298d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806122c557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166122b97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c48576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610fe981611af5565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612361575060408051601f3d908101601f1916820190925261235e918101906136ff565b60015b6123a7576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612403576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161239e565b610cff83836129e8565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612479573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fda91906136e2565b6003546001600160a01b03908116908316036125ec576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561251f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254391906136e2565b612579576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156125d857600080fd5b505af11580156112e5573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561264f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267391906136e2565b6126a9576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610fe9906001600160a01b038481169116836120a5565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c48576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61272d611bec565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361220e565b611c48612a3e565b6127ae612a3e565b611c48612aa5565b6127be612a3e565b611c48612aad565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610fe9576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161239e565b6040516001600160a01b03848116602483015283811660448301526064820183905261094b9186918216906323b872dd906084016120d2565b60048110610fe95781357f98933fac000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610cff576040517fed69977500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006129266001600160a01b03841683612afe565b9050805160001415801561294b57508080602001905181019061294991906136e2565b155b15610cff576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161239e565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c48576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129f182612b0c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612a3657610cff8282612bb4565b610fe9612c21565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c48576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f08612a3e565b612ab5612a3e565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6060611fda83836000612c59565b806001600160a01b03163b600003612b5b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161239e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612bd19190613808565b600060405180830381855af49150503d8060008114612c0c576040519150601f19603f3d011682016040523d82523d6000602084013e612c11565b606091505b5091509150612193858383612d0f565b3415611c48576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081471015612c97576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161239e565b600080856001600160a01b03168486604051612cb39190613808565b60006040518083038185875af1925050503d8060008114612cf0576040519150601f19603f3d011682016040523d82523d6000602084013e612cf5565b606091505b5091509150612d05868383612d0f565b9695505050505050565b606082612d2457612d1f82612d84565b611fda565b8151158015612d3b57506001600160a01b0384163b155b15612d7d576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161239e565b5080611fda565b805115612d945780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612dd857600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611fda57600080fd5b80356001600160a01b0381168114612e1f57600080fd5b919050565b600060208284031215612e3657600080fd5b611fda82612e08565b600060a08284031215612e5157600080fd5b50919050565b60008060008060808587031215612e6d57600080fd5b612e7685612e08565b935060208501359250612e8b60408601612e08565b9150606085013567ffffffffffffffff811115612ea757600080fd5b612eb387828801612e3f565b91505092959194509250565b60008083601f840112612ed157600080fd5b50813567ffffffffffffffff811115612ee957600080fd5b602083019150836020828501011115612f0157600080fd5b9250929050565b600060808284031215612e5157600080fd5b60008060008060608587031215612f3057600080fd5b612f3985612e08565b9350602085013567ffffffffffffffff811115612f5557600080fd5b612f6187828801612ebf565b909450925050604085013567ffffffffffffffff811115612f8157600080fd5b612eb387828801612f08565b60008060008060608587031215612fa357600080fd5b612fac85612e08565b9350602085013567ffffffffffffffff811115612fc857600080fd5b612fd487828801612ebf565b909450925050604085013567ffffffffffffffff811115612ea757600080fd5b60008060006040848603121561300957600080fd5b61301284612e08565b9250602084013567ffffffffffffffff81111561302e57600080fd5b61303a86828701612ebf565b9497909650939450505050565b60005b8381101561306257818101518382015260200161304a565b50506000910152565b60008151808452613083816020860160208601613047565b601f01601f19169290920160200192915050565b602081526000611fda602083018461306b565b6000602082840312156130bc57600080fd5b5035919050565b600080604083850312156130d657600080fd5b823591506130e660208401612e08565b90509250929050565b60008060008060008060a0878903121561310857600080fd5b61311187612e08565b955061311f60208801612e08565b945060408701359350606087013567ffffffffffffffff81111561314257600080fd5b61314e89828a01612ebf565b909450925050608087013567ffffffffffffffff81111561316e57600080fd5b61317a89828a01612f08565b9150509295509295509295565b600080600080848603606081121561319e57600080fd5b60208112156131ac57600080fd5b508493506131bc60208601612e08565b9250604085013567ffffffffffffffff8111156131d857600080fd5b6131e487828801612ebf565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613248576132486131f0565b604052919050565b600067ffffffffffffffff82111561326a5761326a6131f0565b50601f01601f191660200190565b6000806040838503121561328b57600080fd5b61329483612e08565b9150602083013567ffffffffffffffff8111156132b057600080fd5b8301601f810185136132c157600080fd5b80356132d46132cf82613250565b61321f565b8181528660208385010111156132e957600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561332157600080fd5b61332a86612e08565b945061333860208701612e08565b935060408601359250606086013567ffffffffffffffff81111561335b57600080fd5b61336788828901612ebf565b969995985093965092949392505050565b6000806040838503121561338b57600080fd5b61339483612e08565b9150602083013567ffffffffffffffff8111156133b057600080fd5b6133bc85828601612e3f565b9150509250929050565b6000806000606084860312156133db57600080fd5b6133e484612e08565b92506133f260208501612e08565b915061340060408501612e08565b90509250925092565b60008060008060008060a0878903121561342257600080fd5b61342b87612e08565b95506020870135945061344060408801612e08565b9350606087013567ffffffffffffffff81111561345c57600080fd5b61346889828a01612ebf565b909450925050608087013567ffffffffffffffff81111561348857600080fd5b61317a89828a01612e3f565b8015158114610fcb57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126134d757600080fd5b830160208101925035905067ffffffffffffffff8111156134f757600080fd5b803603821315612f0157600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b0361354282612e08565b1682526000602082013561355581613494565b151560208401526001600160a01b0361357060408401612e08565b16604084015261358360608301836134a2565b60a0606086015261359860a086018284613506565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a06060820152600061219360a0830184613531565b6001600160a01b036135f582612e08565b1682526001600160a01b0361360c60208301612e08565b1660208301526000604082013567ffffffffffffffff811680821461363057600080fd5b60408501525061364360608301836134a2565b60806060860152612193608086018284613506565b602081526000611fda60208301846135e4565b848152606060208201526000613685606083018587613506565b828103604084015261369781856135e4565b979650505050505050565b6040815260006136b6604083018587613506565b8281036020840152612d058185613531565b838152604060208201526000612193604083018486613506565b6000602082840312156136f457600080fd5b8151611fda81613494565b60006020828403121561371157600080fd5b5051919050565b8581526001600160a01b0385166020820152608060408201526000613741608083018587613506565b82810360608401526137538185613531565b98975050505050505050565b8183823760009101908152919050565b6001600160a01b0361378085612e08565b168152604060208201526000612193604083018486613506565b6000602082840312156137ac57600080fd5b815167ffffffffffffffff8111156137c357600080fd5b8201601f810184136137d457600080fd5b80516137e26132cf82613250565b8181528560208385010111156137f757600080fd5b612193826020830160208601613047565b6000825161381a818460208701613047565b919091019291505056fea26469706673582212206b4ed273157abc30a8ae8438a103203505a4aeed9f8a7a8a88dada1a6225bf3c64736f6c634300081a0033", } // GatewayEVMUpgradeTestABI is the input ABI used to generate the binding from. @@ -804,23 +805,23 @@ func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactorSession) Execute0(m return _GatewayEVMUpgradeTest.Contract.Execute0(&_GatewayEVMUpgradeTest.TransactOpts, messageContext, destination, data) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0xf7ad60db. +// ExecuteRevert is a paid mutator transaction binding the contract method 0x1b5ee25b. // -// Solidity: function executeRevert(address destination, bytes data, (address,uint64,bytes) revertContext) payable returns() +// Solidity: function executeRevert(address destination, bytes data, (address,address,uint64,bytes) revertContext) payable returns() func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactor) ExecuteRevert(opts *bind.TransactOpts, destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVMUpgradeTest.contract.Transact(opts, "executeRevert", destination, data, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0xf7ad60db. +// ExecuteRevert is a paid mutator transaction binding the contract method 0x1b5ee25b. // -// Solidity: function executeRevert(address destination, bytes data, (address,uint64,bytes) revertContext) payable returns() +// Solidity: function executeRevert(address destination, bytes data, (address,address,uint64,bytes) revertContext) payable returns() func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestSession) ExecuteRevert(destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVMUpgradeTest.Contract.ExecuteRevert(&_GatewayEVMUpgradeTest.TransactOpts, destination, data, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0xf7ad60db. +// ExecuteRevert is a paid mutator transaction binding the contract method 0x1b5ee25b. // -// Solidity: function executeRevert(address destination, bytes data, (address,uint64,bytes) revertContext) payable returns() +// Solidity: function executeRevert(address destination, bytes data, (address,address,uint64,bytes) revertContext) payable returns() func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactorSession) ExecuteRevert(destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVMUpgradeTest.Contract.ExecuteRevert(&_GatewayEVMUpgradeTest.TransactOpts, destination, data, revertContext) } @@ -930,23 +931,23 @@ func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactorSession) RenounceRo return _GatewayEVMUpgradeTest.Contract.RenounceRole(&_GatewayEVMUpgradeTest.TransactOpts, role, callerConfirmation) } -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xd0b492c3. +// RevertWithERC20 is a paid mutator transaction binding the contract method 0x36c99f3b. // -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) returns() func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactor) RevertWithERC20(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVMUpgradeTest.contract.Transact(opts, "revertWithERC20", token, to, amount, data, revertContext) } -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xd0b492c3. +// RevertWithERC20 is a paid mutator transaction binding the contract method 0x36c99f3b. // -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) returns() func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestSession) RevertWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVMUpgradeTest.Contract.RevertWithERC20(&_GatewayEVMUpgradeTest.TransactOpts, token, to, amount, data, revertContext) } -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xd0b492c3. +// RevertWithERC20 is a paid mutator transaction binding the contract method 0x36c99f3b. // -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) returns() func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactorSession) RevertWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _GatewayEVMUpgradeTest.Contract.RevertWithERC20(&_GatewayEVMUpgradeTest.TransactOpts, token, to, amount, data, revertContext) } @@ -2160,9 +2161,9 @@ type GatewayEVMUpgradeTestReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// FilterReverted is a free log retrieval operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*GatewayEVMUpgradeTestRevertedIterator, error) { var toRule []interface{} @@ -2181,9 +2182,9 @@ func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestFilterer) FilterReverted(opts return &GatewayEVMUpgradeTestRevertedIterator{contract: _GatewayEVMUpgradeTest.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// WatchReverted is a free log subscription operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *GatewayEVMUpgradeTestReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2227,9 +2228,9 @@ func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestFilterer) WatchReverted(opts }), nil } -// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// ParseReverted is a log parse operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestFilterer) ParseReverted(log types.Log) (*GatewayEVMUpgradeTestReverted, error) { event := new(GatewayEVMUpgradeTestReverted) if err := _GatewayEVMUpgradeTest.contract.UnpackLog(event, "Reverted", log); err != nil { diff --git a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go index 1ea4cabe..c6a9ddd1 100644 --- a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go +++ b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go @@ -37,6 +37,7 @@ type CallOptions struct { // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -71,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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"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\":\"EmptyMessage\",\"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\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrProtocol\",\"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: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5062011f34806200003e6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b61013261126e565b60405161013f9190617b0f565b60405180910390f35b6101506112d0565b60405161013f9190617bab565b610132611412565b610132611472565b6101286114d2565b61017d611d41565b60405161013f9190617d11565b610128611ec3565b61019a6126f7565b60405161013f9190617daf565b6101af6127c7565b60405161013f9190617e26565b6101286128c2565b6101af612ec0565b61019a612fbb565b6101dc61308b565b604051901515815260200161013f565b61012861315f565b610132613883565b601f546101dc9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880548216615678179055602e8054909116614321179055604051610267906179f4565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055604051610331906179f4565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190861694810194909452604484019290925290921660648201526104a6919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526138e3565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560285460265460405192939182169291169061053290617a02565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561056e573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460285460265460405193851694928316939183169216906105c990617a10565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801561060d573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106b957600080fd5b505af11580156106cd573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074357600080fd5b505af1158015610757573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107bd57600080fd5b505af11580156107d1573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50506023546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af11580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc9190617ebd565b506040516109e990617a1e565b604051809103906000f080158015610a05573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054602e54935190851691810191909152919092166044820152610aee919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526138e3565b602980546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602a80549092168117909155604051610b3f90617a2c565b6001600160a01b039091168152602001604051809103906000f080158015610b6b573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050506000806000604051610c4990617a3a565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610c85573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602a54604051601293600193600093849391921690610cdb90617a48565b610cea96959493929190617edf565b604051809103906000f080158015610d06573d6000803e3d6000fd5b50602d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602c546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610d9d57600080fd5b505af1158015610db1573d6000803e3d6000fd5b5050602c546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e1b57600080fd5b505af1158015610e2f573d6000803e3d6000fd5b5050602d54602e546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec79190617ebd565b50602d54602b546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190617ebd565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561104557600080fd5b505af1158015611059573d6000803e3d6000fd5b5050602d54602a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af11580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190617ebd565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561117257600080fd5b505af1158015611186573d6000803e3d6000fd5b50506040805160a08101825261032180825260016020808401918252838501928352845190810190945260008085526060840185905260808401528251602f80549251151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009093166001600160a01b0392831617929092178255915160308054919093167fffffffffffffffffffffffff00000000000000000000000000000000000000009190911617909155909350915060319061125d908261809f565b506080820151816003015590505050565b606060168054806020026020016040519081016040528092919081815260200182805480156112c657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112a8575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561140957600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156113f257838290600052602060002001805461136590618003565b80601f016020809104026020016040519081016040528092919081815260200182805461139190618003565b80156113de5780601f106113b3576101008083540402835291602001916113de565b820191906000526020600020905b8154815290600101906020018083116113c157829003601f168201915b505050505081526020019060010190611346565b5050505081525050815260200190600101906112f4565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156112c6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112a8575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156112c6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112a8575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602d54602b5492517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529192602a92600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa15801561157e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a2919061815e565b6040519091506000907fe04d4f9700000000000000000000000000000000000000000000000000000000906115df90889088908890602401618177565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526025549051919350600092611678926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d546116af926207a120916001600160a01b0316908690600190602f90602401618290565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f048ae42c00000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161176c916001600160a01b03919091169060009086906004016182f9565b600060405180830381600087803b15801561178657600080fd5b505af115801561179a573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561181057600080fd5b505af1158015611824573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526118be926207a120916001600160a01b0316908d908d908d90600401618321565b600060405180830381600087803b1580156118d857600080fd5b505af11580156118ec573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561196957600080fd5b505af115801561197d573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611a0f57600080fd5b505af1158015611a23573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa9350611a6c92506001600160a01b039091169087908b908b908b90618376565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611b0257600080fd5b505af1158015611b16573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611b5b90879086906183b7565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611bd557600080fd5b505af1158015611be9573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508892611c3d92169087906004016183d0565b60006040518083038185885af1158015611c5b573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611c8491908101906184ab565b50602d54602b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d13919061815e565b9050611d37816001611d286207a1208861850f565b611d32919061850f565b613902565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156114095783829060005260206000209060020201604051806040016040529081600082018054611d9890618003565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc490618003565b8015611e115780601f10611de657610100808354040283529160200191611e11565b820191906000526020600020905b815481529060010190602001808311611df457829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611eab57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611e585790505b50505050508152505081526020019060010190611d65565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611f3f90879087908790602401618177565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602a5491517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b039093166084820152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561203157600080fd5b505af1158015612045573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c9060340160408051601f19818403018152828252602d547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216916207a1209188918491634d8943bb916004808201926020929091908290030181865afa15801561211a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213e919061815e565b6040805180820182526001808252602082015290516121669695949392918c91602f90618522565b60405180910390a3602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156121e057600080fd5b505af11580156121f4573d6000803e3d6000fd5b5050602a546025546040805160609290921b6bffffffffffffffffffffffff1916602083015280518083036014018152602d5460748401835260016034850181815260549095015291517f7b15118b0000000000000000000000000000000000000000000000000000000081526001600160a01b039485169650637b15118b95506122929491936207a1209392909216918991602f90600401618592565b600060405180830381600087803b1580156122ac57600080fd5b505af11580156122c0573d6000803e3d6000fd5b5050602d54602e546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561232c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612350919061815e565b905061236381611d32846207a12061850f565b6020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156123dc57600080fd5b505af11580156123f0573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561248257600080fd5b505af1158015612496573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa93506124df92506001600160a01b039091169087908b908b908b90618376565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561257557600080fd5b505af1158015612589573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506125ce90879087906183b7565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561264857600080fd5b505af115801561265c573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935088926126b092169088906004016183d0565b60006040518083038185885af11580156126ce573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611d3791908101906184ab565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561140957838290600052602060002001805461273a90618003565b80601f016020809104026020016040519081016040528092919081815260200182805461276690618003565b80156127b35780601f10612788576101008083540402835291602001916127b3565b820191906000526020600020905b81548152906001019060200180831161279657829003601f168201915b50505050508152602001906001019061271b565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156114095760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156128aa57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116128575790505b505050505081525050815260200190600101906127eb565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061293e90879087908790602401618177565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602e5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612a1157600080fd5b505af1158015612a25573d6000803e3d6000fd5b5050602a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612ab757600080fd5b505af1158015612acb573d6000803e3d6000fd5b5050602d54602e5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039283169450911691507f306ee13f48319a123b222c69908e44dcf91abffc20cacc502e3cf5a4ff23e0e49060340160408051601f198184030181528282018252600180845260208401529051612b55928791602f906185f3565b60405180910390a3602a546025546040805160609290921b6bffffffffffffffffffffffff19166020830152805180830360140181526034830191829052602d547f1cb5ea75000000000000000000000000000000000000000000000000000000009092526001600160a01b0393841693631cb5ea7593612be59391909116908690600190602f9060380161863f565b600060405180830381600087803b158015612bff57600080fd5b505af1158015612c13573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612c9057600080fd5b505af1158015612ca4573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612d3657600080fd5b505af1158015612d4a573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612d8f90859085906183b7565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e0957600080fd5b505af1158015612e1d573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508692612e7192169086906004016183d0565b60006040518083038185885af1158015612e8f573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052612eb891908101906184ab565b505050505050565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156114095760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612fa357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612f505790505b50505050508152505081526020019060010190612ee4565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611409578382906000526020600020018054612ffe90618003565b80601f016020809104026020016040519081016040528092919081815260200182805461302a90618003565b80156130775780601f1061304c57610100808354040283529160200191613077565b820191906000526020600020905b81548152906001019060200180831161305a57829003601f168201915b505050505081526020019060010190612fdf565b60085460009060ff16156130a3575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613134573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613158919061815e565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f9700000000000000000000000000000000000000000000000000000000906131db90879087908790602401618177565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526025549051919350600092613274926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d546132a8926001600160a01b03909116908590600190602f90602401618699565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1cb5ea7500000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613365916001600160a01b03919091169060009086906004016182f9565b600060405180830381600087803b15801561337f57600080fd5b505af1158015613393573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561340957600080fd5b505af115801561341d573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637a34d8bb915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526134b4926001600160a01b03909116908b908b908b906004016186ea565b600060405180830381600087803b1580156134ce57600080fd5b505af11580156134e2573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561355f57600080fd5b505af1158015613573573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561360557600080fd5b505af1158015613619573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061366292506001600160a01b039091169086908a908a908a90618376565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156136f857600080fd5b505af115801561370c573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f915061375190869086906183b7565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156137cb57600080fd5b505af11580156137df573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350879261383392169087906004016183d0565b60006040518083038185885af1158015613851573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261387a91908101906184ab565b50505050505050565b606060158054806020026020016040519081016040528092919081815260200182805480156112c6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112a8575050505050905090565b60006138ed617a56565b6138f8848483613981565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561396d57600080fd5b505afa158015612eb8573d6000803e3d6000fd5b60008061398e85846139fc565b90506139f16040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016139dc9291906183d0565b60405160208183030381529060405285613a08565b9150505b9392505050565b60006139f58383613a36565b60c08101515160009015613a2c57613a2584848460c00151613a51565b90506139f5565b613a258484613bf7565b6000613a428383613ce2565b6139f583836020015184613a08565b600080613a5c613cf2565b90506000613a6a8683613dc5565b90506000613a81826060015183602001518561426b565b90506000613a918383898961447d565b90506000613a9e826152fa565b602081015181519192509060030b15613b1157898260400151604051602001613ac8929190618738565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613b08916004016187b9565b60405180910390fd5b6000613b546040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016154c9565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613ba79084906004016187b9565b602060405180830381865afa158015613bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be891906187cc565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613c4c9087906004016187b9565b600060405180830381865afa158015613c69573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613c9191908101906184ab565b90506000613cbf8285604051602001613cab9291906187f5565b6040516020818303038152906040526156c9565b90506001600160a01b0381166138f8578484604051602001613ac8929190618824565b613cee828260006156dc565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613d799084906004016188cf565b600060405180830381865afa158015613d96573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613dbe9190810190618916565b9250505090565b613df76040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613e426040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613e4b856157df565b60208201526000613e5b86615bc4565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613e9d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ec59190810190618916565b86838560200151604051602001613edf949392919061895f565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613f379085906004016187b9565b600060405180830381865afa158015613f54573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f7c9190810190618916565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613fc4908490600401618a63565b602060405180830381865afa158015613fe1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140059190617ebd565b61401a5781604051602001613ac89190618ab5565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061405f908490600401618b47565b600060405180830381865afa15801561407c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140a49190810190618916565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906140eb908490600401618b99565b602060405180830381865afa158015614108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061412c9190617ebd565b156141c1576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614176908490600401618b99565b600060405180830381865afa158015614193573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141bb9190810190618916565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016141e69190618beb565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614212929190618c57565b600060405180830381865afa15801561422f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142579190810190618916565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816142875790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106142e7576142e7618c7c565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061433b5761433b618c7c565b6020026020010181905250846040516020016143579190618cab565b6040516020818303038152906040528160028151811061437957614379618c7c565b6020026020010181905250826040516020016143959190618d17565b604051602081830303815290604052816003815181106143b7576143b7618c7c565b602002602001018190525060006143cd826152fa565b602080820151604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000818501908152825180840184526000808252908601528251808401909352905182529281019290925291925061445e9060408051808201825260008082526020918201528151808301909252845182528085019082015290615e47565b6144735785604051602001613ac89190618d58565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156144cd565b511590565b61464157826020015115614589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613b08565b8260c0015115614641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613b08565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161465a57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806146b590618de9565b935060ff16815181106146ca576146ca618c7c565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161471b9190618e08565b60405160208183030381529060405282828061473690618de9565b935060ff168151811061474b5761474b618c7c565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061479890618de9565b935060ff16815181106147ad576147ad618c7c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806147fa90618de9565b935060ff168151811061480f5761480f618c7c565b6020026020010181905250876020015182828061482b90618de9565b935060ff168151811061484057614840618c7c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061488d90618de9565b935060ff16815181106148a2576148a2618c7c565b6020908102919091010152875182826148ba81618de9565b935060ff16815181106148cf576148cf618c7c565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061491c90618de9565b935060ff168151811061493157614931618c7c565b602002602001018190525061494546615ea8565b828261495081618de9565b935060ff168151811061496557614965618c7c565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806149b290618de9565b935060ff16815181106149c7576149c7618c7c565b6020026020010181905250868282806149df90618de9565b935060ff16815181106149f4576149f4618c7c565b6020908102919091010152855115614b1b5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614a4581618de9565b935060ff1681518110614a5a57614a5a618c7c565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614aaa9089906004016187b9565b600060405180830381865afa158015614ac7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614aef9190810190618916565b8282614afa81618de9565b935060ff1681518110614b0f57614b0f618c7c565b60200260200101819052505b846020015115614beb5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614b6481618de9565b935060ff1681518110614b7957614b79618c7c565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614bc690618de9565b935060ff1681518110614bdb57614bdb618c7c565b6020026020010181905250614db2565b614c236144c88660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614cb65760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614c6681618de9565b935060ff1681518110614c7b57614c7b618c7c565b60200260200101819052508460a00151604051602001614c9b9190618cab565b604051602081830303815290604052828280614bc690618de9565b8460c00151158015614cf9575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614cf790511590565b155b15614db25760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614d3d81618de9565b935060ff1681518110614d5257614d52618c7c565b6020026020010181905250614d6688615f48565b604051602001614d769190618cab565b604051602081830303815290604052828280614d9190618de9565b935060ff1681518110614da657614da6618c7c565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614de690511590565b614e7b5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614e2981618de9565b935060ff1681518110614e3e57614e3e618c7c565b60200260200101819052508460400151828280614e5a90618de9565b935060ff1681518110614e6f57614e6f618c7c565b60200260200101819052505b606085015115614f9c5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614ec481618de9565b935060ff1681518110614ed957614ed9618c7c565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614f48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614f709190810190618916565b8282614f7b81618de9565b935060ff1681518110614f9057614f90618c7c565b60200260200101819052505b60e085015151156150435760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614fe681618de9565b935060ff1681518110614ffb57614ffb618c7c565b60200260200101819052506150178560e0015160000151615ea8565b828261502281618de9565b935060ff168151811061503757615037618c7c565b60200260200101819052505b60e085015160200151156150ed5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261509081618de9565b935060ff16815181106150a5576150a5618c7c565b60200260200101819052506150c18560e0015160200151615ea8565b82826150cc81618de9565b935060ff16815181106150e1576150e1618c7c565b60200260200101819052505b60e085015160400151156151975760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261513a81618de9565b935060ff168151811061514f5761514f618c7c565b602002602001018190525061516b8560e0015160400151615ea8565b828261517681618de9565b935060ff168151811061518b5761518b618c7c565b60200260200101819052505b60e085015160600151156152415760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826151e481618de9565b935060ff16815181106151f9576151f9618c7c565b60200260200101819052506152158560e0015160600151615ea8565b828261522081618de9565b935060ff168151811061523557615235618c7c565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561525f5761525f617fd4565b60405190808252806020026020018201604052801561529257816020015b606081526020019060019003908161527d5790505b50905060005b8260ff168160ff1610156152eb57838160ff16815181106152bb576152bb618c7c565b6020026020010151828260ff16815181106152d8576152d8618c7c565b6020908102919091010152600101615298565b5093505050505b949350505050565b6153216040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916153a791869101618e73565b600060405180830381865afa1580156153c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526153ec9190810190618916565b905060006153fa8683616a37565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161542a9190617daf565b6000604051808303816000875af1158015615449573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154719190810190618eba565b805190915060030b1580159061548a5750602081015151155b80156154995750604081015151155b1561447357816000815181106154b1576154b1618c7c565b6020026020010151604051602001613ac89190618f70565b606060006154fe8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506155359082905b90616b8c565b156156925760006155b2826155ac846155a66155788a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616bb3565b90616c15565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615616908290616b8c565b1561568057604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261567d905b8290616c9a565b90505b61568981616cc0565b925050506139f5565b82156156ab578484604051602001613ac892919061915c565b50506040805160208101909152600081526139f5565b509392505050565b6000808251602084016000f09392505050565b8160a00151156156eb57505050565b60006156f8848484616d29565b90506000615705826152fa565b602081015181519192509060030b1580156157a15750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157a19060408051808201825260008082526020918201528151808301909252845182528085019082015261552f565b156157ae57505050505050565b604082015151156157ce578160400151604051602001613ac89190619203565b80604051602001613ac89190619261565b606060006158148360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615879905b8290615e47565b156158e857604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526139f5906158e39083906172c4565b616cc0565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261594a905b829061734e565b600103615a1757604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159b090615676565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526139f5906158e3905b8390616c9a565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a7690615872565b15615bad57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615ade9083906173e8565b905060008160018351615af1919061850f565b81518110615b0157615b01618c7c565b60200260200101519050615ba46158e3615b776040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906172c4565b95945050505050565b82604051602001613ac891906192cc565b50919050565b60606000615bf98360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615c5b90615872565b15615c69576139f581616cc0565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615cc890615943565b600103615d3257604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526139f5906158e390615a10565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615d9190615872565b15615bad57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615df99083906173e8565b9050600181511115615e35578060028251615e14919061850f565b81518110615e2457615e24618c7c565b602002602001015192505050919050565b5082604051602001613ac891906192cc565b805182516000911115615e5c575060006138fc565b81518351602085015160009291615e72916193aa565b615e7c919061850f565b905082602001518103615e935760019150506138fc565b82516020840151819020912014905092915050565b60606000615eb58361748d565b600101905060008167ffffffffffffffff811115615ed557615ed5617fd4565b6040519080825280601f01601f191660200182016040528015615eff576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615f0957509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615fd4905b829061756f565b1561601457505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261607390615fcd565b156160b357505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261611290615fcd565b1561615257505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161b190615fcd565b806162165750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261621690615fcd565b1561625657505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162b590615fcd565b8061631a5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261631a90615fcd565b1561635a57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163b990615fcd565b8061641e5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261641e90615fcd565b1561645e57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164bd90615fcd565b806165225750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261652290615fcd565b1561656257505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165c190615fcd565b1561660157505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261666090615fcd565b156166a057505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166ff90615fcd565b1561673f57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261679e90615fcd565b156167de57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261683d90615fcd565b1561687d57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168dc90615fcd565b806169415750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261694190615fcd565b1561698157505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169e090615fcd565b15616a2057505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613ac892906020016193bd565b60608060005b8451811015616ac25781858281518110616a5957616a59618c7c565b6020026020010151604051602001616a729291906187f5565b604051602081830303815290604052915060018551616a91919061850f565b8114616aba5781604051602001616aa89190619526565b60405160208183030381529060405291505b600101616a3d565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616adb5790505090508381600081518110616b0657616b06618c7c565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616b5a57616b5a618c7c565b60200260200101819052508181600281518110616b7957616b79618c7c565b6020908102919091010152949350505050565b6020808301518351835192840151600093616baa9291849190617583565b14159392505050565b60408051808201909152600080825260208201526000616be58460000151856020015185600001518660200151617694565b9050836020015181616bf7919061850f565b84518590616c0690839061850f565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616c3a5750816138fc565b6020808301519084015160019114616c615750815160208481015190840151829020919020145b8015616c9257825184518590616c7890839061850f565b9052508251602085018051616c8e9083906193aa565b9052505b509192915050565b6040805180820190915260008082526020820152616cb98383836177b4565b5092915050565b60606000826000015167ffffffffffffffff811115616ce157616ce1617fd4565b6040519080825280601f01601f191660200182016040528015616d0b576020820181803683370190505b5090506000602082019050616cb9818560200151866000015161785f565b60606000616d35613cf2565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616d5257905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616dad90618de9565b935060ff1681518110616dc257616dc2618c7c565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616e139190619567565b604051602081830303815290604052828280616e2e90618de9565b935060ff1681518110616e4357616e43618c7c565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616e9090618de9565b935060ff1681518110616ea557616ea5618c7c565b602002602001018190525082604051602001616ec19190618d17565b604051602081830303815290604052828280616edc90618de9565b935060ff1681518110616ef157616ef1618c7c565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616f3e90618de9565b935060ff1681518110616f5357616f53618c7c565b6020026020010181905250616f6887846178d9565b8282616f7381618de9565b935060ff1681518110616f8857616f88618c7c565b6020908102919091010152855151156170345760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616fda81618de9565b935060ff1681518110616fef57616fef618c7c565b60200260200101819052506170088660000151846178d9565b828261701381618de9565b935060ff168151811061702857617028618c7c565b60200260200101819052505b8560800151156170a25760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261707d81618de9565b935060ff168151811061709257617092618c7c565b6020026020010181905250617108565b84156171085760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826170e781618de9565b935060ff16815181106170fc576170fc618c7c565b60200260200101819052505b604086015151156171a45760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261715281618de9565b935060ff168151811061716757617167618c7c565b6020026020010181905250856040015182828061718390618de9565b935060ff168151811061719857617198618c7c565b60200260200101819052505b85606001511561720e5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826171ed81618de9565b935060ff168151811061720257617202618c7c565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561722c5761722c617fd4565b60405190808252806020026020018201604052801561725f57816020015b606081526020019060019003908161724a5790505b50905060005b8260ff168160ff1610156172b857838160ff168151811061728857617288618c7c565b6020026020010151828260ff16815181106172a5576172a5618c7c565b6020908102919091010152600101617265565b50979650505050505050565b60408051808201909152600080825260208201528151835110156172e95750816138fc565b815183516020850151600092916172ff916193aa565b617309919061850f565b6020840151909150600190821461732a575082516020840151819020908220145b80156173455783518551869061734190839061850f565b9052505b50929392505050565b60008082600001516173728560000151866020015186600001518760200151617694565b61737c91906193aa565b90505b8351602085015161739091906193aa565b8111616cb957816173a0816195ac565b92505082600001516173d78560200151836173bb919061850f565b86516173c7919061850f565b8386600001518760200151617694565b6173e191906193aa565b905061737f565b606060006173f6848461734e565b6174019060016193aa565b67ffffffffffffffff81111561741957617419617fd4565b60405190808252806020026020018201604052801561744c57816020015b60608152602001906001900390816174375790505b50905060005b81518110156156c1576174686158e38686616c9a565b82828151811061747a5761747a618c7c565b6020908102919091010152600101617452565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106174d6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617502576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061752057662386f26fc10000830492506010015b6305f5e1008310617538576305f5e100830492506008015b612710831061754c57612710830492506004015b6064831061755e576064830492506002015b600a83106138fc5760010192915050565b600061757b8383617919565b159392505050565b60008085841161768a576020841161763657600084156175ce5760016175aa86602061850f565b6175b59060086195c6565b6175c09060026196c4565b6175ca919061850f565b1990505b83518116856175dd89896193aa565b6175e7919061850f565b805190935082165b8181146176215787841161760957879450505050506152f2565b83617613816196d0565b9450508284511690506175ef565b61762b87856193aa565b9450505050506152f2565b838320617643858861850f565b61764d90876193aa565b91505b858210617688578482208082036176755761766b86846193aa565b93505050506152f2565b61768060018461850f565b925050617650565b505b5092949350505050565b6000838186851161779f576020851161774e57600085156176e05760016176bc87602061850f565b6176c79060086195c6565b6176d29060026196c4565b6176dc919061850f565b1990505b845181166000876176f18b8b6193aa565b6176fb919061850f565b855190915083165b828114617740578186106177285761771b8b8b6193aa565b96505050505050506152f2565b85617732816195ac565b965050838651169050617703565b8596505050505050506152f2565b508383206000905b617760868961850f565b821161779d5785832080820361777c57839450505050506152f2565b6177876001856193aa565b9350508180617795906195ac565b925050617756565b505b6177a987876193aa565b979650505050505050565b604080518082019091526000808252602082015260006177e68560000151866020015186600001518760200151617694565b602080870180519186019190915251909150617802908261850f565b83528451602086015161781591906193aa565b81036178245760008552617856565b8351835161783291906193aa565b8551869061784190839061850f565b905250835161785090826193aa565b60208601525b50909392505050565b6020811061789757815183526178766020846193aa565b92506178836020836193aa565b915061789060208261850f565b905061785f565b60001981156178c65760016178ad83602061850f565b6178b9906101006196c4565b6178c3919061850f565b90505b9151835183169219169190911790915250565b606060006178e78484613dc5565b8051602080830151604051939450617901939091016196e7565b60405160208183030381529060405291505092915050565b815181516000919081111561792c575081515b6020808501519084015160005b838110156179e557825182518082146179b55760001960208710156179945760018461796689602061850f565b61797091906193aa565b61797b9060086195c6565b6179869060026196c4565b617990919061850f565b1990505b81811683821681810391146179b25797506138fc9650505050505050565b50505b6179c06020866193aa565b94506179cd6020856193aa565b935050506020816179de91906193aa565b9050617939565b5084518651614473919061973f565b610c9f806200976083390190565b611eb9806200a3ff83390190565b611783806200c2b883390190565b610ee7806200da3b83390190565b610a2c806200e92283390190565b610b3f806200f34e83390190565b612072806200fe8d83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001617a99617a9e565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001617a996040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617b505783516001600160a01b0316835260209384019390920191600101617b29565b509095945050505050565b60005b83811015617b76578181015183820152602001617b5e565b50506000910152565b60008151808452617b97816020860160208601617b5b565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617ca7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617c8d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617c77848651617b7f565b6020958601959094509290920191600101617c3d565b509197505050602094850194929092019150600101617bd3565b50929695505050505050565b600081518084526020840193506020830160005b82811015617d075781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617cc7565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617ca7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617d7d6040880182617b7f565b9050602082015191508681036020880152617d988183617cb3565b965050506020938401939190910190600101617d39565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617ca7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617e11858351617b7f565b94506020938401939190910190600101617dd7565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617ca7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617ea76040870182617cb3565b9550506020938401939190910190600101617e4e565b600060208284031215617ecf57600080fd5b815180151581146139f557600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617f99577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152617fba60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061801757607f821691505b602082108103615bbe577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f82111561809a57806000526020600020601f840160051c810160208510156180775750805b601f840160051c820191505b818110156180975760008155600101618083565b50505b505050565b815167ffffffffffffffff8111156180b9576180b9617fd4565b6180cd816180c78454618003565b84618050565b6020601f82116001811461810157600083156180e95750848201515b600019600385901b1c1916600184901b178455618097565b600084815260208120601f198516915b828110156181315787850151825560209485019460019092019101618111565b508482101561814f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561817057600080fd5b5051919050565b60608152600061818a6060830186617b7f565b602083019490945250901515604090910152919050565b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a06060850152600081546181eb81618003565b8060a0880152600182166000811461820a576001811461824457618278565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b8901019350618278565b84600052602060002060005b8381101561826f5781548a820160c00152600190910190602001618250565b890160c0019450505b50505060038401546080860152809250505092915050565b60c0815260006182a360c0830189617b7f565b62ffffff881660208401526001600160a01b038716604084015282810360608401526182cf8187617b7f565b905060ff8516608084015282810360a08401526182ec81856181a1565b9998505050505050505050565b6001600160a01b0384168152826020820152606060408201526000615ba46060830184617b7f565b60c08152600061833460c0830189617b7f565b8760208401526001600160a01b0387166040840152828103606084015261835b8187617b7f565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a06040820152600061839e60a0830186617b7f565b6060830194909452509015156080909101529392505050565b8281526040602082015260006152f26040830184617b7f565b6001600160a01b03831681526040602082015260006152f26040830184617b7f565b6040516060810167ffffffffffffffff8111828210171561841557618415617fd4565b60405290565b60008067ffffffffffffffff84111561843657618436617fd4565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561846557618465617fd4565b60405283815290508082840185101561847d57600080fd5b6156c1846020830185617b5b565b600082601f83011261849c57600080fd5b6139f58383516020850161841b565b6000602082840312156184bd57600080fd5b815167ffffffffffffffff8111156184d457600080fd5b6138f88482850161848b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156138fc576138fc6184e0565b6101208152600061853761012083018b617b7f565b6001600160a01b038a16602084015288604084015287606084015286608084015282810360a084015261856a8187617b7f565b855160c08501526020860151151560e08501529050828103610100840152613be881856181a1565b60e0815260006185a560e0830189617b7f565b8760208401526001600160a01b038716604084015282810360608401526185cc8187617b7f565b855160808501526020860151151560a0850152905082810360c08401526182ec81856181a1565b60a08152600061860660a0830187617b7f565b82810360208401526186188187617b7f565b85516040850152602086015115156060850152905082810360808401526177a981856181a1565b60a08152600061865260a0830188617b7f565b6001600160a01b038716602084015282810360408401526186738187617b7f565b9050846060840152828103608084015261868d81856181a1565b98975050505050505050565b60a0815260006186ac60a0830188617b7f565b6001600160a01b038716602084015282810360408401526186cd8187617b7f565b905060ff85166060840152828103608084015261868d81856181a1565b60a0815260006186fd60a0830188617b7f565b6001600160a01b0387166020840152828103604084015261871e8187617b7f565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161877081601a850160208801617b5b565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516187ad81601c840160208801617b5b565b01601c01949350505050565b6020815260006139f56020830184617b7f565b6000602082840312156187de57600080fd5b81516001600160a01b03811681146139f557600080fd5b60008351618807818460208801617b5b565b83519083019061881b818360208801617b5b565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161885c81601a850160208801617b5b565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618899816033840160208801617b5b565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006139f56080830184617b7f565b60006020828403121561892857600080fd5b815167ffffffffffffffff81111561893f57600080fd5b8201601f8101841361895057600080fd5b6138f88482516020840161841b565b60008551618971818460208a01617b5b565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516189ab816001840160208a01617b5b565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516189e9816002840160208901617b5b565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618a2b816002840160208801617b5b565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618a766040830184617b7f565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618aed81601f850160208701617b5b565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618b5a6040830184617b7f565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000618bac6040830184617b7f565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618c23816014850160208701617b5b565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000618c6a6040830185617b7f565b82810360208401526139f18185617b7f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618ce3816001850160208701617b5b565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618d29818460208701617b5b565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618ddc81604b850160208701617b5b565b91909101604b0192915050565b600060ff821660ff8103618dff57618dff6184e0565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618e66816029850160208701617b5b565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006139f56080830184617b7f565b600060208284031215618ecc57600080fd5b815167ffffffffffffffff811115618ee357600080fd5b820160608185031215618ef557600080fd5b618efd6183f2565b81518060030b8114618f0e57600080fd5b8152602082015167ffffffffffffffff811115618f2a57600080fd5b618f368682850161848b565b602083015250604082015167ffffffffffffffff811115618f5657600080fd5b618f628682850161848b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618fce816021850160208701617b5b565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516191ba816021850160208801617b5b565b7f2720696e206f75747075743a200000000000000000000000000000000000000060219184019182015283516191f781602e840160208801617b5b565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618e66816029850160208701617b5b565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a0000000000000000000000000000000000000000000000000000000000006020820152600082516192bf816022850160208701617b5b565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161930481600e850160208701617b5b565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b808201808211156138fc576138fc6184e0565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516193f5816018850160208801617b5b565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161943281601c840160208801617b5b565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619538818460208701617b5b565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161959f81601c850160208701617b5b565b91909101601c0192915050565b600060001982036195bf576195bf6184e0565b5060010190565b80820281158282048414176138fc576138fc6184e0565b6001815b6001841115619618578085048111156195fc576195fc6184e0565b600184161561960a57908102905b60019390931c9280026195e1565b935093915050565b60008261962f575060016138fc565b8161963c575060006138fc565b8160018114619652576002811461965c57619678565b60019150506138fc565b60ff84111561966d5761966d6184e0565b50506001821b6138fc565b5060208310610133831016604e8410600b841016171561969b575081810a6138fc565b6196a860001984846195dd565b80600019048211156196bc576196bc6184e0565b029392505050565b60006139f58383619620565b6000816196df576196df6184e0565b506000190190565b600083516196f9818460208801617b5b565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619733816001840160208801617b5b565b01600101949350505050565b8181036000831280158383131683831282161715616cb957616cb96184e056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a003360a060405234801561001057600080fd5b50604051611eb9380380611eb983398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611e998339815191528261014c565b50610143600080516020611e998339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b608051611c22610277600039600081816101ca01528181610597015281816105f901528181610a280152610a8a0152611c226000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806385f438c1116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103fc578063e63ab1e91461040f578063eab103df1461043657600080fd5b8063d547741f146103b3578063d936547e146103c6578063d9caed12146103e957600080fd5b80639b19251a116100bd5780639b19251a14610385578063a217fddf14610398578063c709ab6e146103a057600080fd5b806385f438c11461030557806391d148541461032c5780639a5904271461037257600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102d25780635c975abb146102f25780638456cb59146102fd57600080fd5b806336568abe146102905780633f4ba83a146102a3578063570618e1146102ab57600080fd5b8063248a9ca311610176578063248a9ca314610226578063252f07bf146102585780632f2ff15d1461027d57600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610211575b600080fd5b6101b06101ab3660046115ca565b610449565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b61022461021f366004611677565b6104e2565b005b61024a6102343660046116ea565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61022461028b366004611703565b6106e3565b61022461029e366004611703565b61070f565b61022461076d565b61024a7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff166101b0565b6102246107a2565b61024a7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b061033a366004611703565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610224610380366004611733565b6107d4565b610224610393366004611733565b6108a2565b61024a600081565b6102246103ae366004611750565b610973565b6102246103c1366004611703565b610b79565b6101b06103d4366004611733565b60036020526000908152604090205460ff1681565b6102246103f73660046117f3565b610b9f565b61022461040a366004611834565b610ccb565b61024a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102246104443660046118d3565b610f2b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104dc57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104ea610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461051481610fc4565b61051c610fce565b73ffffffffffffffffffffffffffffffffffffffff851660009081526003602052604090205460ff1661057b576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bc73ffffffffffffffffffffffffffffffffffffffff86167f00000000000000000000000000000000000000000000000000000000000000008661100d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106369088908a90899089908990600401611939565b600060405180830381600087803b15801561065057600080fd5b505af1158015610664573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d58686866040516106c993929190611996565b60405180910390a3506106dc6001600055565b5050505050565b600082815260016020819052604090912001546106ff81610fc4565b610709838361108e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461075e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610768828261113b565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61079781610fc4565b61079f6111dc565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107cc81610fc4565b61079f61123b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107fe81610fc4565b73ffffffffffffffffffffffffffffffffffffffff821661084b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6108cc81610fc4565b73ffffffffffffffffffffffffffffffffffffffff8216610919576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61097b610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109a581610fc4565b6109ad610fce565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610a0c576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a4d73ffffffffffffffffffffffffffffffffffffffff87167f00000000000000000000000000000000000000000000000000000000000000008761100d565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610ac99089908b908a908a908a908a90600401611a77565b600060405180830381600087803b158015610ae357600080fd5b505af1158015610af7573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b87878787604051610b5e9493929190611ae8565b60405180910390a350610b716001600055565b505050505050565b60008281526001602081905260409091200154610b9581610fc4565b610709838361113b565b610ba7610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610bd181610fc4565b610bd9610fce565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205460ff16610c38576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5973ffffffffffffffffffffffffffffffffffffffff8416858461100d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610cb891815260200190565b60405180910390a3506107686001600055565b610cd3610f81565b610cdb610fce565b60045474010000000000000000000000000000000000000000900460ff16610d2f576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610d8e576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8616906370a0823190602401602060405180830381865afa158015610dfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1f9190611b14565b9050610e4373ffffffffffffffffffffffffffffffffffffffff8616333087611278565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efb9190611b14565b610f059190611b2d565b8787604051610f18959493929190611b67565b60405180910390a250610b716001600055565b6000610f3681610fc4565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610fbd576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61079f81336112be565b60025460ff161561100b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261076891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061134f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661113357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104dc565b5060006104dc565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561113357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104dc565b6111e46113e5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611243610fce565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112113390565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526107099186918216906323b872dd90608401611047565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661134b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b600061137173ffffffffffffffffffffffffffffffffffffffff841683611421565b905080516000141580156113965750808060200190518101906113949190611ba0565b155b15610768576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401611342565b60025460ff1661100b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061142f83836000611436565b9392505050565b606081471015611474576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611342565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161149d9190611bbd565b60006040518083038185875af1925050503d80600081146114da576040519150601f19603f3d011682016040523d82523d6000602084013e6114df565b606091505b50915091506114ef8683836114f9565b9695505050505050565b60608261150e5761150982611588565b61142f565b8151158015611532575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611581576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401611342565b508061142f565b8051156115985780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156115dc57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461142f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461079f57600080fd5b60008083601f84011261164057600080fd5b50813567ffffffffffffffff81111561165857600080fd5b60208301915083602082850101111561167057600080fd5b9250929050565b60008060008060006080868803121561168f57600080fd5b853561169a8161160c565b945060208601356116aa8161160c565b935060408601359250606086013567ffffffffffffffff8111156116cd57600080fd5b6116d98882890161162e565b969995985093965092949392505050565b6000602082840312156116fc57600080fd5b5035919050565b6000806040838503121561171657600080fd5b8235915060208301356117288161160c565b809150509250929050565b60006020828403121561174557600080fd5b813561142f8161160c565b60008060008060008060a0878903121561176957600080fd5b86356117748161160c565b955060208701356117848161160c565b945060408701359350606087013567ffffffffffffffff8111156117a757600080fd5b6117b389828a0161162e565b909450925050608087013567ffffffffffffffff8111156117d357600080fd5b87016060818a0312156117e557600080fd5b809150509295509295509295565b60008060006060848603121561180857600080fd5b83356118138161160c565b925060208401356118238161160c565b929592945050506040919091013590565b6000806000806000806080878903121561184d57600080fd5b863567ffffffffffffffff81111561186457600080fd5b61187089828a0161162e565b90975095505060208701356118848161160c565b935060408701359250606087013567ffffffffffffffff8111156118a757600080fd5b6118b389828a0161162e565b979a9699509497509295939492505050565b801515811461079f57600080fd5b6000602082840312156118e557600080fd5b813561142f816118c5565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061198b6080830184866118f0565b979650505050505050565b8381526040602082015260006119b06040830184866118f0565b95945050505050565b600081356119c68161160c565b73ffffffffffffffffffffffffffffffffffffffff168352602082013567ffffffffffffffff81168082146119fa57600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112611a3657600080fd5b820160208101903567ffffffffffffffff811115611a5357600080fd5b803603821315611a6257600080fd5b606060408601526119b06060860182846118f0565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a060608201526000611ac960a0830185876118f0565b8281036080840152611adb81856119b9565b9998505050505050505050565b848152606060208201526000611b026060830185876118f0565b828103604084015261198b81856119b9565b600060208284031215611b2657600080fd5b5051919050565b818103818111156104dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606081526000611b7b6060830187896118f0565b8560208401528281036040840152611b948185876118f0565b98975050505050505050565b600060208284031215611bb257600080fd5b815161142f816118c5565b6000825160005b81811015611bde5760208186018101518583015201611bc4565b50600092019182525091905056fea264697066735822122029d8a02c5c60bae7d404d08786de2b2dd6b37e11d10fa76c968c7809ff06f3b864736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161178338038061178383398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516114ab6102d86000396000818161021d01528181610531015281816108290152818161099a01528181610aef0152610c110152600081816101d1015281816104a1015281816105040152818161079901526107fc01526114ab6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c578063057e0f25146101a4575b600080fd5b61018f61018a366004610fd3565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b236600461108e565b610462565b005b6101b76101c7366004611126565b6105fc565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d366004611159565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611172565b6106a1565b6101b7610291366004611172565b6106cc565b6101b7610725565b60015460ff1661018f565b6101b76102b736600461119e565b61075a565b6101b76102ca366004611159565b6108ef565b6101b76102dd366004611159565b61095d565b6101b7610a07565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611172565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611172565b610a39565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610aa1565b61049c610aab565b6104c77f00000000000000000000000000000000000000000000000000000000000000008785610aea565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610563907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161130e565b600060405180830381600087803b15801561057d57600080fd5b505af1158015610591573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c878787866040516105e1949392919061137f565b60405180910390a2506105f46001600055565b505050505050565b610604610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062e81610aa1565b610636610aab565b610641848484610aea565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161068991815260200190565b60405180910390a25061069c6001600055565b505050565b6000828152600260205260409020600101546106bc81610aa1565b6106c68383610c72565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461071b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61069c8282610d72565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074f81610aa1565b610757610e31565b50565b610762610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078c81610aa1565b610794610aab565b6107bf7f00000000000000000000000000000000000000000000000000000000000000008684610aea565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610859907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016113b6565b600060405180830381600087803b15801561087357600080fd5b505af1158015610887573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d8686866040516108d593929190611408565b60405180910390a2506108e86001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61091981610aa1565b610921610aab565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610965610aab565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109f357600080fd5b505af11580156108e8573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3181610aa1565b610757610eae565b600082815260026020526040902060010154610a5481610aa1565b6106c68383610d72565b600260005403610a9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107578133610f07565b60015460ff1615610ae8576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7c9190611422565b610b86908461143b565b1115610bbe576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d083390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e39610f97565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610eb6610aab565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e84565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f93576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ae8576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fe557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461101557600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461104057600080fd5b919050565b60008083601f84011261105757600080fd5b50813567ffffffffffffffff81111561106f57600080fd5b60208301915083602082850101111561108757600080fd5b9250929050565b60008060008060008060a087890312156110a757600080fd5b6110b08761101c565b955060208701359450604087013567ffffffffffffffff8111156110d357600080fd5b6110df89828a01611045565b90955093505060608701359150608087013567ffffffffffffffff81111561110657600080fd5b87016060818a03121561111857600080fd5b809150509295509295509295565b60008060006060848603121561113b57600080fd5b6111448461101c565b95602085013595506040909401359392505050565b60006020828403121561116b57600080fd5b5035919050565b6000806040838503121561118557600080fd5b823591506111956020840161101c565b90509250929050565b6000806000806000608086880312156111b657600080fd5b6111bf8661101c565b945060208601359350604086013567ffffffffffffffff8111156111e257600080fd5b6111ee88828901611045565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff6112678261101c565b1682526000602082013567ffffffffffffffff811680821461128857600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126112c457600080fd5b820160208101903567ffffffffffffffff8111156112e157600080fd5b8036038213156112f057600080fd5b60606040860152611305606086018284611200565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061136060a083018587611200565b82810360808401526113728185611249565b9998505050505050505050565b848152606060208201526000611399606083018587611200565b82810360408401526113ab8185611249565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ab608083018486611200565b838152604060208201526000611305604083018486611200565b60006020828403121561143457600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212208052a0b07c987cb20e29d9c7c23109b8ff8b4b966ca2e18c207a88e5b4d79d4264736f6c634300081a00336080604052348015600f57600080fd5b506001600055610ec3806100246000396000f3fe60806040526004361061006e5760003560e01c80636ed701691161004b5780636ed70169146100e0578063c5131691146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063660b9de014610097578063676cc054146100b757005b3661007557005b005b34801561008357600080fd5b50610075610092366004610724565b610148565b3480156100a357600080fd5b506100756100b2366004610760565b6101de565b6100ca6100c536600461079b565b61021a565b6040516100d79190610896565b60405180910390f35b3480156100ec57600080fd5b5061007561024d565b34801561010157600080fd5b50610075610110366004610724565b610282565b6100756101233660046109ce565b61035d565b34801561013457600080fd5b50610075610143366004610aba565b6103a1565b6101506103d6565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610419565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b7f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e338260405161020f929190610bed565b60405180910390a150565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a19392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61028a6103d6565b6000610297600285610ccc565b9050806000036102d3576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102f573ffffffffffffffffffffffffffffffffffffffff8416338484610419565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610394959493929190610d07565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103949493929190610d91565b600260005403610412576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104ae9085906104b4565b50505050565b60006104d673ffffffffffffffffffffffffffffffffffffffff84168361054f565b905080516000141580156104fb5750808060200190518101906104f99190610e54565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061055d83836000610564565b9392505050565b6060814710156105a2576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610546565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105cb9190610e71565b60006040518083038185875af1925050503d8060008114610608576040519150601f19603f3d011682016040523d82523d6000602084013e61060d565b606091505b509150915061061d868383610627565b9695505050505050565b60608261063c57610637826106b6565b61055d565b8151158015610660575073ffffffffffffffffffffffffffffffffffffffff84163b155b156106af576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610546565b508061055d565b8051156106c65780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461071f57600080fd5b919050565b60008060006060848603121561073957600080fd5b83359250610749602085016106fb565b9150610757604085016106fb565b90509250925092565b60006020828403121561077257600080fd5b813567ffffffffffffffff81111561078957600080fd5b82016060818503121561055d57600080fd5b600080600083850360408112156107b157600080fd5b60208112156107bf57600080fd5b50839250602084013567ffffffffffffffff8111156107dd57600080fd5b8401601f810186136107ee57600080fd5b803567ffffffffffffffff81111561080557600080fd5b86602082840101111561081757600080fd5b939660209190910195509293505050565b60005b8381101561084357818101518382015260200161082b565b50506000910152565b60008151808452610864816020860160208601610828565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061055d602083018461084c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561091f5761091f6108a9565b604052919050565b600082601f83011261093857600080fd5b813567ffffffffffffffff811115610952576109526108a9565b61098360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108d8565b81815284602083860101111561099857600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106f857600080fd5b803561071f816109b5565b6000806000606084860312156109e357600080fd5b833567ffffffffffffffff8111156109fa57600080fd5b610a0686828701610927565b935050602084013591506040840135610a1e816109b5565b809150509250925092565b600067ffffffffffffffff821115610a4357610a436108a9565b5060051b60200190565b600082601f830112610a5e57600080fd5b8135610a71610a6c82610a29565b6108d8565b8082825260208201915060208360051b860101925085831115610a9357600080fd5b602085015b83811015610ab0578035835260209283019201610a98565b5095945050505050565b600080600060608486031215610acf57600080fd5b833567ffffffffffffffff811115610ae657600080fd5b8401601f81018613610af757600080fd5b8035610b05610a6c82610a29565b8082825260208201915060208360051b850101925088831115610b2757600080fd5b602084015b83811015610b6957803567ffffffffffffffff811115610b4b57600080fd5b610b5a8b602083890101610927565b84525060209283019201610b2c565b509550505050602084013567ffffffffffffffff811115610b8957600080fd5b610b9586828701610a4d565b925050610757604085016109c3565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2b836106fb565b1660408201526000602083013567ffffffffffffffff8116808214610c4f57600080fd5b6060840152506040830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610c8b57600080fd5b830160208101903567ffffffffffffffff811115610ca857600080fd5b803603821315610cb757600080fd5b6060608085015261061d60a085018284610ba4565b600082610d02577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d3c60a083018661084c565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610d87578151865260209586019590910190600101610d69565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e0f85835161084c565b94506020938401939190910190600101610dd5565b505050508281036040840152610e3a8186610d55565b915050610e4b606083018415159052565b95945050505050565b600060208284031215610e6657600080fd5b815161055d816109b5565b60008251610e83818460208701610828565b919091019291505056fea2646970667358221220d537f023478b5746f5f67760e722db6f4a51db89700ac69d6ba33759b8ac342f64736f6c634300081a00336080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526001602080840182905283850192909252835191820184526000808352606084019290925260808301829052905492517f048ae42c000000000000000000000000000000000000000000000000000000008152919273ffffffffffffffffffffffffffffffffffffffff169163048ae42c916102d7918c918c918c9189918990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a081018352610321808252600182840181905282850191909152835192830184526000808452606083019390935260808201839052915492517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201526024810183905293945092909188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea2646970667358221220792a5e1e201d0b1f639959350189e03421096c54285a3cac719abddeae7c88fa64736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220f5c4cae5cc505bc5e795bca446028bb75a72680a148baa4a180dc1a1714ebe3764736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a2646970667358221220a22cbda9e976435996a96015ca2a49d3729aa533fc263f1f475deb0d42b5778264736f6c634300081a0033", + 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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"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\":\"EmptyMessage\",\"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\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrProtocol\",\"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: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5062011d48806200003e6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b61013261126e565b60405161013f9190617b0f565b60405180910390f35b6101506112d0565b60405161013f9190617bab565b610132611412565b610132611472565b6101286114d2565b61017d611d41565b60405161013f9190617d11565b610128611ec3565b61019a6126f7565b60405161013f9190617daf565b6101af6127c7565b60405161013f9190617e26565b6101286128c2565b6101af612ec0565b61019a612fbb565b6101dc61308b565b604051901515815260200161013f565b61012861315f565b610132613883565b601f546101dc9060ff1681565b602680547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602780548216611234179055602880548216615678179055602e8054909116614321179055604051610267906179f4565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055604051610331906179f4565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602854602654925190861694810194909452604484019290925290921660648201526104a6919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526138e3565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560285460265460405192939182169291169061053290617a02565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561056e573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460285460265460405193851694928316939183169216906105c990617a10565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801561060d573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556028546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156106b957600080fd5b505af11580156106cd573d6000803e3d6000fd5b50506026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561074357600080fd5b505af1158015610757573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b1580156107bd57600080fd5b505af11580156107d1573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50506023546026546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561093057600080fd5b505af1158015610944573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af11580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc9190617ebd565b506040516109e990617a1e565b604051809103906000f080158015610a05573d6000803e3d6000fd5b50602580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054602e54935190851691810191909152919092166044820152610aee919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526138e3565b602980546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602a80549092168117909155604051610b3f90617a2c565b6001600160a01b039091168152602001604051809103906000f080158015610b6b573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c2057600080fd5b505af1158015610c34573d6000803e3d6000fd5b505050506000806000604051610c4990617a3a565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610c85573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602a54604051601293600193600093849391921690610cdb90617a48565b610cea96959493929190617edf565b604051809103906000f080158015610d06573d6000803e3d6000fd5b50602d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602c546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610d9d57600080fd5b505af1158015610db1573d6000803e3d6000fd5b5050602c546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e1b57600080fd5b505af1158015610e2f573d6000803e3d6000fd5b5050602d54602e546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec79190617ebd565b50602d54602b546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190617ebd565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610fbb57600080fd5b505af1158015610fcf573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561104557600080fd5b505af1158015611059573d6000803e3d6000fd5b5050602d54602a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af11580156110cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f19190617ebd565b506028546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561117257600080fd5b505af1158015611186573d6000803e3d6000fd5b50506040805160a08101825261032180825260016020808401918252838501928352845190810190945260008085526060840185905260808401528251602f80549251151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009093166001600160a01b0392831617929092178255915160308054919093167fffffffffffffffffffffffff00000000000000000000000000000000000000009190911617909155909350915060319061125d908261809f565b506080820151816003015590505050565b606060168054806020026020016040519081016040528092919081815260200182805480156112c657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112a8575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561140957600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156113f257838290600052602060002001805461136590618003565b80601f016020809104026020016040519081016040528092919081815260200182805461139190618003565b80156113de5780601f106113b3576101008083540402835291602001916113de565b820191906000526020600020905b8154815290600101906020018083116113c157829003601f168201915b505050505081526020019060010190611346565b5050505081525050815260200190600101906112f4565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156112c6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112a8575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156112c6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112a8575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602d54602b5492517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529192602a92600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa15801561157e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a2919061815e565b6040519091506000907fe04d4f9700000000000000000000000000000000000000000000000000000000906115df90889088908890602401618177565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526025549051919350600092611678926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d546116af926207a120916001600160a01b0316908690600190602f90602401618290565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f048ae42c00000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161176c916001600160a01b03919091169060009086906004016182f9565b600060405180830381600087803b15801561178657600080fd5b505af115801561179a573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561181057600080fd5b505af1158015611824573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526118be926207a120916001600160a01b0316908d908d908d90600401618321565b600060405180830381600087803b1580156118d857600080fd5b505af11580156118ec573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561196957600080fd5b505af115801561197d573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611a0f57600080fd5b505af1158015611a23573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa9350611a6c92506001600160a01b039091169087908b908b908b90618376565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611b0257600080fd5b505af1158015611b16573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611b5b90879086906183b7565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611bd557600080fd5b505af1158015611be9573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508892611c3d92169087906004016183d0565b60006040518083038185885af1158015611c5b573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611c8491908101906184ab565b50602d54602b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d13919061815e565b9050611d37816001611d286207a1208861850f565b611d32919061850f565b613902565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156114095783829060005260206000209060020201604051806040016040529081600082018054611d9890618003565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc490618003565b8015611e115780601f10611de657610100808354040283529160200191611e11565b820191906000526020600020905b815481529060010190602001808311611df457829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611eab57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611e585790505b50505050508152505081526020019060010190611d65565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611f3f90879087908790602401618177565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602a5491517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b039093166084820152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561203157600080fd5b505af1158015612045573d6000803e3d6000fd5b5050602e5460255460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c9060340160408051601f19818403018152828252602d547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216916207a1209188918491634d8943bb916004808201926020929091908290030181865afa15801561211a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213e919061815e565b6040805180820182526001808252602082015290516121669695949392918c91602f90618522565b60405180910390a3602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156121e057600080fd5b505af11580156121f4573d6000803e3d6000fd5b5050602a546025546040805160609290921b6bffffffffffffffffffffffff1916602083015280518083036014018152602d5460748401835260016034850181815260549095015291517f7b15118b0000000000000000000000000000000000000000000000000000000081526001600160a01b039485169650637b15118b95506122929491936207a1209392909216918991602f90600401618592565b600060405180830381600087803b1580156122ac57600080fd5b505af11580156122c0573d6000803e3d6000fd5b5050602d54602e546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561232c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612350919061815e565b905061236381611d32846207a12061850f565b6020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156123dc57600080fd5b505af11580156123f0573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561248257600080fd5b505af1158015612496573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa93506124df92506001600160a01b039091169087908b908b908b90618376565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561257557600080fd5b505af1158015612589573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506125ce90879087906183b7565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561264857600080fd5b505af115801561265c573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd935088926126b092169088906004016183d0565b60006040518083038185885af11580156126ce573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611d3791908101906184ab565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561140957838290600052602060002001805461273a90618003565b80601f016020809104026020016040519081016040528092919081815260200182805461276690618003565b80156127b35780601f10612788576101008083540402835291602001916127b3565b820191906000526020600020905b81548152906001019060200180831161279657829003601f168201915b50505050508152602001906001019061271b565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156114095760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156128aa57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116128575790505b505050505081525050815260200190600101906127eb565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f97000000000000000000000000000000000000000000000000000000009061293e90879087908790602401618177565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602e5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612a1157600080fd5b505af1158015612a25573d6000803e3d6000fd5b5050602a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612ab757600080fd5b505af1158015612acb573d6000803e3d6000fd5b5050602d54602e5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039283169450911691507f306ee13f48319a123b222c69908e44dcf91abffc20cacc502e3cf5a4ff23e0e49060340160408051601f198184030181528282018252600180845260208401529051612b55928791602f906185f3565b60405180910390a3602a546025546040805160609290921b6bffffffffffffffffffffffff19166020830152805180830360140181526034830191829052602d547f1cb5ea75000000000000000000000000000000000000000000000000000000009092526001600160a01b0393841693631cb5ea7593612be59391909116908690600190602f9060380161863f565b600060405180830381600087803b158015612bff57600080fd5b505af1158015612c13573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612c9057600080fd5b505af1158015612ca4573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612d3657600080fd5b505af1158015612d4a573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612d8f90859085906183b7565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e0957600080fd5b505af1158015612e1d573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd93508692612e7192169086906004016183d0565b60006040518083038185885af1158015612e8f573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052612eb891908101906184ab565b505050505050565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156114095760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612fa357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612f505790505b50505050508152505081526020019060010190612ee4565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611409578382906000526020600020018054612ffe90618003565b80601f016020809104026020016040519081016040528092919081815260200182805461302a90618003565b80156130775780601f1061304c57610100808354040283529160200191613077565b820191906000526020600020905b81548152906001019060200180831161305a57829003601f168201915b505050505081526020019060010190612fdf565b60085460009060ff16156130a3575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613134573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613158919061815e565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f9700000000000000000000000000000000000000000000000000000000906131db90879087908790602401618177565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526025549051919350600092613274926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d546132a8926001600160a01b03909116908590600190602f90602401618699565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1cb5ea7500000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613365916001600160a01b03919091169060009086906004016182f9565b600060405180830381600087803b15801561337f57600080fd5b505af1158015613393573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561340957600080fd5b505af115801561341d573d6000803e3d6000fd5b5050602b5460255460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637a34d8bb915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526134b4926001600160a01b03909116908b908b908b906004016186ea565b600060405180830381600087803b1580156134ce57600080fd5b505af11580156134e2573d6000803e3d6000fd5b50506020546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561355f57600080fd5b505af1158015613573573d6000803e3d6000fd5b50506025546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561360557600080fd5b505af1158015613619573d6000803e3d6000fd5b50506020546040517f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa935061366292506001600160a01b039091169086908a908a908a90618376565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156136f857600080fd5b505af115801561370c573d6000803e3d6000fd5b50506025546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f915061375190869086906183b7565b60405180910390a26028546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156137cb57600080fd5b505af11580156137df573d6000803e3d6000fd5b50506020546025546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631cff79cd9350879261383392169087906004016183d0565b60006040518083038185885af1158015613851573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261387a91908101906184ab565b50505050505050565b606060158054806020026020016040519081016040528092919081815260200182805480156112c6576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112a8575050505050905090565b60006138ed617a56565b6138f8848483613981565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561396d57600080fd5b505afa158015612eb8573d6000803e3d6000fd5b60008061398e85846139fc565b90506139f16040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016139dc9291906183d0565b60405160208183030381529060405285613a08565b9150505b9392505050565b60006139f58383613a36565b60c08101515160009015613a2c57613a2584848460c00151613a51565b90506139f5565b613a258484613bf7565b6000613a428383613ce2565b6139f583836020015184613a08565b600080613a5c613cf2565b90506000613a6a8683613dc5565b90506000613a81826060015183602001518561426b565b90506000613a918383898961447d565b90506000613a9e826152fa565b602081015181519192509060030b15613b1157898260400151604051602001613ac8929190618738565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613b08916004016187b9565b60405180910390fd5b6000613b546040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016154c9565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613ba79084906004016187b9565b602060405180830381865afa158015613bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be891906187cc565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613c4c9087906004016187b9565b600060405180830381865afa158015613c69573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613c9191908101906184ab565b90506000613cbf8285604051602001613cab9291906187f5565b6040516020818303038152906040526156c9565b90506001600160a01b0381166138f8578484604051602001613ac8929190618824565b613cee828260006156dc565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613d799084906004016188cf565b600060405180830381865afa158015613d96573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613dbe9190810190618916565b9250505090565b613df76040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613e426040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613e4b856157df565b60208201526000613e5b86615bc4565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613e9d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ec59190810190618916565b86838560200151604051602001613edf949392919061895f565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190613f379085906004016187b9565b600060405180830381865afa158015613f54573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f7c9190810190618916565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690613fc4908490600401618a63565b602060405180830381865afa158015613fe1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140059190617ebd565b61401a5781604051602001613ac89190618ab5565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061405f908490600401618b47565b600060405180830381865afa15801561407c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526140a49190810190618916565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906140eb908490600401618b99565b602060405180830381865afa158015614108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061412c9190617ebd565b156141c1576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614176908490600401618b99565b600060405180830381865afa158015614193573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141bb9190810190618916565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016141e69190618beb565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614212929190618c57565b600060405180830381865afa15801561422f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142579190810190618916565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816142875790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106142e7576142e7618c7c565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061433b5761433b618c7c565b6020026020010181905250846040516020016143579190618cab565b6040516020818303038152906040528160028151811061437957614379618c7c565b6020026020010181905250826040516020016143959190618d17565b604051602081830303815290604052816003815181106143b7576143b7618c7c565b602002602001018190525060006143cd826152fa565b602080820151604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000818501908152825180840184526000808252908601528251808401909352905182529281019290925291925061445e9060408051808201825260008082526020918201528151808301909252845182528085019082015290615e47565b6144735785604051602001613ac89190618d58565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156144cd565b511590565b61464157826020015115614589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613b08565b8260c0015115614641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613b08565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161465a57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806146b590618de9565b935060ff16815181106146ca576146ca618c7c565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161471b9190618e08565b60405160208183030381529060405282828061473690618de9565b935060ff168151811061474b5761474b618c7c565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061479890618de9565b935060ff16815181106147ad576147ad618c7c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806147fa90618de9565b935060ff168151811061480f5761480f618c7c565b6020026020010181905250876020015182828061482b90618de9565b935060ff168151811061484057614840618c7c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061488d90618de9565b935060ff16815181106148a2576148a2618c7c565b6020908102919091010152875182826148ba81618de9565b935060ff16815181106148cf576148cf618c7c565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061491c90618de9565b935060ff168151811061493157614931618c7c565b602002602001018190525061494546615ea8565b828261495081618de9565b935060ff168151811061496557614965618c7c565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806149b290618de9565b935060ff16815181106149c7576149c7618c7c565b6020026020010181905250868282806149df90618de9565b935060ff16815181106149f4576149f4618c7c565b6020908102919091010152855115614b1b5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614a4581618de9565b935060ff1681518110614a5a57614a5a618c7c565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614aaa9089906004016187b9565b600060405180830381865afa158015614ac7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614aef9190810190618916565b8282614afa81618de9565b935060ff1681518110614b0f57614b0f618c7c565b60200260200101819052505b846020015115614beb5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614b6481618de9565b935060ff1681518110614b7957614b79618c7c565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614bc690618de9565b935060ff1681518110614bdb57614bdb618c7c565b6020026020010181905250614db2565b614c236144c88660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614cb65760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614c6681618de9565b935060ff1681518110614c7b57614c7b618c7c565b60200260200101819052508460a00151604051602001614c9b9190618cab565b604051602081830303815290604052828280614bc690618de9565b8460c00151158015614cf9575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614cf790511590565b155b15614db25760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614d3d81618de9565b935060ff1681518110614d5257614d52618c7c565b6020026020010181905250614d6688615f48565b604051602001614d769190618cab565b604051602081830303815290604052828280614d9190618de9565b935060ff1681518110614da657614da6618c7c565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614de690511590565b614e7b5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614e2981618de9565b935060ff1681518110614e3e57614e3e618c7c565b60200260200101819052508460400151828280614e5a90618de9565b935060ff1681518110614e6f57614e6f618c7c565b60200260200101819052505b606085015115614f9c5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614ec481618de9565b935060ff1681518110614ed957614ed9618c7c565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015614f48573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614f709190810190618916565b8282614f7b81618de9565b935060ff1681518110614f9057614f90618c7c565b60200260200101819052505b60e085015151156150435760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282614fe681618de9565b935060ff1681518110614ffb57614ffb618c7c565b60200260200101819052506150178560e0015160000151615ea8565b828261502281618de9565b935060ff168151811061503757615037618c7c565b60200260200101819052505b60e085015160200151156150ed5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261509081618de9565b935060ff16815181106150a5576150a5618c7c565b60200260200101819052506150c18560e0015160200151615ea8565b82826150cc81618de9565b935060ff16815181106150e1576150e1618c7c565b60200260200101819052505b60e085015160400151156151975760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261513a81618de9565b935060ff168151811061514f5761514f618c7c565b602002602001018190525061516b8560e0015160400151615ea8565b828261517681618de9565b935060ff168151811061518b5761518b618c7c565b60200260200101819052505b60e085015160600151156152415760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826151e481618de9565b935060ff16815181106151f9576151f9618c7c565b60200260200101819052506152158560e0015160600151615ea8565b828261522081618de9565b935060ff168151811061523557615235618c7c565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561525f5761525f617fd4565b60405190808252806020026020018201604052801561529257816020015b606081526020019060019003908161527d5790505b50905060005b8260ff168160ff1610156152eb57838160ff16815181106152bb576152bb618c7c565b6020026020010151828260ff16815181106152d8576152d8618c7c565b6020908102919091010152600101615298565b5093505050505b949350505050565b6153216040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916153a791869101618e73565b600060405180830381865afa1580156153c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526153ec9190810190618916565b905060006153fa8683616a37565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161542a9190617daf565b6000604051808303816000875af1158015615449573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154719190810190618eba565b805190915060030b1580159061548a5750602081015151155b80156154995750604081015151155b1561447357816000815181106154b1576154b1618c7c565b6020026020010151604051602001613ac89190618f70565b606060006154fe8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506155359082905b90616b8c565b156156925760006155b2826155ac846155a66155788a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616bb3565b90616c15565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615616908290616b8c565b1561568057604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261567d905b8290616c9a565b90505b61568981616cc0565b925050506139f5565b82156156ab578484604051602001613ac892919061915c565b50506040805160208101909152600081526139f5565b509392505050565b6000808251602084016000f09392505050565b8160a00151156156eb57505050565b60006156f8848484616d29565b90506000615705826152fa565b602081015181519192509060030b1580156157a15750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526157a19060408051808201825260008082526020918201528151808301909252845182528085019082015261552f565b156157ae57505050505050565b604082015151156157ce578160400151604051602001613ac89190619203565b80604051602001613ac89190619261565b606060006158148360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615879905b8290615e47565b156158e857604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526139f5906158e39083906172c4565b616cc0565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261594a905b829061734e565b600103615a1757604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159b090615676565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526139f5906158e3905b8390616c9a565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a7690615872565b15615bad57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615ade9083906173e8565b905060008160018351615af1919061850f565b81518110615b0157615b01618c7c565b60200260200101519050615ba46158e3615b776040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906172c4565b95945050505050565b82604051602001613ac891906192cc565b50919050565b60606000615bf98360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615c5b90615872565b15615c69576139f581616cc0565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615cc890615943565b600103615d3257604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526139f5906158e390615a10565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615d9190615872565b15615bad57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615df99083906173e8565b9050600181511115615e35578060028251615e14919061850f565b81518110615e2457615e24618c7c565b602002602001015192505050919050565b5082604051602001613ac891906192cc565b805182516000911115615e5c575060006138fc565b81518351602085015160009291615e72916193aa565b615e7c919061850f565b905082602001518103615e935760019150506138fc565b82516020840151819020912014905092915050565b60606000615eb58361748d565b600101905060008167ffffffffffffffff811115615ed557615ed5617fd4565b6040519080825280601f01601f191660200182016040528015615eff576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615f0957509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091615fd4905b829061756f565b1561601457505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261607390615fcd565b156160b357505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261611290615fcd565b1561615257505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161b190615fcd565b806162165750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261621690615fcd565b1561625657505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162b590615fcd565b8061631a5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261631a90615fcd565b1561635a57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163b990615fcd565b8061641e5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261641e90615fcd565b1561645e57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164bd90615fcd565b806165225750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261652290615fcd565b1561656257505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165c190615fcd565b1561660157505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261666090615fcd565b156166a057505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166ff90615fcd565b1561673f57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261679e90615fcd565b156167de57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261683d90615fcd565b1561687d57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168dc90615fcd565b806169415750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261694190615fcd565b1561698157505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169e090615fcd565b15616a2057505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613ac892906020016193bd565b60608060005b8451811015616ac25781858281518110616a5957616a59618c7c565b6020026020010151604051602001616a729291906187f5565b604051602081830303815290604052915060018551616a91919061850f565b8114616aba5781604051602001616aa89190619526565b60405160208183030381529060405291505b600101616a3d565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616adb5790505090508381600081518110616b0657616b06618c7c565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616b5a57616b5a618c7c565b60200260200101819052508181600281518110616b7957616b79618c7c565b6020908102919091010152949350505050565b6020808301518351835192840151600093616baa9291849190617583565b14159392505050565b60408051808201909152600080825260208201526000616be58460000151856020015185600001518660200151617694565b9050836020015181616bf7919061850f565b84518590616c0690839061850f565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616c3a5750816138fc565b6020808301519084015160019114616c615750815160208481015190840151829020919020145b8015616c9257825184518590616c7890839061850f565b9052508251602085018051616c8e9083906193aa565b9052505b509192915050565b6040805180820190915260008082526020820152616cb98383836177b4565b5092915050565b60606000826000015167ffffffffffffffff811115616ce157616ce1617fd4565b6040519080825280601f01601f191660200182016040528015616d0b576020820181803683370190505b5090506000602082019050616cb9818560200151866000015161785f565b60606000616d35613cf2565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616d5257905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616dad90618de9565b935060ff1681518110616dc257616dc2618c7c565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616e139190619567565b604051602081830303815290604052828280616e2e90618de9565b935060ff1681518110616e4357616e43618c7c565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616e9090618de9565b935060ff1681518110616ea557616ea5618c7c565b602002602001018190525082604051602001616ec19190618d17565b604051602081830303815290604052828280616edc90618de9565b935060ff1681518110616ef157616ef1618c7c565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280616f3e90618de9565b935060ff1681518110616f5357616f53618c7c565b6020026020010181905250616f6887846178d9565b8282616f7381618de9565b935060ff1681518110616f8857616f88618c7c565b6020908102919091010152855151156170345760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282616fda81618de9565b935060ff1681518110616fef57616fef618c7c565b60200260200101819052506170088660000151846178d9565b828261701381618de9565b935060ff168151811061702857617028618c7c565b60200260200101819052505b8560800151156170a25760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261707d81618de9565b935060ff168151811061709257617092618c7c565b6020026020010181905250617108565b84156171085760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826170e781618de9565b935060ff16815181106170fc576170fc618c7c565b60200260200101819052505b604086015151156171a45760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261715281618de9565b935060ff168151811061716757617167618c7c565b6020026020010181905250856040015182828061718390618de9565b935060ff168151811061719857617198618c7c565b60200260200101819052505b85606001511561720e5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826171ed81618de9565b935060ff168151811061720257617202618c7c565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561722c5761722c617fd4565b60405190808252806020026020018201604052801561725f57816020015b606081526020019060019003908161724a5790505b50905060005b8260ff168160ff1610156172b857838160ff168151811061728857617288618c7c565b6020026020010151828260ff16815181106172a5576172a5618c7c565b6020908102919091010152600101617265565b50979650505050505050565b60408051808201909152600080825260208201528151835110156172e95750816138fc565b815183516020850151600092916172ff916193aa565b617309919061850f565b6020840151909150600190821461732a575082516020840151819020908220145b80156173455783518551869061734190839061850f565b9052505b50929392505050565b60008082600001516173728560000151866020015186600001518760200151617694565b61737c91906193aa565b90505b8351602085015161739091906193aa565b8111616cb957816173a0816195ac565b92505082600001516173d78560200151836173bb919061850f565b86516173c7919061850f565b8386600001518760200151617694565b6173e191906193aa565b905061737f565b606060006173f6848461734e565b6174019060016193aa565b67ffffffffffffffff81111561741957617419617fd4565b60405190808252806020026020018201604052801561744c57816020015b60608152602001906001900390816174375790505b50905060005b81518110156156c1576174686158e38686616c9a565b82828151811061747a5761747a618c7c565b6020908102919091010152600101617452565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106174d6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617502576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061752057662386f26fc10000830492506010015b6305f5e1008310617538576305f5e100830492506008015b612710831061754c57612710830492506004015b6064831061755e576064830492506002015b600a83106138fc5760010192915050565b600061757b8383617919565b159392505050565b60008085841161768a576020841161763657600084156175ce5760016175aa86602061850f565b6175b59060086195c6565b6175c09060026196c4565b6175ca919061850f565b1990505b83518116856175dd89896193aa565b6175e7919061850f565b805190935082165b8181146176215787841161760957879450505050506152f2565b83617613816196d0565b9450508284511690506175ef565b61762b87856193aa565b9450505050506152f2565b838320617643858861850f565b61764d90876193aa565b91505b858210617688578482208082036176755761766b86846193aa565b93505050506152f2565b61768060018461850f565b925050617650565b505b5092949350505050565b6000838186851161779f576020851161774e57600085156176e05760016176bc87602061850f565b6176c79060086195c6565b6176d29060026196c4565b6176dc919061850f565b1990505b845181166000876176f18b8b6193aa565b6176fb919061850f565b855190915083165b828114617740578186106177285761771b8b8b6193aa565b96505050505050506152f2565b85617732816195ac565b965050838651169050617703565b8596505050505050506152f2565b508383206000905b617760868961850f565b821161779d5785832080820361777c57839450505050506152f2565b6177876001856193aa565b9350508180617795906195ac565b925050617756565b505b6177a987876193aa565b979650505050505050565b604080518082019091526000808252602082015260006177e68560000151866020015186600001518760200151617694565b602080870180519186019190915251909150617802908261850f565b83528451602086015161781591906193aa565b81036178245760008552617856565b8351835161783291906193aa565b8551869061784190839061850f565b905250835161785090826193aa565b60208601525b50909392505050565b6020811061789757815183526178766020846193aa565b92506178836020836193aa565b915061789060208261850f565b905061785f565b60001981156178c65760016178ad83602061850f565b6178b9906101006196c4565b6178c3919061850f565b90505b9151835183169219169190911790915250565b606060006178e78484613dc5565b8051602080830151604051939450617901939091016196e7565b60405160208183030381529060405291505092915050565b815181516000919081111561792c575081515b6020808501519084015160005b838110156179e557825182518082146179b55760001960208710156179945760018461796689602061850f565b61797091906193aa565b61797b9060086195c6565b6179869060026196c4565b617990919061850f565b1990505b81811683821681810391146179b25797506138fc9650505050505050565b50505b6179c06020866193aa565b94506179cd6020856193aa565b935050506020816179de91906193aa565b9050617939565b5084518651614473919061973f565b610c9f806200976083390190565b611c7f806200a3ff83390190565b6117aa806200c07e83390190565b610f0e806200d82883390190565b610a2c806200e73683390190565b610b3f806200f16283390190565b612072806200fca183390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001617a99617a9e565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001617a996040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617b505783516001600160a01b0316835260209384019390920191600101617b29565b509095945050505050565b60005b83811015617b76578181015183820152602001617b5e565b50506000910152565b60008151808452617b97816020860160208601617b5b565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617ca7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617c8d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617c77848651617b7f565b6020958601959094509290920191600101617c3d565b509197505050602094850194929092019150600101617bd3565b50929695505050505050565b600081518084526020840193506020830160005b82811015617d075781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617cc7565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617ca7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617d7d6040880182617b7f565b9050602082015191508681036020880152617d988183617cb3565b965050506020938401939190910190600101617d39565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617ca7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617e11858351617b7f565b94506020938401939190910190600101617dd7565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617ca7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617ea76040870182617cb3565b9550506020938401939190910190600101617e4e565b600060208284031215617ecf57600080fd5b815180151581146139f557600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610617f99577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152617fba60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061801757607f821691505b602082108103615bbe577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f82111561809a57806000526020600020601f840160051c810160208510156180775750805b601f840160051c820191505b818110156180975760008155600101618083565b50505b505050565b815167ffffffffffffffff8111156180b9576180b9617fd4565b6180cd816180c78454618003565b84618050565b6020601f82116001811461810157600083156180e95750848201515b600019600385901b1c1916600184901b178455618097565b600084815260208120601f198516915b828110156181315787850151825560209485019460019092019101618111565b508482101561814f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561817057600080fd5b5051919050565b60608152600061818a6060830186617b7f565b602083019490945250901515604090910152919050565b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a06060850152600081546181eb81618003565b8060a0880152600182166000811461820a576001811461824457618278565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b8901019350618278565b84600052602060002060005b8381101561826f5781548a820160c00152600190910190602001618250565b890160c0019450505b50505060038401546080860152809250505092915050565b60c0815260006182a360c0830189617b7f565b62ffffff881660208401526001600160a01b038716604084015282810360608401526182cf8187617b7f565b905060ff8516608084015282810360a08401526182ec81856181a1565b9998505050505050505050565b6001600160a01b0384168152826020820152606060408201526000615ba46060830184617b7f565b60c08152600061833460c0830189617b7f565b8760208401526001600160a01b0387166040840152828103606084015261835b8187617b7f565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a06040820152600061839e60a0830186617b7f565b6060830194909452509015156080909101529392505050565b8281526040602082015260006152f26040830184617b7f565b6001600160a01b03831681526040602082015260006152f26040830184617b7f565b6040516060810167ffffffffffffffff8111828210171561841557618415617fd4565b60405290565b60008067ffffffffffffffff84111561843657618436617fd4565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561846557618465617fd4565b60405283815290508082840185101561847d57600080fd5b6156c1846020830185617b5b565b600082601f83011261849c57600080fd5b6139f58383516020850161841b565b6000602082840312156184bd57600080fd5b815167ffffffffffffffff8111156184d457600080fd5b6138f88482850161848b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156138fc576138fc6184e0565b6101208152600061853761012083018b617b7f565b6001600160a01b038a16602084015288604084015287606084015286608084015282810360a084015261856a8187617b7f565b855160c08501526020860151151560e08501529050828103610100840152613be881856181a1565b60e0815260006185a560e0830189617b7f565b8760208401526001600160a01b038716604084015282810360608401526185cc8187617b7f565b855160808501526020860151151560a0850152905082810360c08401526182ec81856181a1565b60a08152600061860660a0830187617b7f565b82810360208401526186188187617b7f565b85516040850152602086015115156060850152905082810360808401526177a981856181a1565b60a08152600061865260a0830188617b7f565b6001600160a01b038716602084015282810360408401526186738187617b7f565b9050846060840152828103608084015261868d81856181a1565b98975050505050505050565b60a0815260006186ac60a0830188617b7f565b6001600160a01b038716602084015282810360408401526186cd8187617b7f565b905060ff85166060840152828103608084015261868d81856181a1565b60a0815260006186fd60a0830188617b7f565b6001600160a01b0387166020840152828103604084015261871e8187617b7f565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161877081601a850160208801617b5b565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516187ad81601c840160208801617b5b565b01601c01949350505050565b6020815260006139f56020830184617b7f565b6000602082840312156187de57600080fd5b81516001600160a01b03811681146139f557600080fd5b60008351618807818460208801617b5b565b83519083019061881b818360208801617b5b565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161885c81601a850160208801617b5b565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618899816033840160208801617b5b565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006139f56080830184617b7f565b60006020828403121561892857600080fd5b815167ffffffffffffffff81111561893f57600080fd5b8201601f8101841361895057600080fd5b6138f88482516020840161841b565b60008551618971818460208a01617b5b565b7f2f0000000000000000000000000000000000000000000000000000000000000090830190815285516189ab816001840160208a01617b5b565b7f2f000000000000000000000000000000000000000000000000000000000000006001929091019182015284516189e9816002840160208901617b5b565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618a2b816002840160208801617b5b565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618a766040830184617b7f565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618aed81601f850160208701617b5b565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618b5a6040830184617b7f565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000618bac6040830184617b7f565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618c23816014850160208701617b5b565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000618c6a6040830185617b7f565b82810360208401526139f18185617b7f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618ce3816001850160208701617b5b565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618d29818460208701617b5b565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618ddc81604b850160208701617b5b565b91909101604b0192915050565b600060ff821660ff8103618dff57618dff6184e0565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618e66816029850160208701617b5b565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006139f56080830184617b7f565b600060208284031215618ecc57600080fd5b815167ffffffffffffffff811115618ee357600080fd5b820160608185031215618ef557600080fd5b618efd6183f2565b81518060030b8114618f0e57600080fd5b8152602082015167ffffffffffffffff811115618f2a57600080fd5b618f368682850161848b565b602083015250604082015167ffffffffffffffff811115618f5657600080fd5b618f628682850161848b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251618fce816021850160208701617b5b565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516191ba816021850160208801617b5b565b7f2720696e206f75747075743a200000000000000000000000000000000000000060219184019182015283516191f781602e840160208801617b5b565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618e66816029850160208701617b5b565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a0000000000000000000000000000000000000000000000000000000000006020820152600082516192bf816022850160208701617b5b565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161930481600e850160208701617b5b565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b808201808211156138fc576138fc6184e0565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516193f5816018850160208801617b5b565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161943281601c840160208801617b5b565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619538818460208701617b5b565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161959f81601c850160208701617b5b565b91909101601c0192915050565b600060001982036195bf576195bf6184e0565b5060010190565b80820281158282048414176138fc576138fc6184e0565b6001815b6001841115619618578085048111156195fc576195fc6184e0565b600184161561960a57908102905b60019390931c9280026195e1565b935093915050565b60008261962f575060016138fc565b8161963c575060006138fc565b8160018114619652576002811461965c57619678565b60019150506138fc565b60ff84111561966d5761966d6184e0565b50506001821b6138fc565b5060208310610133831016604e8410600b841016171561969b575081810a6138fc565b6196a860001984846195dd565b80600019048211156196bc576196bc6184e0565b029392505050565b60006139f58383619620565b6000816196df576196df6184e0565b506000190190565b600083516196f9818460208801617b5b565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619733816001840160208801617b5b565b01600101949350505050565b8181036000831280158383131683831282161715616cb957616cb96184e056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a003360a060405234801561001057600080fd5b50604051611c7f380380611c7f83398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611c5f8339815191528261014c565b50610143600080516020611c5f8339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b6080516119e8610277600039600081816101ca01528181610556015281816105ab015281816107c8015261081d01526119e86000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638456cb59116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103d5578063e63ab1e9146103e8578063eab103df1461040f57600080fd5b8063d547741f1461038c578063d936547e1461039f578063d9caed12146103c257600080fd5b80639a590427116100bd5780639a5904271461035e5780639b19251a14610371578063a217fddf1461038457600080fd5b80638456cb59146102f657806385f438c1146102fe57806391d148541461032557600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102c55780635c975abb146102d85780635eb72e15146102e357600080fd5b806336568abe146102835780633f4ba83a14610296578063570618e11461029e57600080fd5b8063248a9ca311610176578063248a9ca314610219578063252f07bf1461024b5780632f2ff15d1461027057600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610204575b600080fd5b6101b06101ab3660046113c2565b610422565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bc565b610217610212366004611462565b6104bb565b005b61023d6102273660046114d5565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61021761027e3660046114ee565b61067b565b6102176102913660046114ee565b6106a7565b6102176106f8565b61023d7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec906001600160a01b031681565b60025460ff166101b0565b6102176102f136600461151e565b61072d565b6102176108f2565b61023d7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b06103333660046114ee565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61021761036c3660046115c1565b610924565b61021761037f3660046115c1565b6109d8565b61023d600081565b61021761039a3660046114ee565b610a8f565b6101b06103ad3660046115c1565b60036020526000908152604090205460ff1681565b6102176103d03660046115de565b610ab5565b6102176103e336600461161f565b610bad565b61023d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61021761041d3660046116be565b610dd9565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104b557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104c3610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104ed81610e72565b6104f5610e7c565b6001600160a01b03851660009081526003602052604090205460ff16610547576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61057b6001600160a01b0386167f000000000000000000000000000000000000000000000000000000000000000086610ebb565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906105e89088908a90899089908990600401611724565b600060405180830381600087803b15801561060257600080fd5b505af1158015610616573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161066193929190611767565b60405180910390a3506106746001600055565b5050505050565b6000828152600160208190526040909120015461069781610e72565b6106a18383610f2f565b50505050565b6001600160a01b03811633146106e9576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106f38282610fc2565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61072281610e72565b61072a611049565b50565b610735610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461075f81610e72565b610767610e7c565b6001600160a01b03861660009081526003602052604090205460ff166107b9576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107ed6001600160a01b0387167f000000000000000000000000000000000000000000000000000000000000000087610ebb565b6040517f36c99f3b0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b9061085c9089908b908a908a908a908a90600401611857565b600060405180830381600087803b15801561087657600080fd5b505af115801561088a573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37878787876040516108d794939291906118ae565b60405180910390a3506108ea6001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61091c81610e72565b61072a61109b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61094e81610e72565b6001600160a01b03821661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a0281610e72565b6001600160a01b038216610a42576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610aab81610e72565b6106a18383610fc2565b610abd610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ae781610e72565b610aef610e7c565b6001600160a01b03831660009081526003602052604090205460ff16610b41576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b556001600160a01b0384168584610ebb565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610b9a91815260200190565b60405180910390a3506106f36001600055565b610bb5610e2f565b610bbd610e7c565b60045474010000000000000000000000000000000000000000900460ff16610c11576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610c63576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce791906118da565b9050610cfe6001600160a01b0386163330876110d8565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610d85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da991906118da565b610db391906118f3565b8787604051610dc695949392919061192d565b60405180910390a2506108ea6001600055565b6000610de481610e72565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610e6b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61072a8133611111565b60025460ff1615610eb9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b038381166024830152604482018390526106f391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611188565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16610fba5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104b5565b5060006104b5565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1615610fba5760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104b5565b611051611204565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6110a3610e7c565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861107e3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106a19186918216906323b872dd90608401610ee8565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611184576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b600061119d6001600160a01b03841683611240565b905080516000141580156111c25750808060200190518101906111c09190611966565b155b156106f3576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161117b565b60025460ff16610eb9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061124e83836000611255565b9392505050565b606081471015611293576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161117b565b600080856001600160a01b031684866040516112af9190611983565b60006040518083038185875af1925050503d80600081146112ec576040519150601f19603f3d011682016040523d82523d6000602084013e6112f1565b606091505b509150915061130186838361130b565b9695505050505050565b6060826113205761131b82611380565b61124e565b815115801561133757506001600160a01b0384163b155b15611379576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161117b565b508061124e565b8051156113905780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156113d457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461124e57600080fd5b6001600160a01b038116811461072a57600080fd5b60008083601f84011261142b57600080fd5b50813567ffffffffffffffff81111561144357600080fd5b60208301915083602082850101111561145b57600080fd5b9250929050565b60008060008060006080868803121561147a57600080fd5b853561148581611404565b9450602086013561149581611404565b935060408601359250606086013567ffffffffffffffff8111156114b857600080fd5b6114c488828901611419565b969995985093965092949392505050565b6000602082840312156114e757600080fd5b5035919050565b6000806040838503121561150157600080fd5b82359150602083013561151381611404565b809150509250929050565b60008060008060008060a0878903121561153757600080fd5b863561154281611404565b9550602087013561155281611404565b945060408701359350606087013567ffffffffffffffff81111561157557600080fd5b61158189828a01611419565b909450925050608087013567ffffffffffffffff8111156115a157600080fd5b87016080818a0312156115b357600080fd5b809150509295509295509295565b6000602082840312156115d357600080fd5b813561124e81611404565b6000806000606084860312156115f357600080fd5b83356115fe81611404565b9250602084013561160e81611404565b929592945050506040919091013590565b6000806000806000806080878903121561163857600080fd5b863567ffffffffffffffff81111561164f57600080fd5b61165b89828a01611419565b909750955050602087013561166f81611404565b935060408701359250606087013567ffffffffffffffff81111561169257600080fd5b61169e89828a01611419565b979a9699509497509295939492505050565b801515811461072a57600080fd5b6000602082840312156116d057600080fd5b813561124e816116b0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061175c6080830184866116db565b979650505050505050565b8381526040602082015260006117816040830184866116db565b95945050505050565b6000813561179781611404565b6001600160a01b0316835260208201356117b081611404565b6001600160a01b03166020840152604082013567ffffffffffffffff81168082146117da57600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261181657600080fd5b820160208101903567ffffffffffffffff81111561183357600080fd5b80360382131561184257600080fd5b608060608601526117816080860182846116db565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061188f60a0830185876116db565b82810360808401526118a1818561178a565b9998505050505050505050565b8481526060602082015260006118c86060830185876116db565b828103604084015261175c818561178a565b6000602082840312156118ec57600080fd5b5051919050565b818103818111156104b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006119416060830187896116db565b856020840152828103604084015261195a8185876116db565b98975050505050505050565b60006020828403121561197857600080fd5b815161124e816116b0565b6000825160005b818110156119a4576020818601810151858301520161198a565b50600092019182525091905056fea2646970667358221220dc0b6596b7b61441087636724be59e8874b026b619128cbecb229a5609d1f02d64736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b506040516117aa3803806117aa83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516114d26102d86000396000818161020a015281816105d6015281816108290152818161099a01528181610aef0152610c110152600081816101be01528181610546015281816105a90152818161079901526107fc01526114d26000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b80632ccb404d1161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b80632ccb404d1461025d5780632f2ff15d1461027057600080fd5b8063116191b611610160578063116191b6146101b957806321e093b114610205578063248a9ca31461022c57600080fd5b806301ffc9a71461017c578063106e6290146101a4575b600080fd5b61018f61018a366004610fd3565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611045565b610462565b005b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b61024f61023a366004611078565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761026b3660046110da565b610507565b6101b761027e366004611172565b6106a1565b6101b7610291366004611172565b6106cc565b6101b7610725565b60015460ff1661018f565b6101b76102b736600461119e565b61075a565b6101b76102ca366004611078565b6108ef565b6101b76102dd366004611078565b61095d565b6101b7610a07565b61024f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611172565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61024f600081565b61024f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611172565b610a39565b61024f60035481565b61024f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610aa1565b61049c610aab565b6104a7848484610aea565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5846040516104ef91815260200190565b60405180910390a2506105026001600055565b505050565b61050f610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461053981610aa1565b610541610aab565b61056c7f00000000000000000000000000000000000000000000000000000000000000008785610aea565b6040517f36c99f3b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b90610608907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a90600401611335565b600060405180830381600087803b15801561062257600080fd5b505af1158015610636573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167fa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b8353780178787878660405161068694939291906113a6565b60405180910390a2506106996001600055565b505050505050565b6000828152600260205260409020600101546106bc81610aa1565b6106c68383610c72565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461071b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105028282610d72565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074f81610aa1565b610757610e31565b50565b610762610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078c81610aa1565b610794610aab565b6107bf7f00000000000000000000000000000000000000000000000000000000000000008684610aea565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610859907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016113dd565b600060405180830381600087803b15801561087357600080fd5b505af1158015610887573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d8686866040516108d59392919061142f565b60405180910390a2506108e86001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61091981610aa1565b610921610aab565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610965610aab565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109f357600080fd5b505af11580156108e8573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3181610aa1565b610757610eae565b600082815260026020526040902060010154610a5481610aa1565b6106c68383610d72565b600260005403610a9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107578133610f07565b60015460ff1615610ae8576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7c9190611449565b610b869084611462565b1115610bbe576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d083390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e39610f97565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610eb6610aab565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e84565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f93576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ae8576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fe557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461101557600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461104057600080fd5b919050565b60008060006060848603121561105a57600080fd5b6110638461101c565b95602085013595506040909401359392505050565b60006020828403121561108a57600080fd5b5035919050565b60008083601f8401126110a357600080fd5b50813567ffffffffffffffff8111156110bb57600080fd5b6020830191508360208285010111156110d357600080fd5b9250929050565b60008060008060008060a087890312156110f357600080fd5b6110fc8761101c565b955060208701359450604087013567ffffffffffffffff81111561111f57600080fd5b61112b89828a01611091565b90955093505060608701359150608087013567ffffffffffffffff81111561115257600080fd5b87016080818a03121561116457600080fd5b809150509295509295509295565b6000806040838503121561118557600080fd5b823591506111956020840161101c565b90509250929050565b6000806000806000608086880312156111b657600080fd5b6111bf8661101c565b945060208601359350604086013567ffffffffffffffff8111156111e257600080fd5b6111ee88828901611091565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff6112678261101c565b16825273ffffffffffffffffffffffffffffffffffffffff61128b6020830161101c565b1660208301526000604082013567ffffffffffffffff81168082146112af57600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126112eb57600080fd5b820160208101903567ffffffffffffffff81111561130857600080fd5b80360382131561131757600080fd5b6080606086015261132c608086018284611200565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061138760a083018587611200565b82810360808401526113998185611249565b9998505050505050505050565b8481526060602082015260006113c0606083018587611200565b82810360408401526113d28185611249565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113d2608083018486611200565b83815260406020820152600061132c604083018486611200565b60006020828403121561145b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220276d75628e17e347d14c84f90b610fc13968efff6201b1233b79eeaa7cb742c964736f6c634300081a00336080604052348015600f57600080fd5b506001600055610eea806100246000396000f3fe60806040526004361061006e5760003560e01c80636ed701691161004b5780636ed70169146100e0578063c5131691146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a2146100775780635ac1e07014610097578063676cc054146100b757005b3661007557005b005b34801561008357600080fd5b50610075610092366004610724565b610148565b3480156100a357600080fd5b506100756100b2366004610760565b6101de565b6100ca6100c536600461079b565b61021a565b6040516100d79190610896565b60405180910390f35b3480156100ec57600080fd5b5061007561024d565b34801561010157600080fd5b50610075610110366004610724565b610282565b6100756101233660046109ce565b61035d565b34801561013457600080fd5b50610075610143366004610aba565b6103a1565b6101506103d6565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610419565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b7f8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264338260405161020f929190610bed565b60405180910390a150565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a19392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61028a6103d6565b6000610297600285610cf3565b9050806000036102d3576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102f573ffffffffffffffffffffffffffffffffffffffff8416338484610419565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610394959493929190610d2e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103949493929190610db8565b600260005403610412576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104ae9085906104b4565b50505050565b60006104d673ffffffffffffffffffffffffffffffffffffffff84168361054f565b905080516000141580156104fb5750808060200190518101906104f99190610e7b565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061055d83836000610564565b9392505050565b6060814710156105a2576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610546565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105cb9190610e98565b60006040518083038185875af1925050503d8060008114610608576040519150601f19603f3d011682016040523d82523d6000602084013e61060d565b606091505b509150915061061d868383610627565b9695505050505050565b60608261063c57610637826106b6565b61055d565b8151158015610660575073ffffffffffffffffffffffffffffffffffffffff84163b155b156106af576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610546565b508061055d565b8051156106c65780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461071f57600080fd5b919050565b60008060006060848603121561073957600080fd5b83359250610749602085016106fb565b9150610757604085016106fb565b90509250925092565b60006020828403121561077257600080fd5b813567ffffffffffffffff81111561078957600080fd5b82016080818503121561055d57600080fd5b600080600083850360408112156107b157600080fd5b60208112156107bf57600080fd5b50839250602084013567ffffffffffffffff8111156107dd57600080fd5b8401601f810186136107ee57600080fd5b803567ffffffffffffffff81111561080557600080fd5b86602082840101111561081757600080fd5b939660209190910195509293505050565b60005b8381101561084357818101518382015260200161082b565b50506000910152565b60008151808452610864816020860160208601610828565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061055d602083018461084c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561091f5761091f6108a9565b604052919050565b600082601f83011261093857600080fd5b813567ffffffffffffffff811115610952576109526108a9565b61098360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108d8565b81815284602083860101111561099857600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106f857600080fd5b803561071f816109b5565b6000806000606084860312156109e357600080fd5b833567ffffffffffffffff8111156109fa57600080fd5b610a0686828701610927565b935050602084013591506040840135610a1e816109b5565b809150509250925092565b600067ffffffffffffffff821115610a4357610a436108a9565b5060051b60200190565b600082601f830112610a5e57600080fd5b8135610a71610a6c82610a29565b6108d8565b8082825260208201915060208360051b860101925085831115610a9357600080fd5b602085015b83811015610ab0578035835260209283019201610a98565b5095945050505050565b600080600060608486031215610acf57600080fd5b833567ffffffffffffffff811115610ae657600080fd5b8401601f81018613610af757600080fd5b8035610b05610a6c82610a29565b8082825260208201915060208360051b850101925088831115610b2757600080fd5b602084015b83811015610b6957803567ffffffffffffffff811115610b4b57600080fd5b610b5a8b602083890101610927565b84525060209283019201610b2c565b509550505050602084013567ffffffffffffffff811115610b8957600080fd5b610b9586828701610a4d565b925050610757604085016109c3565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2b836106fb565b16604082015273ffffffffffffffffffffffffffffffffffffffff610c52602084016106fb565b1660608201526000604083013567ffffffffffffffff8116808214610c7657600080fd5b6080840152506060830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610cb257600080fd5b830160208101903567ffffffffffffffff811115610ccf57600080fd5b803603821315610cde57600080fd5b608060a085015261061d60c085018284610ba4565b600082610d29577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d6360a083018661084c565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610dae578151865260209586019590910190600101610d90565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e4b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e3685835161084c565b94506020938401939190910190600101610dfc565b505050508281036040840152610e618186610d7c565b915050610e72606083018415159052565b95945050505050565b600060208284031215610e8d57600080fd5b815161055d816109b5565b60008251610eaa818460208701610828565b919091019291505056fea264697066735822122075e241dc7d0b3cc5bb3ca3c583250993ad9bf6a64ef50849b87060df5ab2e8e364736f6c634300081a00336080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526001602080840182905283850192909252835191820184526000808352606084019290925260808301829052905492517f048ae42c000000000000000000000000000000000000000000000000000000008152919273ffffffffffffffffffffffffffffffffffffffff169163048ae42c916102d7918c918c918c9189918990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a081018352610321808252600182840181905282850191909152835192830184526000808452606083019390935260808201839052915492517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201526024810183905293945092909188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea264697066735822122014b5ef93498637ee9a3f4d89a96843ea228d38a24ccae4d361ad086fb4a2ba2b64736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220658a03788e7c2558f3159d5347e48afa7ee297970854aae30cfc9aac2a0aa57d64736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a26469706673582212209a2949c185869314abf0aa3cd727a71c0f2bcb705b18734b9a6174d1764167dd64736f6c634300081a0033", } // GatewayEVMZEVMTestABI is the input ABI used to generate the binding from. @@ -2242,9 +2243,9 @@ type GatewayEVMZEVMTestReceivedRevert struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) FilterReceivedRevert(opts *bind.FilterOpts) (*GatewayEVMZEVMTestReceivedRevertIterator, error) { logs, sub, err := _GatewayEVMZEVMTest.contract.FilterLogs(opts, "ReceivedRevert") @@ -2254,9 +2255,9 @@ func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) FilterReceivedRevert(opts return &GatewayEVMZEVMTestReceivedRevertIterator{contract: _GatewayEVMZEVMTest.contract, event: "ReceivedRevert", logs: logs, sub: sub}, nil } -// WatchReceivedRevert is a free log subscription operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// WatchReceivedRevert is a free log subscription operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) WatchReceivedRevert(opts *bind.WatchOpts, sink chan<- *GatewayEVMZEVMTestReceivedRevert) (event.Subscription, error) { logs, sub, err := _GatewayEVMZEVMTest.contract.WatchLogs(opts, "ReceivedRevert") @@ -2291,9 +2292,9 @@ func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) WatchReceivedRevert(opts }), nil } -// ParseReceivedRevert is a log parse operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// ParseReceivedRevert is a log parse operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) ParseReceivedRevert(log types.Log) (*GatewayEVMZEVMTestReceivedRevert, error) { event := new(GatewayEVMZEVMTestReceivedRevert) if err := _GatewayEVMZEVMTest.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { @@ -2380,9 +2381,9 @@ type GatewayEVMZEVMTestReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// FilterReverted is a free log retrieval operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*GatewayEVMZEVMTestRevertedIterator, error) { var toRule []interface{} @@ -2401,9 +2402,9 @@ func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) FilterReverted(opts *bind return &GatewayEVMZEVMTestRevertedIterator{contract: _GatewayEVMZEVMTest.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// WatchReverted is a free log subscription operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *GatewayEVMZEVMTestReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2447,9 +2448,9 @@ func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) WatchReverted(opts *bind. }), nil } -// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// ParseReverted is a log parse operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) ParseReverted(log types.Log) (*GatewayEVMZEVMTestReverted, error) { event := new(GatewayEVMZEVMTestReverted) if err := _GatewayEVMZEVMTest.contract.UnpackLog(event, "Reverted", log); err != nil { diff --git a/v2/pkg/gatewayzevm.sol/gatewayzevm.go b/v2/pkg/gatewayzevm.sol/gatewayzevm.go index 33fa0982..0d231899 100644 --- a/v2/pkg/gatewayzevm.sol/gatewayzevm.go +++ b/v2/pkg/gatewayzevm.sol/gatewayzevm.go @@ -37,6 +37,7 @@ type CallOptions struct { // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -60,8 +61,8 @@ type ZContext struct { // GatewayZEVMMetaData contains all meta data concerning the GatewayZEVM contract. var GatewayZEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"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\":\"PROTOCOL_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"callOptions\",\"type\":\"tuple\",\"internalType\":\"structCallOptions\",\"components\":[{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"isArbitraryCall\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"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\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"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\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"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\":\"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\":\"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\":\"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\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"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\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"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\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"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\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"callOptions\",\"type\":\"tuple\",\"internalType\":\"structCallOptions\",\"components\":[{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"isArbitraryCall\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"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\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"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\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"callOptions\",\"type\":\"tuple\",\"internalType\":\"structCallOptions\",\"components\":[{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"isArbitraryCall\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"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\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"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\":\"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\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"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\":\"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\":\"CallerIsNotProtocol\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyMessage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrProtocol\",\"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\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613f266100fd6000396000818161282c015281816128550152612a2b0152613f266000f3fe6080604052600436106101dc5760003560e01c80634f1ef2861161010257806397a1cef111610095578063c39aca3711610064578063c39aca3714610681578063d547741f146106a1578063e63ab1e9146106c1578063f45346dc146106f557600080fd5b806397a1cef1146105d6578063a217fddf146105f6578063ad3cb1cc1461060b578063bcf7f32b1461066157600080fd5b80637b15118b116100d15780637b15118b1461051c5780637c0dcb5f1461053c5780638456cb591461055c57806391d148541461057157600080fd5b80634f1ef2861461049d57806352d1902d146104b05780635c975abb146104c5578063717d335f146104fc57600080fd5b8063248a9ca31161017a57806336568abe1161014957806336568abe146104285780633b283933146104485780633f4ba83a14610468578063485cc9551461047d57600080fd5b8063248a9ca3146103635780632722feee146103c05780632810ae63146103e85780632f2ff15d1461040857600080fd5b806306cb8983116101b657806306cb8983146102cb5780631cb5ea75146102eb57806321501a951461030b57806321e093b11461032b57600080fd5b806301ffc9a7146102565780630310eb761461028b578063048ae42c146102ab57600080fd5b36610251576101e9610715565b6000546001600160a01b0316331480159061021857503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561024f576040517fb3af013700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561026257600080fd5b50610276610271366004612f74565b610773565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b5061024f6102a6366004612fe3565b61080c565b3480156102b757600080fd5b5061024f6102c6366004613186565b610a7f565b3480156102d757600080fd5b5061024f6102e6366004613258565b610bf2565b3480156102f757600080fd5b5061024f610306366004613316565b610c57565b34801561031757600080fd5b5061024f6103263660046133b2565b610c90565b34801561033757600080fd5b5060005461034b906001600160a01b031681565b6040516001600160a01b039091168152602001610282565b34801561036f57600080fd5b506103b261037e36600461343e565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610282565b3480156103cc57600080fd5b5061034b73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103f457600080fd5b5061024f610403366004613457565b610e44565b34801561041457600080fd5b5061024f6104233660046134fc565b610f4e565b34801561043457600080fd5b5061024f6104433660046134fc565b610f98565b34801561045457600080fd5b5061024f61046336600461352c565b610fe9565b34801561047457600080fd5b5061024f611107565b34801561048957600080fd5b5061024f6104983660046135bf565b61113c565b61024f6104ab3660046135ed565b611378565b3480156104bc57600080fd5b506103b2611397565b3480156104d157600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610276565b34801561050857600080fd5b5061024f61051736600461363d565b6113c6565b34801561052857600080fd5b5061024f610537366004613683565b6114b5565b34801561054857600080fd5b5061024f6105573660046136f5565b6115dd565b34801561056857600080fd5b5061024f6117a7565b34801561057d57600080fd5b5061027661058c3660046134fc565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105e257600080fd5b5061024f6105f136600461376e565b6117d9565b34801561060257600080fd5b506103b2600081565b34801561061757600080fd5b506106546040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102829190613840565b34801561066d57600080fd5b5061024f61067c366004613853565b6118f3565b34801561068d57600080fd5b5061024f61069c366004613853565b611a0a565b3480156106ad57600080fd5b5061024f6106bc3660046134fc565b611c00565b3480156106cd57600080fd5b506103b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561070157600080fd5b5061024f6107103660046138f1565b611c44565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610771576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061080657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610859576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610861610715565b6001600160a01b038416158061087e57506001600160a01b038216155b1561089c5760405163d92e233d60e01b815260040160405180910390fd5b826000036108d6576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab148061090957506001600160a01b03821630145b15610940576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af11580156109a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cc9190613941565b610a02576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de090610a47908490600401613a0b565b600060405180830381600087803b158015610a6157600080fd5b505af1158015610a75573d6000803e3d6000fd5b5050505050505050565b610a87611e3a565b610a8f610715565b8651600003610ab15760405163d92e233d60e01b815260040160405180910390fd5b85600003610aeb576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610af8878785611ebb565b90506000336001600160a01b03167f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8d9190613a71565b6040805180820182528c8152600160208201529051610bb79695949392918f918f91908e90613b0b565b60405180910390a350610be960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610bfa611e3a565b610c02610715565b610c2686868686610c1836889003880188613b8d565b610c2187613be5565b6121be565b610c4f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b610c5f611e3a565b610c67610715565b610c268686868660405180604001604052808881526020016001151581525086610c2190613be5565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610cdd576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ce5610715565b6001600160a01b038316610d0c5760405163d92e233d60e01b815260040160405180910390fd5b83600003610d46576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480610d7957506001600160a01b03831630145b15610db0576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dba84846123e0565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610e0b928a921690899088908890600401613c8d565b600060405180830381600087803b158015610e2557600080fd5b505af1158015610e39573d6000803e3d6000fd5b505050505050505050565b610e4c611e3a565b610e54610715565b8651600003610e765760405163d92e233d60e01b815260040160405180910390fd5b85600003610eb0576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ece8673735b14bb79463307aacbed86daf3322b1e6226ab6123e0565b60008054604051879233927f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c92610f1d928d926001600160a01b0316918d919081908d908d908d908d90613d29565b60405180910390a3610be960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610f88816125ae565b610f9283836125b8565b50505050565b6001600160a01b0381163314610fda576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe482826126a5565b505050565b610ff1611e3a565b610ff9610715565b855160000361101b5760405163d92e233d60e01b815260040160405180910390fd5b84600003611055576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110738573735b14bb79463307aacbed86daf3322b1e6226ab6123e0565b60008054604080518082018252838152600160208201529051879333937f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c936110d6938d936001600160a01b03909316928d92909182918d918d91908d90613b0b565b60405180910390a3610c4f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611131816125ae565b611139612769565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156111875750825b905060008267ffffffffffffffff1660011480156111a45750303b155b9050811580156111b2575080155b156111e9576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561124a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061126757506001600160a01b038616155b156112855760405163d92e233d60e01b815260040160405180910390fd5b61128d6127f9565b6112956127f9565b61129d612801565b6112a5612811565b6112b06000876125b8565b506112db7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876125b8565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610be95784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b611380612821565b611389826128f1565b61139382826128fc565b5050565b60006113a1612a20565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611413576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61141b610715565b6001600160a01b0382166114425760405163d92e233d60e01b815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de090611487908490600401613a0b565b600060405180830381600087803b1580156114a157600080fd5b505af1158015610c4f573d6000803e3d6000fd5b6114bd611e3a565b6114c5610715565b86516000036114e75760405163d92e233d60e01b815260040160405180910390fd5b85600003611521576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061152f87878535611ebb565b90506000336001600160a01b03167f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c49190613a71565b8c8c8c8c604051610bb799989796959493929190613d29565b6115e5611e3a565b6115ed610715565b835160000361160f5760405163d92e233d60e01b815260040160405180910390fd5b82600003611649576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116558484612a82565b90506000336001600160a01b03167f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ea9190613a71565b60405180604001604052808c6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611733573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117579190613a71565b81526001602090910152604051611775969594939291908c90613d81565b60405180910390a350610f9260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6117d1816125ae565b611139612af0565b6117e1611e3a565b6117e9610715565b835160000361180b5760405163d92e233d60e01b815260040160405180910390fd5b82600003611845576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118638373735b14bb79463307aacbed86daf3322b1e6226ab6123e0565b60008054604080518082018252838152600160208201529051859333937f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c936118c2938b936001600160a01b03909316928b9290918291908b90613d81565b60405180910390a3610f9260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611940576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611948610715565b6001600160a01b038516158061196557506001600160a01b038316155b156119835760405163d92e233d60e01b815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e906119d09089908990899088908890600401613c8d565b600060405180830381600087803b1580156119ea57600080fd5b505af11580156119fe573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a57576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a5f610715565b6001600160a01b0385161580611a7c57506001600160a01b038316155b15611a9a5760405163d92e233d60e01b815260040160405180910390fd5b83600003611ad4576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611b0757506001600160a01b03831630145b15611b3e576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bca9190613941565b611983576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c3a816125ae565b610f9283836126a5565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c91576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c99610715565b6001600160a01b0383161580611cb657506001600160a01b038116155b15611cd45760405163d92e233d60e01b815260040160405180910390fd5b81600003611d0e576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d4157506001600160a01b03811630145b15611d78576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e049190613941565b610fe4576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eb5576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611eee91815260200190565b6040805180830381865afa158015611f0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2e9190613e03565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611fb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd79190613941565b61200d576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015612079573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209d9190613941565b6120d3576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612133573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121579190613941565b61218d576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b85516000036121e05760405163d92e233d60e01b815260040160405180910390fd5b600083900361221b576040517fbb1b658000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81516040517ffc5fecd5000000000000000000000000000000000000000000000000000000008152600481019190915260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015612280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a49190613e03565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015612329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234d9190613941565b612383576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f306ee13f48319a123b222c69908e44dcf91abffc20cacc502e3cf5a4ff23e0e48a898989896040516123ce959493929190613e31565b60405180910390a35050505050505050565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015612450573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124749190613941565b6124aa576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561250957600080fd5b505af115801561251d573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461256e576040519150601f19603f3d011682016040523d82523d6000602084013e612573565b606091505b5050905080610fe4576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111398133612b69565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661269b576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556126513390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610806565b6000915050610806565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561269b576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610806565b612771612bf6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b610771612c51565b612809612c51565b610771612cb8565b612819612c51565b610771612d09565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806128ba57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166128ae7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610771576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611393816125ae565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612974575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261297191810190613a71565b60015b6129ba576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612a16576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016129b1565b610fe48383612d11565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610771576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006121918383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aeb9190613a71565b611ebb565b612af8610715565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336127db565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611393576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016129b1565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610771576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610771576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cc0612c51565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612198612c51565b612d1a82612d67565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612d5f57610fe48282612e0f565b611393612e85565b806001600160a01b03163b600003612db6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016129b1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612e2c9190613ed4565b600060405180830381855af49150503d8060008114612e67576040519150601f19603f3d011682016040523d82523d6000602084013e612e6c565b606091505b5091509150612e7c858383612ebd565b95945050505050565b3415610771576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612ed257612ecd82612f32565b612191565b8151158015612ee957506001600160a01b0384163b155b15612f2b576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016129b1565b5080612191565b805115612f425780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612f8657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461219157600080fd5b6001600160a01b038116811461113957600080fd5b600060608284031215612fdd57600080fd5b50919050565b60008060008060808587031215612ff957600080fd5b843561300481612fb6565b935060208501359250604085013561301b81612fb6565b9150606085013567ffffffffffffffff81111561303757600080fd5b61304387828801612fcb565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261308f57600080fd5b813567ffffffffffffffff8111156130a9576130a961304f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff811182821017156130f6576130f661304f565b60405281815283820160200185101561310e57600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f84011261313d57600080fd5b50813567ffffffffffffffff81111561315557600080fd5b60208301915083602082850101111561316d57600080fd5b9250929050565b600060a08284031215612fdd57600080fd5b600080600080600080600060c0888a0312156131a157600080fd5b873567ffffffffffffffff8111156131b857600080fd5b6131c48a828b0161307e565b9750506020880135955060408801356131dc81612fb6565b9450606088013567ffffffffffffffff8111156131f857600080fd5b6132048a828b0161312b565b9095509350506080880135915060a088013567ffffffffffffffff81111561322b57600080fd5b6132378a828b01613174565b91505092959891949750929550565b600060408284031215612fdd57600080fd5b60008060008060008060c0878903121561327157600080fd5b863567ffffffffffffffff81111561328857600080fd5b61329489828a0161307e565b96505060208701356132a581612fb6565b9450604087013567ffffffffffffffff8111156132c157600080fd5b6132cd89828a0161312b565b90955093506132e190508860608901613246565b915060a087013567ffffffffffffffff8111156132fd57600080fd5b61330989828a01613174565b9150509295509295509295565b60008060008060008060a0878903121561332f57600080fd5b863567ffffffffffffffff81111561334657600080fd5b61335289828a0161307e565b965050602087013561336381612fb6565b9450604087013567ffffffffffffffff81111561337f57600080fd5b61338b89828a0161312b565b90955093505060608701359150608087013567ffffffffffffffff8111156132fd57600080fd5b6000806000806000608086880312156133ca57600080fd5b853567ffffffffffffffff8111156133e157600080fd5b6133ed88828901612fcb565b95505060208601359350604086013561340581612fb6565b9250606086013567ffffffffffffffff81111561342157600080fd5b61342d8882890161312b565b969995985093965092949392505050565b60006020828403121561345057600080fd5b5035919050565b600080600080600080600060e0888a03121561347257600080fd5b873567ffffffffffffffff81111561348957600080fd5b6134958a828b0161307e565b9750506020880135955060408801359450606088013567ffffffffffffffff8111156134c057600080fd5b6134cc8a828b0161312b565b90955093506134e090508960808a01613246565b915060c088013567ffffffffffffffff81111561322b57600080fd5b6000806040838503121561350f57600080fd5b82359150602083013561352181612fb6565b809150509250929050565b60008060008060008060a0878903121561354557600080fd5b863567ffffffffffffffff81111561355c57600080fd5b61356889828a0161307e565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561359357600080fd5b61359f89828a0161312b565b909450925050608087013567ffffffffffffffff8111156132fd57600080fd5b600080604083850312156135d257600080fd5b82356135dd81612fb6565b9150602083013561352181612fb6565b6000806040838503121561360057600080fd5b823561360b81612fb6565b9150602083013567ffffffffffffffff81111561362757600080fd5b6136338582860161307e565b9150509250929050565b6000806040838503121561365057600080fd5b823561365b81612fb6565b9150602083013567ffffffffffffffff81111561367757600080fd5b61363385828601612fcb565b600080600080600080600060e0888a03121561369e57600080fd5b873567ffffffffffffffff8111156136b557600080fd5b6136c18a828b0161307e565b9750506020880135955060408801356136d981612fb6565b9450606088013567ffffffffffffffff8111156134c057600080fd5b6000806000806080858703121561370b57600080fd5b843567ffffffffffffffff81111561372257600080fd5b61372e8782880161307e565b94505060208501359250604085013561374681612fb6565b9150606085013567ffffffffffffffff81111561376257600080fd5b61304387828801613174565b6000806000806080858703121561378457600080fd5b843567ffffffffffffffff81111561379b57600080fd5b6137a78782880161307e565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561376257600080fd5b60005b838110156137ed5781810151838201526020016137d5565b50506000910152565b6000815180845261380e8160208601602086016137d2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061219160208301846137f6565b60008060008060008060a0878903121561386c57600080fd5b863567ffffffffffffffff81111561388357600080fd5b61388f89828a01612fcb565b96505060208701356138a081612fb6565b94506040870135935060608701356138b781612fb6565b9250608087013567ffffffffffffffff8111156138d357600080fd5b6138df89828a0161312b565b979a9699509497509295939492505050565b60008060006060848603121561390657600080fd5b833561391181612fb6565b925060208401359150604084013561392881612fb6565b809150509250925092565b801515811461113957600080fd5b60006020828403121561395357600080fd5b815161219181613933565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261399357600080fd5b830160208101925035905067ffffffffffffffff8111156139b357600080fd5b80360382131561316d57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815260008235613a1c81612fb6565b6001600160a01b038116602084015250602083013567ffffffffffffffff8116808214613a4857600080fd5b8060408501525050613a5d604084018461395e565b606080850152612e7c6080850182846139c2565b600060208284031215613a8357600080fd5b5051919050565b60008135613a9781612fb6565b6001600160a01b031683526020820135613ab081613933565b151560208401526040820135613ac581612fb6565b6001600160a01b03166040840152613ae0606083018361395e565b60a06060860152613af560a0860182846139c2565b6080948501359590940194909452509092915050565b61012081526000613b2061012083018c6137f6565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a0840152613b548187896139c2565b855160c08501526020860151151560e085015290505b828103610100840152613b7d8185613a8a565b9c9b505050505050505050505050565b60006040828403128015613ba057600080fd5b506040805190810167ffffffffffffffff81118282101715613bc457613bc461304f565b604052823581526020830135613bd981613933565b60208201529392505050565b600060a08236031215613bf757600080fd5b60405160a0810167ffffffffffffffff81118282101715613c1a57613c1a61304f565b6040528235613c2881612fb6565b81526020830135613c3881613933565b60208201526040830135613c4b81612fb6565b6040820152606083013567ffffffffffffffff811115613c6a57600080fd5b613c763682860161307e565b606083015250608092830135928101929092525090565b608081526000613c9d878861395e565b60606080850152613cb260e0850182846139c2565b9150506020880135613cc381612fb6565b6001600160a01b0390811660a085015260408981013560c0860152908816602085015283018690528281036060840152613cfe8185876139c2565b98975050505050505050565b803582526020810135613d1c81613933565b8015156020840152505050565b61012081526000613d3e61012083018c6137f6565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a0840152613d728187896139c2565b9050613b6a60c0840186613d0a565b61012081526000613d9661012083018a6137f6565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a085015260008252613ddd60c0850187805182526020908101511515910152565b6020810161010085015250613df56020820185613a8a565b9a9950505050505050505050565b60008060408385031215613e1657600080fd5b8251613e2181612fb6565b6020939093015192949293505050565b60a081526000613e4460a08301886137f6565b8281036020840152613e578187896139c2565b85516040850152602086015115156060850152905082810360808401526001600160a01b0384511681526020840151151560208201526001600160a01b036040850151166040820152606084015160a06060830152613eb960a08301826137f6565b90506080850151608083015280925050509695505050505050565b60008251613ee68184602087016137d2565b919091019291505056fea264697066735822122073474441ffbbefd220cbebd592060114f9ed0f0a51b7c6cc33e9c60bfd7d321764736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"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\":\"PROTOCOL_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"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\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"callOptions\",\"type\":\"tuple\",\"internalType\":\"structCallOptions\",\"components\":[{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"isArbitraryCall\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"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\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"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\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"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\":\"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\":\"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\":\"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\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"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\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"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\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"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\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"callOptions\",\"type\":\"tuple\",\"internalType\":\"structCallOptions\",\"components\":[{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"isArbitraryCall\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"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\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"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\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"callOptions\",\"type\":\"tuple\",\"internalType\":\"structCallOptions\",\"components\":[{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"isArbitraryCall\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"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\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"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\":\"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\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"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\":\"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\":\"CallerIsNotProtocol\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyMessage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrProtocol\",\"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\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613f566100fd6000396000818161282c015281816128550152612a2b0152613f566000f3fe6080604052600436106101dc5760003560e01c806352d1902d11610102578063ad3cb1cc11610095578063d547741f11610064578063d547741f14610681578063e63ab1e9146106a1578063e7d926b4146106d5578063f45346dc146106f557600080fd5b8063ad3cb1cc146105cb578063bcf7f32b14610621578063c39aca3714610641578063cd73d4c71461066157600080fd5b80638456cb59116100d15780638456cb591461051c57806391d148541461053157806397a1cef114610596578063a217fddf146105b657600080fd5b806352d1902d146104905780635c975abb146104a55780637b15118b146104dc5780637c0dcb5f146104fc57600080fd5b80632722feee1161017a5780633b283933116101495780633b283933146104285780633f4ba83a14610448578063485cc9551461045d5780634f1ef2861461047d57600080fd5b80632722feee146103a05780632810ae63146103c85780632f2ff15d146103e857806336568abe1461040857600080fd5b80631cb5ea75116101b65780631cb5ea75146102cb57806321501a95146102eb57806321e093b11461030b578063248a9ca31461034357600080fd5b806301ffc9a714610256578063048ae42c1461028b57806306cb8983146102ab57600080fd5b36610251576101e9610715565b6000546001600160a01b0316331480159061021857503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561024f576040517fb3af013700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561026257600080fd5b50610276610271366004612f74565b610773565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b5061024f6102a6366004613108565b61080c565b3480156102b757600080fd5b5061024f6102c63660046131da565b61097f565b3480156102d757600080fd5b5061024f6102e6366004613298565b6109e4565b3480156102f757600080fd5b5061024f610306366004613346565b610a1d565b34801561031757600080fd5b5060005461032b906001600160a01b031681565b6040516001600160a01b039091168152602001610282565b34801561034f57600080fd5b5061039261035e3660046133d2565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610282565b3480156103ac57600080fd5b5061032b73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d457600080fd5b5061024f6103e33660046133eb565b610bd1565b3480156103f457600080fd5b5061024f610403366004613490565b610cdb565b34801561041457600080fd5b5061024f610423366004613490565b610d25565b34801561043457600080fd5b5061024f6104433660046134c0565b610d76565b34801561045457600080fd5b5061024f610e94565b34801561046957600080fd5b5061024f610478366004613553565b610ec9565b61024f61048b366004613581565b611105565b34801561049c57600080fd5b50610392611124565b3480156104b157600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610276565b3480156104e857600080fd5b5061024f6104f73660046135d1565b611153565b34801561050857600080fd5b5061024f610517366004613643565b61127b565b34801561052857600080fd5b5061024f611445565b34801561053d57600080fd5b5061027661054c366004613490565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105a257600080fd5b5061024f6105b13660046136c8565b611477565b3480156105c257600080fd5b50610392600081565b3480156105d757600080fd5b506106146040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b604051610282919061379a565b34801561062d57600080fd5b5061024f61063c3660046137ad565b611591565b34801561064d57600080fd5b5061024f61065c3660046137ad565b6116a8565b34801561066d57600080fd5b5061024f61067c36600461385d565b61189e565b34801561068d57600080fd5b5061024f61069c366004613490565b611b11565b3480156106ad57600080fd5b506103927f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156106e157600080fd5b5061024f6106f03660046138bd565b611b55565b34801561070157600080fd5b5061024f610710366004613903565b611c44565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610771576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061080657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610814611e3a565b61081c610715565b865160000361083e5760405163d92e233d60e01b815260040160405180910390fd5b85600003610878576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610885878785611ebb565b90506000336001600160a01b03167f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091a9190613945565b6040805180820182528c81526001602082015290516109449695949392918f918f91908e90613a9a565b60405180910390a35061097660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610987611e3a565b61098f610715565b6109b3868686866109a536889003880188613b1c565b6109ae87613b74565b6121be565b6109dc60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6109ec611e3a565b6109f4610715565b6109b386868686604051806040016040528088815260200160011515815250866109ae90613b74565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a6a576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a72610715565b6001600160a01b038316610a995760405163d92e233d60e01b815260040160405180910390fd5b83600003610ad3576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480610b0657506001600160a01b03831630145b15610b3d576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b4784846123e0565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610b98928a921690899088908890600401613c1c565b600060405180830381600087803b158015610bb257600080fd5b505af1158015610bc6573d6000803e3d6000fd5b505050505050505050565b610bd9611e3a565b610be1610715565b8651600003610c035760405163d92e233d60e01b815260040160405180910390fd5b85600003610c3d576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5b8673735b14bb79463307aacbed86daf3322b1e6226ab6123e0565b60008054604051879233927f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c92610caa928d926001600160a01b0316918d919081908d908d908d908d90613cb8565b60405180910390a361097660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610d15816125ae565b610d1f83836125b8565b50505050565b6001600160a01b0381163314610d67576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d7182826126a5565b505050565b610d7e611e3a565b610d86610715565b8551600003610da85760405163d92e233d60e01b815260040160405180910390fd5b84600003610de2576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e008573735b14bb79463307aacbed86daf3322b1e6226ab6123e0565b60008054604080518082018252838152600160208201529051879333937f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c93610e63938d936001600160a01b03909316928d92909182918d918d91908d90613a9a565b60405180910390a36109dc60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ebe816125ae565b610ec6612769565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610f145750825b905060008267ffffffffffffffff166001148015610f315750303b155b905081158015610f3f575080155b15610f76576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610fd75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0387161580610ff457506001600160a01b038616155b156110125760405163d92e233d60e01b815260040160405180910390fd5b61101a6127f9565b6110226127f9565b61102a612801565b611032612811565b61103d6000876125b8565b506110687f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876125b8565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156109765784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b61110d612821565b611116826128f1565b61112082826128fc565b5050565b600061112e612a20565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b61115b611e3a565b611163610715565b86516000036111855760405163d92e233d60e01b815260040160405180910390fd5b856000036111bf576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111cd87878535611ebb565b90506000336001600160a01b03167f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561123e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112629190613945565b8c8c8c8c60405161094499989796959493929190613cb8565b611283611e3a565b61128b610715565b83516000036112ad5760405163d92e233d60e01b815260040160405180910390fd5b826000036112e7576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006112f38484612a82565b90506000336001600160a01b03167f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113889190613945565b60405180604001604052808c6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f59190613945565b81526001602090910152604051611413969594939291908c90613d10565b60405180910390a350610d1f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61146f816125ae565b610ec6612af0565b61147f611e3a565b611487610715565b83516000036114a95760405163d92e233d60e01b815260040160405180910390fd5b826000036114e3576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115018373735b14bb79463307aacbed86daf3322b1e6226ab6123e0565b60008054604080518082018252838152600160208201529051859333937f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c93611560938b936001600160a01b03909316928b9290918291908b90613d10565b60405180910390a3610d1f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab146115de576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115e6610715565b6001600160a01b038516158061160357506001600160a01b038316155b156116215760405163d92e233d60e01b815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e9061166e9089908990899088908890600401613c1c565b600060405180830381600087803b15801561168857600080fd5b505af115801561169c573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146116f5576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116fd610715565b6001600160a01b038516158061171a57506001600160a01b038316155b156117385760405163d92e233d60e01b815260040160405180910390fd5b83600003611772576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806117a557506001600160a01b03831630145b156117dc576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611844573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118689190613d92565b611621576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373735b14bb79463307aacbed86daf3322b1e6226ab146118eb576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118f3610715565b6001600160a01b038416158061191057506001600160a01b038216155b1561192e5760405163d92e233d60e01b815260040160405180910390fd5b82600003611968576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab148061199b57506001600160a01b03821630145b156119d2576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af1158015611a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5e9190613d92565b611a94576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5ac1e0700000000000000000000000000000000000000000000000000000000081526001600160a01b03831690635ac1e07090611ad9908490600401613daf565b600060405180830381600087803b158015611af357600080fd5b505af1158015611b07573d6000803e3d6000fd5b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611b4b816125ae565b610d1f83836126a5565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611ba2576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611baa610715565b6001600160a01b038216611bd15760405163d92e233d60e01b815260040160405180910390fd5b6040517f5ac1e0700000000000000000000000000000000000000000000000000000000081526001600160a01b03831690635ac1e07090611c16908490600401613daf565b600060405180830381600087803b158015611c3057600080fd5b505af11580156109dc573d6000803e3d6000fd5b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c91576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c99610715565b6001600160a01b0383161580611cb657506001600160a01b038116155b15611cd45760405163d92e233d60e01b815260040160405180910390fd5b81600003611d0e576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d4157506001600160a01b03811630145b15611d78576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e049190613d92565b610d71576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eb5576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611eee91815260200190565b6040805180830381865afa158015611f0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2e9190613e33565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611fb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd79190613d92565b61200d576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015612079573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209d9190613d92565b6120d3576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612133573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121579190613d92565b61218d576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b85516000036121e05760405163d92e233d60e01b815260040160405180910390fd5b600083900361221b576040517fbb1b658000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81516040517ffc5fecd5000000000000000000000000000000000000000000000000000000008152600481019190915260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015612280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a49190613e33565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015612329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234d9190613d92565b612383576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f306ee13f48319a123b222c69908e44dcf91abffc20cacc502e3cf5a4ff23e0e48a898989896040516123ce959493929190613e61565b60405180910390a35050505050505050565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015612450573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124749190613d92565b6124aa576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561250957600080fd5b505af115801561251d573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461256e576040519150601f19603f3d011682016040523d82523d6000602084013e612573565b606091505b5050905080610d71576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ec68133612b69565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661269b576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556126513390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610806565b6000915050610806565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561269b576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610806565b612771612bf6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b610771612c51565b612809612c51565b610771612cb8565b612819612c51565b610771612d09565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806128ba57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166128ae7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610771576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611120816125ae565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612974575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261297191810190613945565b60015b6129ba576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612a16576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016129b1565b610d718383612d11565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610771576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006121918383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aeb9190613945565b611ebb565b612af8610715565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336127db565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611120576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016129b1565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610771576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610771576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cc0612c51565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612198612c51565b612d1a82612d67565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612d5f57610d718282612e0f565b611120612e85565b806001600160a01b03163b600003612db6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016129b1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612e2c9190613f04565b600060405180830381855af49150503d8060008114612e67576040519150601f19603f3d011682016040523d82523d6000602084013e612e6c565b606091505b5091509150612e7c858383612ebd565b95945050505050565b3415610771576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612ed257612ecd82612f32565b612191565b8151158015612ee957506001600160a01b0384163b155b15612f2b576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016129b1565b5080612191565b805115612f425780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612f8657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461219157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612ff657600080fd5b813567ffffffffffffffff81111561301057613010612fb6565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff8111828210171561305d5761305d612fb6565b60405281815283820160200185101561307557600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610ec657600080fd5b60008083601f8401126130b957600080fd5b50813567ffffffffffffffff8111156130d157600080fd5b6020830191508360208285010111156130e957600080fd5b9250929050565b600060a0828403121561310257600080fd5b50919050565b600080600080600080600060c0888a03121561312357600080fd5b873567ffffffffffffffff81111561313a57600080fd5b6131468a828b01612fe5565b97505060208801359550604088013561315e81613092565b9450606088013567ffffffffffffffff81111561317a57600080fd5b6131868a828b016130a7565b9095509350506080880135915060a088013567ffffffffffffffff8111156131ad57600080fd5b6131b98a828b016130f0565b91505092959891949750929550565b60006040828403121561310257600080fd5b60008060008060008060c087890312156131f357600080fd5b863567ffffffffffffffff81111561320a57600080fd5b61321689828a01612fe5565b965050602087013561322781613092565b9450604087013567ffffffffffffffff81111561324357600080fd5b61324f89828a016130a7565b9095509350613263905088606089016131c8565b915060a087013567ffffffffffffffff81111561327f57600080fd5b61328b89828a016130f0565b9150509295509295509295565b60008060008060008060a087890312156132b157600080fd5b863567ffffffffffffffff8111156132c857600080fd5b6132d489828a01612fe5565b96505060208701356132e581613092565b9450604087013567ffffffffffffffff81111561330157600080fd5b61330d89828a016130a7565b90955093505060608701359150608087013567ffffffffffffffff81111561327f57600080fd5b60006060828403121561310257600080fd5b60008060008060006080868803121561335e57600080fd5b853567ffffffffffffffff81111561337557600080fd5b61338188828901613334565b95505060208601359350604086013561339981613092565b9250606086013567ffffffffffffffff8111156133b557600080fd5b6133c1888289016130a7565b969995985093965092949392505050565b6000602082840312156133e457600080fd5b5035919050565b600080600080600080600060e0888a03121561340657600080fd5b873567ffffffffffffffff81111561341d57600080fd5b6134298a828b01612fe5565b9750506020880135955060408801359450606088013567ffffffffffffffff81111561345457600080fd5b6134608a828b016130a7565b909550935061347490508960808a016131c8565b915060c088013567ffffffffffffffff8111156131ad57600080fd5b600080604083850312156134a357600080fd5b8235915060208301356134b581613092565b809150509250929050565b60008060008060008060a087890312156134d957600080fd5b863567ffffffffffffffff8111156134f057600080fd5b6134fc89828a01612fe5565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561352757600080fd5b61353389828a016130a7565b909450925050608087013567ffffffffffffffff81111561327f57600080fd5b6000806040838503121561356657600080fd5b823561357181613092565b915060208301356134b581613092565b6000806040838503121561359457600080fd5b823561359f81613092565b9150602083013567ffffffffffffffff8111156135bb57600080fd5b6135c785828601612fe5565b9150509250929050565b600080600080600080600060e0888a0312156135ec57600080fd5b873567ffffffffffffffff81111561360357600080fd5b61360f8a828b01612fe5565b97505060208801359550604088013561362781613092565b9450606088013567ffffffffffffffff81111561345457600080fd5b6000806000806080858703121561365957600080fd5b843567ffffffffffffffff81111561367057600080fd5b61367c87828801612fe5565b94505060208501359250604085013561369481613092565b9150606085013567ffffffffffffffff8111156136b057600080fd5b6136bc878288016130f0565b91505092959194509250565b600080600080608085870312156136de57600080fd5b843567ffffffffffffffff8111156136f557600080fd5b61370187828801612fe5565b9450506020850135925060408501359150606085013567ffffffffffffffff8111156136b057600080fd5b60005b8381101561374757818101518382015260200161372f565b50506000910152565b6000815180845261376881602086016020860161372c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006121916020830184613750565b60008060008060008060a087890312156137c657600080fd5b863567ffffffffffffffff8111156137dd57600080fd5b6137e989828a01613334565b96505060208701356137fa81613092565b945060408701359350606087013561381181613092565b9250608087013567ffffffffffffffff81111561382d57600080fd5b61383989828a016130a7565b979a9699509497509295939492505050565b60006080828403121561310257600080fd5b6000806000806080858703121561387357600080fd5b843561387e81613092565b935060208501359250604085013561389581613092565b9150606085013567ffffffffffffffff8111156138b157600080fd5b6136bc8782880161384b565b600080604083850312156138d057600080fd5b82356138db81613092565b9150602083013567ffffffffffffffff8111156138f757600080fd5b6135c78582860161384b565b60008060006060848603121561391857600080fd5b833561392381613092565b925060208401359150604084013561393a81613092565b809150509250925092565b60006020828403121561395757600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8015158114610ec657600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126139ea57600080fd5b830160208101925035905067ffffffffffffffff811115613a0a57600080fd5b8036038213156130e957600080fd5b60008135613a2681613092565b6001600160a01b031683526020820135613a3f816139a7565b151560208401526040820135613a5481613092565b6001600160a01b03166040840152613a6f60608301836139b5565b60a06060860152613a8460a08601828461395e565b6080948501359590940194909452509092915050565b61012081526000613aaf61012083018c613750565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a0840152613ae381878961395e565b855160c08501526020860151151560e085015290505b828103610100840152613b0c8185613a19565b9c9b505050505050505050505050565b60006040828403128015613b2f57600080fd5b506040805190810167ffffffffffffffff81118282101715613b5357613b53612fb6565b604052823581526020830135613b68816139a7565b60208201529392505050565b600060a08236031215613b8657600080fd5b60405160a0810167ffffffffffffffff81118282101715613ba957613ba9612fb6565b6040528235613bb781613092565b81526020830135613bc7816139a7565b60208201526040830135613bda81613092565b6040820152606083013567ffffffffffffffff811115613bf957600080fd5b613c0536828601612fe5565b606083015250608092830135928101929092525090565b608081526000613c2c87886139b5565b60606080850152613c4160e08501828461395e565b9150506020880135613c5281613092565b6001600160a01b0390811660a085015260408981013560c0860152908816602085015283018690528281036060840152613c8d81858761395e565b98975050505050505050565b803582526020810135613cab816139a7565b8015156020840152505050565b61012081526000613ccd61012083018c613750565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a0840152613d0181878961395e565b9050613af960c0840186613c99565b61012081526000613d2561012083018a613750565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a085015260008252613d6c60c0850187805182526020908101511515910152565b6020810161010085015250613d846020820185613a19565b9a9950505050505050505050565b600060208284031215613da457600080fd5b8151612191816139a7565b6020815260008235613dc081613092565b6001600160a01b0381166020840152506020830135613dde81613092565b6001600160a01b038116604084015250604083013567ffffffffffffffff8116808214613e0a57600080fd5b8060608501525050613e1f60608401846139b5565b608080850152612e7c60a08501828461395e565b60008060408385031215613e4657600080fd5b8251613e5181613092565b6020939093015192949293505050565b60a081526000613e7460a0830188613750565b8281036020840152613e8781878961395e565b85516040850152602086015115156060850152905082810360808401526001600160a01b0384511681526020840151151560208201526001600160a01b036040850151166040820152606084015160a06060830152613ee960a0830182613750565b90506080850151608083015280925050509695505050505050565b60008251613f1681846020870161372c565b919091019291505056fea2646970667358221220a8dfa62236301cdcf36e8ee3551178d37b873be7a2682b1ac58513cd64f6bc2e64736f6c634300081a0033", } // GatewayZEVMABI is the input ABI used to generate the binding from. @@ -646,23 +647,23 @@ func (_GatewayZEVM *GatewayZEVMTransactorSession) DepositAndCall0(context ZConte return _GatewayZEVM.Contract.DepositAndCall0(&_GatewayZEVM.TransactOpts, context, zrc20, amount, target, message) } -// DepositAndRevert is a paid mutator transaction binding the contract method 0x0310eb76. +// DepositAndRevert is a paid mutator transaction binding the contract method 0xcd73d4c7. // -// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,uint64,bytes) revertContext) returns() +// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,address,uint64,bytes) revertContext) returns() func (_GatewayZEVM *GatewayZEVMTransactor) DepositAndRevert(opts *bind.TransactOpts, zrc20 common.Address, amount *big.Int, target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _GatewayZEVM.contract.Transact(opts, "depositAndRevert", zrc20, amount, target, revertContext) } -// DepositAndRevert is a paid mutator transaction binding the contract method 0x0310eb76. +// DepositAndRevert is a paid mutator transaction binding the contract method 0xcd73d4c7. // -// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,uint64,bytes) revertContext) returns() +// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,address,uint64,bytes) revertContext) returns() func (_GatewayZEVM *GatewayZEVMSession) DepositAndRevert(zrc20 common.Address, amount *big.Int, target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _GatewayZEVM.Contract.DepositAndRevert(&_GatewayZEVM.TransactOpts, zrc20, amount, target, revertContext) } -// DepositAndRevert is a paid mutator transaction binding the contract method 0x0310eb76. +// DepositAndRevert is a paid mutator transaction binding the contract method 0xcd73d4c7. // -// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,uint64,bytes) revertContext) returns() +// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,address,uint64,bytes) revertContext) returns() func (_GatewayZEVM *GatewayZEVMTransactorSession) DepositAndRevert(zrc20 common.Address, amount *big.Int, target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _GatewayZEVM.Contract.DepositAndRevert(&_GatewayZEVM.TransactOpts, zrc20, amount, target, revertContext) } @@ -688,23 +689,23 @@ func (_GatewayZEVM *GatewayZEVMTransactorSession) Execute(context ZContext, zrc2 return _GatewayZEVM.Contract.Execute(&_GatewayZEVM.TransactOpts, context, zrc20, amount, target, message) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0x717d335f. +// ExecuteRevert is a paid mutator transaction binding the contract method 0xe7d926b4. // -// Solidity: function executeRevert(address target, (address,uint64,bytes) revertContext) returns() +// Solidity: function executeRevert(address target, (address,address,uint64,bytes) revertContext) returns() func (_GatewayZEVM *GatewayZEVMTransactor) ExecuteRevert(opts *bind.TransactOpts, target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _GatewayZEVM.contract.Transact(opts, "executeRevert", target, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0x717d335f. +// ExecuteRevert is a paid mutator transaction binding the contract method 0xe7d926b4. // -// Solidity: function executeRevert(address target, (address,uint64,bytes) revertContext) returns() +// Solidity: function executeRevert(address target, (address,address,uint64,bytes) revertContext) returns() func (_GatewayZEVM *GatewayZEVMSession) ExecuteRevert(target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _GatewayZEVM.Contract.ExecuteRevert(&_GatewayZEVM.TransactOpts, target, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0x717d335f. +// ExecuteRevert is a paid mutator transaction binding the contract method 0xe7d926b4. // -// Solidity: function executeRevert(address target, (address,uint64,bytes) revertContext) returns() +// Solidity: function executeRevert(address target, (address,address,uint64,bytes) revertContext) returns() func (_GatewayZEVM *GatewayZEVMTransactorSession) ExecuteRevert(target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _GatewayZEVM.Contract.ExecuteRevert(&_GatewayZEVM.TransactOpts, target, revertContext) } diff --git a/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go b/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go index 9b1ce1af..fd6bb2e7 100644 --- a/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go +++ b/v2/pkg/gatewayzevm.t.sol/gatewayzevminboundtest.go @@ -65,7 +65,7 @@ type StdInvariantFuzzSelector struct { // GatewayZEVMInboundTestMetaData contains all meta data concerning the GatewayZEVMInboundTest contract. var GatewayZEVMInboundTestMetaData = &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\":\"testCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallWithCallOpts\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallWithCallOptsFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZETAFailsIfAmountIsReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZETAFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZETAWithCallOptsFailsIfAmountIsReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZETAWithCallOptsFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20WithCallOptsFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallZRC20WithCallOptsFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETA\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithCallOptsWithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithCallOptsWithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZETAWithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfNoBalanceForTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20FailsIsAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithCallOptsWithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessage\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessageFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawZRC20WithMessageWithCallOptsFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"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\":\"CallerIsNotProtocol\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyMessage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrProtocol\",\"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: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ff668061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102f45760003560e01c80636d6ce0d011610191578063ceccfab3116100e3578063e804a40611610097578063fa7626d411610071578063fa7626d414610495578063fbc611c8146104a2578063fdad0ad0146104aa57600080fd5b8063e804a4061461032b578063ea37902f14610485578063eb7a2fac1461048d57600080fd5b8063dde7e967116100c8578063dde7e9671461046d578063e20c9f7114610475578063e51c63881461047d57600080fd5b8063ceccfab31461045d578063dc749dd71461046557600080fd5b8063b51ac07111610145578063ba414fa61161011f578063ba414fa614610435578063ba800c911461044d578063ba9adeef1461045557600080fd5b8063b51ac0711461041d578063b5508aa914610425578063b7f058361461042d57600080fd5b806385226c811161017657806385226c81146103eb578063916a17c614610400578063b0464fdc1461041557600080fd5b80636d6ce0d0146103db57806383ababa9146103e357600080fd5b806339cbb4571161024a57806343181437116101fe5780636198fb19116101d85780636198fb19146103b65780636221b509146103be57806366d9a9a0146103c657600080fd5b8063431814371461039e5780635006fd80146103a65780635d72228f146103ae57600080fd5b80633f7286f41161022f5780633f7286f414610386578063423a58741461038e57806342752d411461039657600080fd5b806339cbb457146103765780633e5e3c231461037e57600080fd5b80631b9641bf116102ac57806321aeb18c1161028657806321aeb18c146103515780632ade38801461035957806336431b3f1461036e57600080fd5b80631b9641bf146103235780631e63d2b91461032b5780631ed7831c1461033357600080fd5b80631238212c116102dd5780631238212c1461030b578063147597661461031357806318a4cfdc1461031b57600080fd5b806304019fba146102f95780630a9254e414610303575b600080fd5b6103016104b2565b005b610301610620565b6103016111b5565b610301611571565b6103016119dd565b610301611cec565b610301611e63565b61033b612267565b6040516103489190619fde565b60405180910390f35b6103016122c9565b6103616123e9565b604051610348919061a07a565b61030161252b565b61030161266d565b61033b6127c5565b61033b612825565b610301612885565b6103016129d4565b610301612b26565b610301612c61565b6103016130ff565b610301613451565b610301613674565b6103ce613899565b604051610348919061a1e0565b610301613a1b565b610301613d20565b6103f3613e04565b604051610348919061a27e565b610408613ed4565b604051610348919061a2f5565b610408613fcf565b6103016140ca565b6103f36141c9565b610301614299565b61043d61445f565b6040519015158152602001610348565b610301614533565b610301614649565b6103016147c0565b610301614b0c565b610301614baf565b61033b614fee565b61030161504e565b6103016153a5565b61030161579a565b601f5461043d9060ff1681565b6103016158dd565b610301615c6a565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905251630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561057a57600080fd5b505af115801561058e573d6000803e3d6000fd5b5050602080546040805160008152928301908190527f3b2839330000000000000000000000000000000000000000000000000000000090526001600160a01b03169250633b28393391506105eb906001808660286024850161a4c8565b600060405180830381600087803b15801561060557600080fd5b505af1158015610619573d6000803e3d6000fd5b5050505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161066690619ef1565b604051809103906000f080158015610682573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526025549151602481019390935292166044820152610766919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052615de0565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f2722feee0000000000000000000000000000000000000000000000000000000081529051632722feee926004808401939192918290030181865afa158015610828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084c919061a519565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161089090619efe565b604051809103906000f0801580156108ac573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b15801561094857600080fd5b505af115801561095c573d6000803e3d6000fd5b50505050600080600060405161097190619f0b565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156109ad573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602054604051601293600193849360009391921690610a0390619f18565b610a129695949392919061a542565b604051809103906000f080158015610a2e573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610ac557600080fd5b505af1158015610ad9573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610b4357600080fd5b505af1158015610b57573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610bd757600080fd5b505af1158015610beb573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c4057600080fd5b505af1158015610c54573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec919061a637565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d81919061a637565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610de057600080fd5b505af1158015610df4573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f16919061a637565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610f6857600080fd5b505af1158015610f7c573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611014919061a637565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561107357600080fd5b505af1158015611087573d6000803e3d6000fd5b50506040805160a08101825261032180825260016020808401918252838501928352845190810190945260008085526060840185905260808401528251602880549251151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009093166001600160a01b0392831617929092178255915160298054919093167fffffffffffffffffffffffff000000000000000000000000000000000000000091909116179091559093509150602a9061115e908261a6cf565b50608091909101516003909101556040805180820190915260018082526020909101819052602c819055602d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a919061a78e565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561129f57600080fd5b505af11580156112b3573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015611325573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611349919061a637565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b15801561140c57600080fd5b505af1158015611420573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526114ba9288916001600160a01b031690879060019060289060040161a7a7565b600060405180830381600087803b1580156114d457600080fd5b505af11580156114e8573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561153b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155f919061a78e565b905061156b8382615dff565b50505050565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e6919061a78e565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611638573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165c919061a78e565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b1790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b03909216608482015291925090737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561175257600080fd5b505af1158015611766573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c9060340160408051601f19818403018152908290526022546117f8926001600160a01b03909116908c9060009081908b90602c9060289061a808565b60405180910390a3602080546026546040516001600160a01b0392831693632810ae63936118409316910160609190911b6bffffffffffffffffffffffff1916815260140190565b604051602081830303815290604052888486602c60286040518763ffffffff1660e01b81526004016118779695949392919061a87c565b600060405180830381600087803b15801561189157600080fd5b505af11580156118a5573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156118f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191c919061a78e565b905061193261192c60018861a906565b82615dff565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611983573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a7919061a78e565b90506119b38682615dff565b6119d36119c186600161a919565b6027546001600160a01b031631615dff565b5050505050505050565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a52919061a78e565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac8919061a78e565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b1790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b03909216608482015291925090737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611bbe57600080fd5b505af1158015611bd2573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c9060340160408051601f1981840301815260225483830183526000808552600160208601529251611c709492936001600160a01b03909216928e929182918c9160289061a92c565b60405180910390a3602080546026546040516001600160a01b0392831693633b28393393611cb89316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60405160208183030381529060405288848660286040518663ffffffff1660e01b815260040161187795949392919061a4c8565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905251630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611db457600080fd5b505af1158015611dc8573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637b15118b915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526105eb926000916001600160a01b0316908790602c9060289060040161a98e565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611eb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed8919061a78e565b6026546040516001600160a01b03909116602482015290915060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b1790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b039092166084820152919250908190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611fca57600080fd5b505af1158015611fde573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c9060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216918b9189918491634d8943bb916004808201926020929091908290030181865afa1580156120b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d4919061a78e565b6040805180820182528a81526001602082015290516120fc9695949392918d9160289061a92c565b60405180910390a3602080546026546040516001600160a01b039283169363048ae42c936121449316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526121a0928a916001600160a01b0316908990889060289060040161a7a7565b600060405180830381600087803b1580156121ba57600080fd5b505af11580156121ce573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612221573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612245919061a78e565b905061225f83612255888861a906565b61192c919061a906565b505050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156122bf57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116122a1575b5050505050905090565b604051630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561233557600080fd5b505af1158015612349573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b031692506397a1cef191506034015b6040516020818303038152906040526000600160286040518563ffffffff1660e01b81526004016123bb949392919061a9c8565b600060405180830381600087803b1580156123d557600080fd5b505af115801561156b573d6000803e3d6000fd5b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561252257600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561250b57838290600052602060002001805461247e9061a38c565b80601f01602080910402602001604051908101604052809291908181526020018280546124aa9061a38c565b80156124f75780601f106124cc576101008083540402835291602001916124f7565b820191906000526020600020905b8154815290600101906020018083116124da57829003601f168201915b50505050508152602001906001019061245f565b50505050815250508152602001906001019061240d565b50505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905251630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156125f357600080fd5b505af1158015612607573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f048ae42c000000000000000000000000000000000000000000000000000000009091526001600160a01b03918216945063048ae42c93506105eb929160019116868260286024860161a7a7565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905251630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561273557600080fd5b505af1158015612749573d6000803e3d6000fd5b5050602080546040516001600160a01b039091169350631cb5ea759250015b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526105eb926001600160a01b0390911690869060019060289060040161a9f9565b606060188054806020026020016040519081016040528092919081815260200182805480156122bf576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116122a1575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156122bf576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116122a1575050505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905251630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561294d57600080fd5b505af1158015612961573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250633b2839339150603401604051602081830303815290604052600060018560286040518663ffffffff1660e01b81526004016105eb95949392919061a4c8565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905251630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612a9c57600080fd5b505af1158015612ab0573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250632810ae6391506034016040516020818303038152906040526000600185602c60286040518763ffffffff1660e01b81526004016105eb9695949392919061a87c565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905251630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612bee57600080fd5b505af1158015612c02573d6000803e3d6000fd5b5050602080546040805160008152928301908190527f2810ae630000000000000000000000000000000000000000000000000000000090526001600160a01b03169250632810ae6391506105eb9060018086602c60286024860161a87c565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd6919061a78e565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015612d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4c919061a78e565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e2757600080fd5b505af1158015612e3b573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015612ead573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed1919061a637565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612f3057600080fd5b505af1158015612f44573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250633b283933915060340160405160208183030381529060405288848660286040518663ffffffff1660e01b8152600401612fb595949392919061a4c8565b600060405180830381600087803b158015612fcf57600080fd5b505af1158015612fe3573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015613036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305a919061a78e565b90506130668682615dff565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156130b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130db919061a78e565b90506130e78682615dff565b6027546119d39086906001600160a01b031631615dff565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613150573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613174919061a78e565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156131e957600080fd5b505af11580156131fd573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561326f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613293919061a637565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132f257600080fd5b505af1158015613306573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261339b9287916001600160a01b03169060289060040161aa47565b600060405180830381600087803b1580156133b557600080fd5b505af11580156133c9573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561341c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613440919061a78e565b905061344c8282615dff565b505050565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b1790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b505060215460255460265460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039283169450911691507f306ee13f48319a123b222c69908e44dcf91abffc20cacc502e3cf5a4ff23e0e49060340160408051601f19818403018152908290526135cf918690602c9060289061aa81565b60405180910390a3602080546026546040516001600160a01b03928316936306cb8983936136179316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526105eb926001600160a01b03909116908690602c9060289060040161aad0565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156136c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e9919061a78e565b6022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015613756573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061377a919061a637565b506000600190507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137df57600080fd5b505af11580156137f3573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b031692506397a1cef19150603401604051602081830303815290604052858460286040518563ffffffff1660e01b8152600401613862949392919061a9c8565b600060405180830381600087803b15801561387c57600080fd5b505af1158015613890573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561252257838290600052602060002090600202016040518060400160405290816000820180546138f09061a38c565b80601f016020809104026020016040519081016040528092919081815260200182805461391c9061a38c565b80156139695780601f1061393e57610100808354040283529160200191613969565b820191906000526020600020905b81548152906001019060200180831161394c57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015613a0357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116139b05790505b505050505081525050815260200190600101906138bd565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613a6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a90919061a78e565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613b0557600080fd5b505af1158015613b19573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015613b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613baf919061a637565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b158015613c7257600080fd5b505af1158015613c86573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637b15118b915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526114ba9288916001600160a01b0316908790602c9060289060040161a98e565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613d8c57600080fd5b505af1158015613da0573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f7c0dcb5f000000000000000000000000000000000000000000000000000000009091526001600160a01b039182169450637c0dcb5f93506123bb92916001911660286024840161aa47565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015612522578382906000526020600020018054613e479061a38c565b80601f0160208091040260200160405190810160405280929190818152602001828054613e739061a38c565b8015613ec05780601f10613e9557610100808354040283529160200191613ec0565b820191906000526020600020905b815481529060010190602001808311613ea357829003601f168201915b505050505081526020019060010190613e28565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156125225760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015613fb757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411613f645790505b50505050508152505081526020019060010190613ef8565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156125225760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156140b257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161405f5790505b50505050508152505081526020019060010190613ff3565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905251630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561419257600080fd5b505af11580156141a6573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911693506306cb8983925001613617565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561252257838290600052602060002001805461420c9061a38c565b80601f01602080910402602001604051908101604052809291908181526020018280546142389061a38c565b80156142855780601f1061425a57610100808354040283529160200191614285565b820191906000526020600020905b81548152906001019060200180831161426857829003601f168201915b5050505050815260200190600101906141ed565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b1790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561438357600080fd5b505af1158015614397573d6000803e3d6000fd5b505060215460255460265460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039283169450911691507f306ee13f48319a123b222c69908e44dcf91abffc20cacc502e3cf5a4ff23e0e49060340160408051601f1981840301815290829052614417918690602c9060289061aa81565b60405180910390a3602080546026546040516001600160a01b0392831693631cb5ea75936127689316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60085460009060ff1615614477575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015614508573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061452c919061a78e565b1415905090565b604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561459f57600080fd5b505af11580156145b3573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526123bb926000916001600160a01b03169060289060040161aa47565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905251630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561471157600080fd5b505af1158015614725573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526105eb926000916001600160a01b031690879060019060289060040161a7a7565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614811573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614835919061a78e565b6021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156148a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148c6919061a637565b506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561493957600080fd5b505af115801561494d573d6000803e3d6000fd5b50506021546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526001600160a01b03909116925063f687d12a9150602401600060405180830381600087803b1580156149b057600080fd5b505af11580156149c4573d6000803e3d6000fd5b5050604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b158015614a3557600080fd5b505af1158015614a49573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352614ade9287916001600160a01b03169060289060040161aa47565b600060405180830381600087803b158015614af857600080fd5b505af115801561225f573d6000803e3d6000fd5b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614b7857600080fd5b505af1158015614b8c573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911693506397a1cef1925001612387565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c24919061a78e565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015614c76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c9a919061a78e565b6027546025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152929350163190600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614d1857600080fd5b505af1158015614d2c573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015614d9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dc2919061a637565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614e2157600080fd5b505af1158015614e35573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b031692506397a1cef19150603401604051602081830303815290604052878460286040518563ffffffff1660e01b8152600401614ea4949392919061a9c8565b600060405180830381600087803b158015614ebe57600080fd5b505af1158015614ed2573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f49919061a78e565b9050614f558582615dff565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fca919061a78e565b9050614fd68582615dff565b6027546138909085906001600160a01b031631615dff565b606060158054806020026020016040519081016040528092919081815260200182805480156122bf576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116122a1575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561509f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150c3919061a78e565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015615115573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615139919061a78e565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561521457600080fd5b505af1158015615228573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561529a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906152be919061a637565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561531d57600080fd5b505af1158015615331573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250632810ae639150603401604051602081830303815290604052888486602c60286040518763ffffffff1660e01b8152600401612fb59695949392919061a87c565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156153f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061541a919061a78e565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa15801561546c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615490919061a78e565b6027546020546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b0392831660848301529394509116319190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561552b57600080fd5b505af115801561553f573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c9060340160408051601f19818403018152602254838301835260008085526001602086015292516155dc9492936001600160a01b03909216928d929182919060289061ab2e565b60405180910390a3602080546026546040516001600160a01b03928316936397a1cef1936156249316910160609190911b6bffffffffffffffffffffffff1916815260140190565b604051602081830303815290604052878460286040518563ffffffff1660e01b8152600401615656949392919061a9c8565b600060405180830381600087803b15801561567057600080fd5b505af1158015615684573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156156d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156fb919061a78e565b905061570b61192c60018761a906565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561575c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615780919061a78e565b905061578c8582615dff565b6138906119c185600161a919565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905251630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561586257600080fd5b505af1158015615876573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f7b15118b000000000000000000000000000000000000000000000000000000009091526001600160a01b039182169450637b15118b93506105eb92916001911686602c60286024860161a98e565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561592e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615952919061a78e565b6020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156159e357600080fd5b505af11580156159f7573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c9060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa158015615aca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615aee919061a78e565b60408051808201825260008152600160208201529051615b169695949392919060289061ab2e565b60405180910390a3602080546026546040516001600160a01b0392831693637c0dcb5f93615b5e9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352615bb69287916001600160a01b03169060289060040161aa47565b600060405180830381600087803b158015615bd057600080fd5b505af1158015615be4573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015615c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615c5b919061a78e565b905061344c61192c848461a906565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260029260009216906370a0823190602401602060405180830381865afa158015615cbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615cdf919061a78e565b6021549091506001600160a01b031663a9059cbb610123615d0160018561a906565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015615d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615d88919061a637565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401614a1b565b6000615dea619f25565b615df5848483615e7e565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015615e6a57600080fd5b505afa15801561225f573d6000803e3d6000fd5b600080615e8b8584615ef9565b9050615eee6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001615ed992919061abb0565b60405160208183030381529060405285615f05565b9150505b9392505050565b6000615ef28383615f33565b60c08101515160009015615f2957615f2284848460c00151615f4e565b9050615ef2565b615f2284846160f4565b6000615f3f83836161df565b615ef283836020015184615f05565b600080615f596161ef565b90506000615f6786836162c2565b90506000615f7e8260600151836020015185616768565b90506000615f8e8383898961697a565b90506000615f9b826177f7565b602081015181519192509060030b1561600e57898260400151604051602001615fc592919061abd2565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526160059160040161ac53565b60405180910390fd5b60006160516040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016179c6565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906160a490849060040161ac53565b602060405180830381865afa1580156160c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906160e5919061a519565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061614990879060040161ac53565b600060405180830381865afa158015616166573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261618e919081019061ad1f565b905060006161bc82856040516020016161a892919061ad54565b604051602081830303815290604052617bc6565b90506001600160a01b038116615df5578484604051602001615fc592919061ad83565b6161eb82826000617bd9565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061627690849060040161ae2e565b600060405180830381865afa158015616293573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526162bb919081019061ae75565b9250505090565b6162f46040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d905061633f6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61634885617cdc565b60208201526000616358866180c1565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561639a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526163c2919081019061ae75565b868385602001516040516020016163dc949392919061aebe565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061643490859060040161ac53565b600060405180830381865afa158015616451573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616479919081019061ae75565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906164c190849060040161afc2565b602060405180830381865afa1580156164de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616502919061a637565b6165175781604051602001615fc5919061b014565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061655c90849060040161b0a6565b600060405180830381865afa158015616579573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526165a1919081019061ae75565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906165e890849060040161b0f8565b602060405180830381865afa158015616605573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616629919061a637565b156166be576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061667390849060040161b0f8565b600060405180830381865afa158015616690573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526166b8919081019061ae75565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016166e3919061b14a565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161670f92919061b1b6565b600060405180830381865afa15801561672c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616754919081019061ae75565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816167845790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106167e4576167e461b1db565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106168385761683861b1db565b602002602001018190525084604051602001616854919061b20a565b604051602081830303815290604052816002815181106168765761687661b1db565b602002602001018190525082604051602001616892919061b276565b604051602081830303815290604052816003815181106168b4576168b461b1db565b602002602001018190525060006168ca826177f7565b602080820151604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000818501908152825180840184526000808252908601528251808401909352905182529281019290925291925061695b9060408051808201825260008082526020918201528151808301909252845182528085019082015290618344565b6169705785604051602001615fc5919061b2b7565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156169ca565b511590565b616b3e57826020015115616a86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616005565b8260c0015115616b3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616005565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081616b5757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616bb29061b348565b935060ff1681518110616bc757616bc761b1db565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616c18919061b367565b604051602081830303815290604052828280616c339061b348565b935060ff1681518110616c4857616c4861b1db565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280616c959061b348565b935060ff1681518110616caa57616caa61b1db565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280616cf79061b348565b935060ff1681518110616d0c57616d0c61b1db565b60200260200101819052508760200151828280616d289061b348565b935060ff1681518110616d3d57616d3d61b1db565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280616d8a9061b348565b935060ff1681518110616d9f57616d9f61b1db565b602090810291909101015287518282616db78161b348565b935060ff1681518110616dcc57616dcc61b1db565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280616e199061b348565b935060ff1681518110616e2e57616e2e61b1db565b6020026020010181905250616e42466183a5565b8282616e4d8161b348565b935060ff1681518110616e6257616e6261b1db565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280616eaf9061b348565b935060ff1681518110616ec457616ec461b1db565b602002602001018190525086828280616edc9061b348565b935060ff1681518110616ef157616ef161b1db565b60209081029190910101528551156170185760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282616f428161b348565b935060ff1681518110616f5757616f5761b1db565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90616fa790899060040161ac53565b600060405180830381865afa158015616fc4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616fec919081019061ae75565b8282616ff78161b348565b935060ff168151811061700c5761700c61b1db565b60200260200101819052505b8460200151156170e85760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826170618161b348565b935060ff16815181106170765761707661b1db565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806170c39061b348565b935060ff16815181106170d8576170d861b1db565b60200260200101819052506172af565b6171206169c58660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6171b35760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826171638161b348565b935060ff16815181106171785761717861b1db565b60200260200101819052508460a00151604051602001617198919061b20a565b6040516020818303038152906040528282806170c39061b348565b8460c001511580156171f65750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526171f490511590565b155b156172af5760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261723a8161b348565b935060ff168151811061724f5761724f61b1db565b602002602001018190525061726388618445565b604051602001617273919061b20a565b60405160208183030381529060405282828061728e9061b348565b935060ff16815181106172a3576172a361b1db565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526172e390511590565b6173785760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826173268161b348565b935060ff168151811061733b5761733b61b1db565b602002602001018190525084604001518282806173579061b348565b935060ff168151811061736c5761736c61b1db565b60200260200101819052505b6060850151156174995760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826173c18161b348565b935060ff16815181106173d6576173d661b1db565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261746d919081019061ae75565b82826174788161b348565b935060ff168151811061748d5761748d61b1db565b60200260200101819052505b60e085015151156175405760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826174e38161b348565b935060ff16815181106174f8576174f861b1db565b60200260200101819052506175148560e00151600001516183a5565b828261751f8161b348565b935060ff16815181106175345761753461b1db565b60200260200101819052505b60e085015160200151156175ea5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261758d8161b348565b935060ff16815181106175a2576175a261b1db565b60200260200101819052506175be8560e00151602001516183a5565b82826175c98161b348565b935060ff16815181106175de576175de61b1db565b60200260200101819052505b60e085015160400151156176945760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826176378161b348565b935060ff168151811061764c5761764c61b1db565b60200260200101819052506176688560e00151604001516183a5565b82826176738161b348565b935060ff16815181106176885761768861b1db565b60200260200101819052505b60e0850151606001511561773e5760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826176e18161b348565b935060ff16815181106176f6576176f661b1db565b60200260200101819052506177128560e00151606001516183a5565b828261771d8161b348565b935060ff16815181106177325761773261b1db565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561775c5761775c61a659565b60405190808252806020026020018201604052801561778f57816020015b606081526020019060019003908161777a5790505b50905060005b8260ff168160ff1610156177e857838160ff16815181106177b8576177b861b1db565b6020026020010151828260ff16815181106177d5576177d561b1db565b6020908102919091010152600101617795565b5093505050505b949350505050565b61781e6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916178a49186910161b3d2565b600060405180830381865afa1580156178c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526178e9919081019061ae75565b905060006178f78683618f34565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617927919061a27e565b6000604051808303816000875af1158015617946573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261796e919081019061b419565b805190915060030b158015906179875750602081015151155b80156179965750604081015151155b1561697057816000815181106179ae576179ae61b1db565b6020026020010151604051602001615fc5919061b4cf565b606060006179fb8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150617a329082905b90619089565b15617b8f576000617aaf82617aa984617aa3617a758a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906190b0565b90619112565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617b13908290619089565b15617b7d57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b7a905b8290619197565b90505b617b86816191bd565b92505050615ef2565b8215617ba8578484604051602001615fc592919061b6bb565b5050604080516020810190915260008152615ef2565b509392505050565b6000808251602084016000f09392505050565b8160a0015115617be857505050565b6000617bf5848484619226565b90506000617c02826177f7565b602081015181519192509060030b158015617c9e5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c9e90604080518082018252600080825260209182015281518083019092528451825280850190820152617a2c565b15617cab57505050505050565b60408201515115617ccb578160400151604051602001615fc5919061b762565b80604051602001615fc5919061b7c0565b60606000617d118360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617d76905b8290618344565b15617de557604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ef290617de09083906197c1565b6191bd565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e47905b829061984b565b600103617f1457604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ead90617b73565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ef290617de0905b8390619197565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f7390617d6f565b156180aa57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617fdb9083906198e5565b905060008160018351617fee919061a906565b81518110617ffe57617ffe61b1db565b602002602001015190506180a1617de06180746040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906197c1565b95945050505050565b82604051602001615fc5919061b82b565b50919050565b606060006180f68360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061815890617d6f565b1561816657615ef2816191bd565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526181c590617e40565b60010361822f57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ef290617de090617f0d565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261828e90617d6f565b156180aa57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906182f69083906198e5565b9050600181511115618332578060028251618311919061a906565b815181106183215761832161b1db565b602002602001015192505050919050565b5082604051602001615fc5919061b82b565b80518251600091111561835957506000615df9565b8151835160208501516000929161836f9161a919565b618379919061a906565b905082602001518103618390576001915050615df9565b82516020840151819020912014905092915050565b606060006183b28361998a565b600101905060008167ffffffffffffffff8111156183d2576183d261a659565b6040519080825280601f01601f1916602001820160405280156183fc576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461840657509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916184d1905b8290619a6c565b1561851157505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618570906184ca565b156185b057505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261860f906184ca565b1561864f57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526186ae906184ca565b806187135750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618713906184ca565b1561875357505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526187b2906184ca565b806188175750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618817906184ca565b1561885757505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188b6906184ca565b8061891b5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261891b906184ca565b1561895b57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189ba906184ca565b80618a1f5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a1f906184ca565b15618a5f57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618abe906184ca565b15618afe57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618b5d906184ca565b15618b9d57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618bfc906184ca565b15618c3c57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c9b906184ca565b15618cdb57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d3a906184ca565b15618d7a57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618dd9906184ca565b80618e3e5750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e3e906184ca565b15618e7e57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618edd906184ca565b15618f1d57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151615fc5929060200161b909565b60608060005b8451811015618fbf5781858281518110618f5657618f5661b1db565b6020026020010151604051602001618f6f92919061ad54565b604051602081830303815290604052915060018551618f8e919061a906565b8114618fb75781604051602001618fa5919061ba72565b60405160208183030381529060405291505b600101618f3a565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081618fd857905050905083816000815181106190035761900361b1db565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106190575761905761b1db565b602002602001018190525081816002815181106190765761907661b1db565b6020908102919091010152949350505050565b60208083015183518351928401516000936190a79291849190619a80565b14159392505050565b604080518082019091526000808252602082015260006190e28460000151856020015185600001518660200151619b91565b90508360200151816190f4919061a906565b8451859061910390839061a906565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015619137575081615df9565b602080830151908401516001911461915e5750815160208481015190840151829020919020145b801561918f5782518451859061917590839061a906565b905250825160208501805161918b90839061a919565b9052505b509192915050565b60408051808201909152600080825260208201526191b6838383619cb1565b5092915050565b60606000826000015167ffffffffffffffff8111156191de576191de61a659565b6040519080825280601f01601f191660200182016040528015619208576020820181803683370190505b50905060006020820190506191b68185602001518660000151619d5c565b606060006192326161ef565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161924f57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806192aa9061b348565b935060ff16815181106192bf576192bf61b1db565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619310919061bab3565b60405160208183030381529060405282828061932b9061b348565b935060ff16815181106193405761934061b1db565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061938d9061b348565b935060ff16815181106193a2576193a261b1db565b6020026020010181905250826040516020016193be919061b276565b6040516020818303038152906040528282806193d99061b348565b935060ff16815181106193ee576193ee61b1db565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061943b9061b348565b935060ff16815181106194505761945061b1db565b60200260200101819052506194658784619dd6565b82826194708161b348565b935060ff16815181106194855761948561b1db565b6020908102919091010152855151156195315760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826194d78161b348565b935060ff16815181106194ec576194ec61b1db565b6020026020010181905250619505866000015184619dd6565b82826195108161b348565b935060ff16815181106195255761952561b1db565b60200260200101819052505b85608001511561959f5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261957a8161b348565b935060ff168151811061958f5761958f61b1db565b6020026020010181905250619605565b84156196055760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826195e48161b348565b935060ff16815181106195f9576195f961b1db565b60200260200101819052505b604086015151156196a15760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261964f8161b348565b935060ff16815181106196645761966461b1db565b602002602001018190525085604001518282806196809061b348565b935060ff16815181106196955761969561b1db565b60200260200101819052505b85606001511561970b5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826196ea8161b348565b935060ff16815181106196ff576196ff61b1db565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156197295761972961a659565b60405190808252806020026020018201604052801561975c57816020015b60608152602001906001900390816197475790505b50905060005b8260ff168160ff1610156197b557838160ff16815181106197855761978561b1db565b6020026020010151828260ff16815181106197a2576197a261b1db565b6020908102919091010152600101619762565b50979650505050505050565b60408051808201909152600080825260208201528151835110156197e6575081615df9565b815183516020850151600092916197fc9161a919565b619806919061a906565b60208401519091506001908214619827575082516020840151819020908220145b80156198425783518551869061983e90839061a906565b9052505b50929392505050565b600080826000015161986f8560000151866020015186600001518760200151619b91565b619879919061a919565b90505b8351602085015161988d919061a919565b81116191b6578161989d8161baf8565b92505082600001516198d48560200151836198b8919061a906565b86516198c4919061a906565b8386600001518760200151619b91565b6198de919061a919565b905061987c565b606060006198f3848461984b565b6198fe90600161a919565b67ffffffffffffffff8111156199165761991661a659565b60405190808252806020026020018201604052801561994957816020015b60608152602001906001900390816199345790505b50905060005b8151811015617bbe57619965617de08686619197565b8282815181106199775761997761b1db565b602090810291909101015260010161994f565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106199d3577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106199ff576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310619a1d57662386f26fc10000830492506010015b6305f5e1008310619a35576305f5e100830492506008015b6127108310619a4957612710830492506004015b60648310619a5b576064830492506002015b600a8310615df95760010192915050565b6000619a788383619e16565b159392505050565b600080858411619b875760208411619b335760008415619acb576001619aa786602061a906565b619ab290600861bb12565b619abd90600261bc10565b619ac7919061a906565b1990505b8351811685619ada898961a919565b619ae4919061a906565b805190935082165b818114619b1e57878411619b0657879450505050506177ef565b83619b108161bc1c565b945050828451169050619aec565b619b28878561a919565b9450505050506177ef565b838320619b40858861a906565b619b4a908761a919565b91505b858210619b8557848220808203619b7257619b68868461a919565b93505050506177ef565b619b7d60018461a906565b925050619b4d565b505b5092949350505050565b60008381868511619c9c5760208511619c4b5760008515619bdd576001619bb987602061a906565b619bc490600861bb12565b619bcf90600261bc10565b619bd9919061a906565b1990505b84518116600087619bee8b8b61a919565b619bf8919061a906565b855190915083165b828114619c3d57818610619c2557619c188b8b61a919565b96505050505050506177ef565b85619c2f8161baf8565b965050838651169050619c00565b8596505050505050506177ef565b508383206000905b619c5d868961a906565b8211619c9a57858320808203619c7957839450505050506177ef565b619c8460018561a919565b9350508180619c929061baf8565b925050619c53565b505b619ca6878761a919565b979650505050505050565b60408051808201909152600080825260208201526000619ce38560000151866020015186600001518760200151619b91565b602080870180519186019190915251909150619cff908261a906565b835284516020860151619d12919061a919565b8103619d215760008552619d53565b83518351619d2f919061a919565b85518690619d3e90839061a906565b9052508351619d4d908261a919565b60208601525b50909392505050565b60208110619d945781518352619d7360208461a919565b9250619d8060208361a919565b9150619d8d60208261a906565b9050619d5c565b6000198115619dc3576001619daa83602061a906565b619db69061010061bc10565b619dc0919061a906565b90505b9151835183169219169190911790915250565b60606000619de484846162c2565b8051602080830151604051939450619dfe9390910161bc33565b60405160208183030381529060405291505092915050565b8151815160009190811115619e29575081515b6020808501519084015160005b83811015619ee25782518251808214619eb2576000196020871015619e9157600184619e6389602061a906565b619e6d919061a919565b619e7890600861bb12565b619e8390600261bc10565b619e8d919061a906565b1990505b8181168382168181039114619eaf579750615df99650505050505050565b50505b619ebd60208661a919565b9450619eca60208561a919565b93505050602081619edb919061a919565b9050619e36565b5084518651616970919061bc8b565b610b678061bcac83390190565b61063d8061c81383390190565b61106f8061ce5083390190565b6120728061debf83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001619f68619f6d565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001619f686040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a01f5783516001600160a01b0316835260209384019390920191600101619ff8565b509095945050505050565b60005b8381101561a04557818101518382015260200161a02d565b50506000910152565b6000815180845261a06681602086016020860161a02a565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a176577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a15c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a14684865161a04e565b602095860195909450929092019160010161a10c565b50919750505060209485019492909201915060010161a0a2565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a1d65781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a196565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a176577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a24c604088018261a04e565b905060208201519150868103602088015261a267818361a182565b96505050602093840193919091019060010161a208565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a176577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261a2e085835161a04e565b9450602093840193919091019060010161a2a6565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a176577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a376604087018261a182565b955050602093840193919091019060010161a31d565b600181811c9082168061a3a057607f821691505b6020821081036180bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a060608501526000815461a4238161a38c565b8060a0880152600182166000811461a442576001811461a47c5761a4b0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b890101935061a4b0565b84600052602060002060005b8381101561a4a75781548a820160c0015260019091019060200161a488565b890160c0019450505b50505060038401546080860152809250505092915050565b60a08152600061a4db60a083018861a04e565b866020840152856040840152828103606084015261a4f9818661a04e565b9050828103608084015261a50d818561a3d9565b98975050505050505050565b60006020828403121561a52b57600080fd5b81516001600160a01b0381168114615ef257600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff881660408301528660608301526003861061a5fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261a61d60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561a64957600080fd5b81518015158114615ef257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f82111561344c57806000526020600020601f840160051c8101602085101561a6af5750805b601f840160051c820191505b81811015610619576000815560010161a6bb565b815167ffffffffffffffff81111561a6e95761a6e961a659565b61a6fd8161a6f7845461a38c565b8461a688565b6020601f82116001811461a731576000831561a7195750848201515b600019600385901b1c1916600184901b178455610619565b600084815260208120601f198516915b8281101561a761578785015182556020948501946001909201910161a741565b508482101561a77f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561a7a057600080fd5b5051919050565b60c08152600061a7ba60c083018961a04e565b8760208401526001600160a01b0387166040840152828103606084015261a7e1818761a04e565b905084608084015282810360a084015261a7fb818561a3d9565b9998505050505050505050565b6101208152600061a81d61012083018b61a04e565b6001600160a01b038a16602084015288604084015287606084015286608084015282810360a084015261a850818761a04e565b855460c0850152600186015460ff16151560e085015290505b8281036101008401526160e5818561a3d9565b60e08152600061a88f60e083018961a04e565b876020840152866040840152828103606084015261a8ad818761a04e565b85546080850152600186015460ff16151560a0850152905082810360c084015261a7fb818561a3d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115615df957615df961a8d7565b80820180821115615df957615df961a8d7565b6101208152600061a94161012083018b61a04e565b6001600160a01b038a16602084015288604084015287606084015286608084015282810360a084015261a974818761a04e565b855160c08501526020860151151560e0850152905061a869565b60e08152600061a9a160e083018961a04e565b8760208401526001600160a01b0387166040840152828103606084015261a8ad818761a04e565b60808152600061a9db608083018761a04e565b8560208401528460408401528281036060840152619ca6818561a3d9565b60a08152600061aa0c60a083018861a04e565b6001600160a01b0387166020840152828103604084015261aa2d818761a04e565b9050846060840152828103608084015261a50d818561a3d9565b60808152600061aa5a608083018761a04e565b8560208401526001600160a01b03851660408401528281036060840152619ca6818561a3d9565b60a08152600061aa9460a083018761a04e565b828103602084015261aaa6818761a04e565b85546040850152600186015460ff161515606085015290508281036080840152619ca6818561a3d9565b60c08152600061aae360c083018861a04e565b6001600160a01b0387166020840152828103604084015261ab04818761a04e565b85546060850152600186015460ff1615156080850152905082810360a084015261a50d818561a3d9565b6101208152600061ab4361012083018a61a04e565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a08501526000825261ab8a60c0850187805182526020908101511515910152565b602081016101008501525061aba2602082018561a3d9565b9a9950505050505050505050565b6001600160a01b03831681526040602082015260006177ef604083018461a04e565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ac0a81601a85016020880161a02a565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161ac4781601c84016020880161a02a565b01601c01949350505050565b602081526000615ef2602083018461a04e565b6040516060810167ffffffffffffffff8111828210171561ac895761ac8961a659565b60405290565b60008067ffffffffffffffff84111561acaa5761acaa61a659565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561acd95761acd961a659565b60405283815290508082840185101561acf157600080fd5b617bbe84602083018561a02a565b600082601f83011261ad1057600080fd5b615ef28383516020850161ac8f565b60006020828403121561ad3157600080fd5b815167ffffffffffffffff81111561ad4857600080fd5b615df58482850161acff565b6000835161ad6681846020880161a02a565b83519083019061ad7a81836020880161a02a565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161adbb81601a85016020880161a02a565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161adf881603384016020880161a02a565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000615ef2608083018461a04e565b60006020828403121561ae8757600080fd5b815167ffffffffffffffff81111561ae9e57600080fd5b8201601f8101841361aeaf57600080fd5b615df58482516020840161ac8f565b6000855161aed0818460208a0161a02a565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161af0a816001840160208a0161a02a565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161af4881600284016020890161a02a565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161af8a81600284016020880161a02a565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061afd5604083018461a04e565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161b04c81601f85016020870161a02a565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b0b9604083018461a04e565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b10b604083018461a04e565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b18281601485016020870161a02a565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b1c9604083018561a04e565b8281036020840152615eee818561a04e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b24281600185016020870161a02a565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b28881846020870161a02a565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b33b81604b85016020870161a02a565b91909101604b0192915050565b600060ff821660ff810361b35e5761b35e61a8d7565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b3c581602985016020870161a02a565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000615ef2608083018461a04e565b60006020828403121561b42b57600080fd5b815167ffffffffffffffff81111561b44257600080fd5b82016060818503121561b45457600080fd5b61b45c61ac66565b81518060030b811461b46d57600080fd5b8152602082015167ffffffffffffffff81111561b48957600080fd5b61b4958682850161acff565b602083015250604082015167ffffffffffffffff81111561b4b557600080fd5b61b4c18682850161acff565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b52d81602185016020870161a02a565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b71981602185016020880161a02a565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b75681602e84016020880161a02a565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b3c581602985016020870161a02a565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b81e81602285016020870161a02a565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b86381600e85016020870161a02a565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b94181601885016020880161a02a565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b97e81601c84016020880161a02a565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161ba8481846020870161a02a565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161baeb81601c85016020870161a02a565b91909101601c0192915050565b6000600019820361bb0b5761bb0b61a8d7565b5060010190565b8082028115828204841417615df957615df961a8d7565b6001815b600184111561bb645780850481111561bb485761bb4861a8d7565b600184161561bb5657908102905b60019390931c92800261bb2d565b935093915050565b60008261bb7b57506001615df9565b8161bb8857506000615df9565b816001811461bb9e576002811461bba85761bbc4565b6001915050615df9565b60ff84111561bbb95761bbb961a8d7565b50506001821b615df9565b5060208310610133831016604e8410600b841016171561bbe7575081810a615df9565b61bbf4600019848461bb29565b806000190482111561bc085761bc0861a8d7565b029392505050565b6000615ef2838361bb6c565b60008161bc2b5761bc2b61a8d7565b506000190190565b6000835161bc4581846020880161a02a565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161bc7f81600184016020880161a02a565b01600101949350505050565b81810360008312801583831316838312821617156191b6576191b661a8d756fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a00336080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c8063660b9de014610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610140565b610073565b34801561005f57600080fd5b5061003161006e3660046101a6565b6100ad565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76816040516100a291906102a7565b60405180910390a150565b606081156100c4576100c1828401846103a2565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100ef8780610498565b6100ff60408a0160208b01610504565b8960400135338660405161011896959493929190610526565b60405180910390a1505050505050565b60006060828403121561013a57600080fd5b50919050565b60006020828403121561015257600080fd5b813567ffffffffffffffff81111561016957600080fd5b61017584828501610128565b949350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101a157600080fd5b919050565b6000806000806000608086880312156101be57600080fd5b853567ffffffffffffffff8111156101d557600080fd5b6101e188828901610128565b9550506101f06020870161017d565b935060408601359250606086013567ffffffffffffffff81111561021357600080fd5b8601601f8101881361022457600080fd5b803567ffffffffffffffff81111561023b57600080fd5b88602082840101111561024d57600080fd5b959894975092955050506020019190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff6102c98361017d565b1660208201526000602083013567ffffffffffffffff81168082146102ed57600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261032a57600080fd5b830160208101903567ffffffffffffffff81111561034757600080fd5b80360382131561035657600080fd5b60608085015261036a60808501828461025e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156103b457600080fd5b813567ffffffffffffffff8111156103cb57600080fd5b8201601f810184136103dc57600080fd5b803567ffffffffffffffff8111156103f6576103f6610373565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561046257610462610373565b60405281815282820160200186101561047a57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126104cd57600080fd5b83018035915067ffffffffffffffff8211156104e857600080fd5b6020019150368190038213156104fd57600080fd5b9250929050565b60006020828403121561051657600080fd5b61051f8261017d565b9392505050565b60a08152600061053a60a08301888a61025e565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156105a457602081870181015184830182015201610588565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168301019250505097965050505050505056fea2646970667358221220ff93d07870f1d8e50e4264dfe0294e91fdae9dea40dbbcba8170288316ad1a8464736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220e0645f0dc9560bf8a1975495bcc1a88ea921f354d9c6dd0b38d7de440cf329ed64736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a2646970667358221220f9d455f69130c754789d23c8a689ea1cac1acdce73c1cba1842c4c9fbf0fb52664736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ff788061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102f45760003560e01c80636d6ce0d011610191578063ceccfab3116100e3578063e804a40611610097578063fa7626d411610071578063fa7626d414610495578063fbc611c8146104a2578063fdad0ad0146104aa57600080fd5b8063e804a4061461032b578063ea37902f14610485578063eb7a2fac1461048d57600080fd5b8063dde7e967116100c8578063dde7e9671461046d578063e20c9f7114610475578063e51c63881461047d57600080fd5b8063ceccfab31461045d578063dc749dd71461046557600080fd5b8063b51ac07111610145578063ba414fa61161011f578063ba414fa614610435578063ba800c911461044d578063ba9adeef1461045557600080fd5b8063b51ac0711461041d578063b5508aa914610425578063b7f058361461042d57600080fd5b806385226c811161017657806385226c81146103eb578063916a17c614610400578063b0464fdc1461041557600080fd5b80636d6ce0d0146103db57806383ababa9146103e357600080fd5b806339cbb4571161024a57806343181437116101fe5780636198fb19116101d85780636198fb19146103b65780636221b509146103be57806366d9a9a0146103c657600080fd5b8063431814371461039e5780635006fd80146103a65780635d72228f146103ae57600080fd5b80633f7286f41161022f5780633f7286f414610386578063423a58741461038e57806342752d411461039657600080fd5b806339cbb457146103765780633e5e3c231461037e57600080fd5b80631b9641bf116102ac57806321aeb18c1161028657806321aeb18c146103515780632ade38801461035957806336431b3f1461036e57600080fd5b80631b9641bf146103235780631e63d2b91461032b5780631ed7831c1461033357600080fd5b80631238212c116102dd5780631238212c1461030b578063147597661461031357806318a4cfdc1461031b57600080fd5b806304019fba146102f95780630a9254e414610303575b600080fd5b6103016104b2565b005b610301610620565b6103016111b5565b610301611571565b6103016119dd565b610301611cec565b610301611e63565b61033b612267565b6040516103489190619fde565b60405180910390f35b6103016122c9565b6103616123e9565b604051610348919061a07a565b61030161252b565b61030161266d565b61033b6127c5565b61033b612825565b610301612885565b6103016129d4565b610301612b26565b610301612c61565b6103016130ff565b610301613451565b610301613674565b6103ce613899565b604051610348919061a1e0565b610301613a1b565b610301613d20565b6103f3613e04565b604051610348919061a27e565b610408613ed4565b604051610348919061a2f5565b610408613fcf565b6103016140ca565b6103f36141c9565b610301614299565b61043d61445f565b6040519015158152602001610348565b610301614533565b610301614649565b6103016147c0565b610301614b0c565b610301614baf565b61033b614fee565b61030161504e565b6103016153a5565b61030161579a565b601f5461043d9060ff1681565b6103016158dd565b610301615c6a565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905251630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561057a57600080fd5b505af115801561058e573d6000803e3d6000fd5b5050602080546040805160008152928301908190527f3b2839330000000000000000000000000000000000000000000000000000000090526001600160a01b03169250633b28393391506105eb906001808660286024850161a4c8565b600060405180830381600087803b15801561060557600080fd5b505af1158015610619573d6000803e3d6000fd5b5050505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161066690619ef1565b604051809103906000f080158015610682573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c000000000000000000000000000000000060208201526025549151602481019390935292166044820152610766919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052615de0565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f2722feee0000000000000000000000000000000000000000000000000000000081529051632722feee926004808401939192918290030181865afa158015610828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084c919061a519565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161089090619efe565b604051809103906000f0801580156108ac573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b15801561094857600080fd5b505af115801561095c573d6000803e3d6000fd5b50505050600080600060405161097190619f0b565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156109ad573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602054604051601293600193849360009391921690610a0390619f18565b610a129695949392919061a542565b604051809103906000f080158015610a2e573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610ac557600080fd5b505af1158015610ad9573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610b4357600080fd5b505af1158015610b57573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610bd757600080fd5b505af1158015610beb573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c4057600080fd5b505af1158015610c54573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec919061a637565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d81919061a637565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610de057600080fd5b505af1158015610df4573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f16919061a637565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610f6857600080fd5b505af1158015610f7c573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611014919061a637565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561107357600080fd5b505af1158015611087573d6000803e3d6000fd5b50506040805160a08101825261032180825260016020808401918252838501928352845190810190945260008085526060840185905260808401528251602880549251151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009093166001600160a01b0392831617929092178255915160298054919093167fffffffffffffffffffffffff000000000000000000000000000000000000000091909116179091559093509150602a9061115e908261a6cf565b50608091909101516003909101556040805180820190915260018082526020909101819052602c819055602d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a919061a78e565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561129f57600080fd5b505af11580156112b3573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015611325573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611349919061a637565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b15801561140c57600080fd5b505af1158015611420573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526114ba9288916001600160a01b031690879060019060289060040161a7a7565b600060405180830381600087803b1580156114d457600080fd5b505af11580156114e8573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561153b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155f919061a78e565b905061156b8382615dff565b50505050565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156115c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e6919061a78e565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611638573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165c919061a78e565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b1790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b03909216608482015291925090737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561175257600080fd5b505af1158015611766573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c9060340160408051601f19818403018152908290526022546117f8926001600160a01b03909116908c9060009081908b90602c9060289061a808565b60405180910390a3602080546026546040516001600160a01b0392831693632810ae63936118409316910160609190911b6bffffffffffffffffffffffff1916815260140190565b604051602081830303815290604052888486602c60286040518763ffffffff1660e01b81526004016118779695949392919061a87c565b600060405180830381600087803b15801561189157600080fd5b505af11580156118a5573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156118f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191c919061a78e565b905061193261192c60018861a906565b82615dff565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611983573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a7919061a78e565b90506119b38682615dff565b6119d36119c186600161a919565b6027546001600160a01b031631615dff565b5050505050505050565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a52919061a78e565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac8919061a78e565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b1790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b03909216608482015291925090737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611bbe57600080fd5b505af1158015611bd2573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c9060340160408051601f1981840301815260225483830183526000808552600160208601529251611c709492936001600160a01b03909216928e929182918c9160289061a92c565b60405180910390a3602080546026546040516001600160a01b0392831693633b28393393611cb89316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60405160208183030381529060405288848660286040518663ffffffff1660e01b815260040161187795949392919061a4c8565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905251630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611db457600080fd5b505af1158015611dc8573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637b15118b915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526105eb926000916001600160a01b0316908790602c9060289060040161a98e565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611eb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed8919061a78e565b6026546040516001600160a01b03909116602482015290915060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b1790525490517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b039092166084820152919250908190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611fca57600080fd5b505af1158015611fde573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c9060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216918b9189918491634d8943bb916004808201926020929091908290030181865afa1580156120b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d4919061a78e565b6040805180820182528a81526001602082015290516120fc9695949392918d9160289061a92c565b60405180910390a3602080546026546040516001600160a01b039283169363048ae42c936121449316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526121a0928a916001600160a01b0316908990889060289060040161a7a7565b600060405180830381600087803b1580156121ba57600080fd5b505af11580156121ce573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612221573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612245919061a78e565b905061225f83612255888861a906565b61192c919061a906565b505050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156122bf57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116122a1575b5050505050905090565b604051630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561233557600080fd5b505af1158015612349573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b031692506397a1cef191506034015b6040516020818303038152906040526000600160286040518563ffffffff1660e01b81526004016123bb949392919061a9c8565b600060405180830381600087803b1580156123d557600080fd5b505af115801561156b573d6000803e3d6000fd5b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561252257600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561250b57838290600052602060002001805461247e9061a38c565b80601f01602080910402602001604051908101604052809291908181526020018280546124aa9061a38c565b80156124f75780601f106124cc576101008083540402835291602001916124f7565b820191906000526020600020905b8154815290600101906020018083116124da57829003601f168201915b50505050508152602001906001019061245f565b50505050815250508152602001906001019061240d565b50505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905251630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156125f357600080fd5b505af1158015612607573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f048ae42c000000000000000000000000000000000000000000000000000000009091526001600160a01b03918216945063048ae42c93506105eb929160019116868260286024860161a7a7565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905251630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561273557600080fd5b505af1158015612749573d6000803e3d6000fd5b5050602080546040516001600160a01b039091169350631cb5ea759250015b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526105eb926001600160a01b0390911690869060019060289060040161a9f9565b606060188054806020026020016040519081016040528092919081815260200182805480156122bf576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116122a1575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156122bf576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116122a1575050505050905090565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905251630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561294d57600080fd5b505af1158015612961573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250633b2839339150603401604051602081830303815290604052600060018560286040518663ffffffff1660e01b81526004016105eb95949392919061a4c8565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905251630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612a9c57600080fd5b505af1158015612ab0573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250632810ae6391506034016040516020818303038152906040526000600185602c60286040518763ffffffff1660e01b81526004016105eb9695949392919061a87c565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905251630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612bee57600080fd5b505af1158015612c02573d6000803e3d6000fd5b5050602080546040805160008152928301908190527f2810ae630000000000000000000000000000000000000000000000000000000090526001600160a01b03169250632810ae6391506105eb9060018086602c60286024860161a87c565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015612cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd6919061a78e565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015612d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4c919061a78e565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e2757600080fd5b505af1158015612e3b573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015612ead573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed1919061a637565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612f3057600080fd5b505af1158015612f44573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250633b283933915060340160405160208183030381529060405288848660286040518663ffffffff1660e01b8152600401612fb595949392919061a4c8565b600060405180830381600087803b158015612fcf57600080fd5b505af1158015612fe3573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015613036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305a919061a78e565b90506130668682615dff565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156130b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130db919061a78e565b90506130e78682615dff565b6027546119d39086906001600160a01b031631615dff565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613150573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613174919061a78e565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156131e957600080fd5b505af11580156131fd573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561326f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613293919061a637565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156132f257600080fd5b505af1158015613306573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261339b9287916001600160a01b03169060289060040161aa47565b600060405180830381600087803b1580156133b557600080fd5b505af11580156133c9573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561341c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613440919061a78e565b905061344c8282615dff565b505050565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b1790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561353b57600080fd5b505af115801561354f573d6000803e3d6000fd5b505060215460255460265460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039283169450911691507f306ee13f48319a123b222c69908e44dcf91abffc20cacc502e3cf5a4ff23e0e49060340160408051601f19818403018152908290526135cf918690602c9060289061aa81565b60405180910390a3602080546026546040516001600160a01b03928316936306cb8983936136179316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526105eb926001600160a01b03909116908690602c9060289060040161aad0565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156136c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e9919061a78e565b6022546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015613756573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061377a919061a637565b506000600190507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137df57600080fd5b505af11580156137f3573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b031692506397a1cef19150603401604051602081830303815290604052858460286040518563ffffffff1660e01b8152600401613862949392919061a9c8565b600060405180830381600087803b15801561387c57600080fd5b505af1158015613890573d6000803e3d6000fd5b50505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561252257838290600052602060002090600202016040518060400160405290816000820180546138f09061a38c565b80601f016020809104026020016040519081016040528092919081815260200182805461391c9061a38c565b80156139695780601f1061393e57610100808354040283529160200191613969565b820191906000526020600020905b81548152906001019060200180831161394c57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015613a0357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116139b05790505b505050505081525050815260200190600101906138bd565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015613a6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a90919061a78e565b6025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613b0557600080fd5b505af1158015613b19573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015613b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613baf919061a637565b506026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905280517ff48448140000000000000000000000000000000000000000000000000000000081529051919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f48448149160048082019260009290919082900301818387803b158015613c7257600080fd5b505af1158015613c86573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637b15118b915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526114ba9288916001600160a01b0316908790602c9060289060040161a98e565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613d8c57600080fd5b505af1158015613da0573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f7c0dcb5f000000000000000000000000000000000000000000000000000000009091526001600160a01b039182169450637c0dcb5f93506123bb92916001911660286024840161aa47565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015612522578382906000526020600020018054613e479061a38c565b80601f0160208091040260200160405190810160405280929190818152602001828054613e739061a38c565b8015613ec05780601f10613e9557610100808354040283529160200191613ec0565b820191906000526020600020905b815481529060010190602001808311613ea357829003601f168201915b505050505081526020019060010190613e28565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156125225760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015613fb757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411613f645790505b50505050508152505081526020019060010190613ef8565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156125225760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156140b257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161405f5790505b50505050508152505081526020019060010190613ff3565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905251630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561419257600080fd5b505af11580156141a6573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911693506306cb8983925001613617565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561252257838290600052602060002001805461420c9061a38c565b80601f01602080910402602001604051908101604052809291908181526020018280546142389061a38c565b80156142855780601f1061425a57610100808354040283529160200191614285565b820191906000526020600020905b81548152906001019060200180831161426857829003601f168201915b5050505050815260200190600101906141ed565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b1790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561438357600080fd5b505af1158015614397573d6000803e3d6000fd5b505060215460255460265460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039283169450911691507f306ee13f48319a123b222c69908e44dcf91abffc20cacc502e3cf5a4ff23e0e49060340160408051601f1981840301815290829052614417918690602c9060289061aa81565b60405180910390a3602080546026546040516001600160a01b0392831693631cb5ea75936127689316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60085460009060ff1615614477575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015614508573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061452c919061a78e565b1415905090565b604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561459f57600080fd5b505af11580156145b3573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526123bb926000916001600160a01b03169060289060040161aa47565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905251630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561471157600080fd5b505af1158015614725573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b0316925063048ae42c915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1683526105eb926000916001600160a01b031690879060019060289060040161a7a7565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614811573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614835919061a78e565b6021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101236004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156148a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148c6919061a637565b506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561493957600080fd5b505af115801561494d573d6000803e3d6000fd5b50506021546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526001600160a01b03909116925063f687d12a9150602401600060405180830381600087803b1580156149b057600080fd5b505af11580156149c4573d6000803e3d6000fd5b5050604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b158015614a3557600080fd5b505af1158015614a49573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250637c0dcb5f915060340160408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352614ade9287916001600160a01b03169060289060040161aa47565b600060405180830381600087803b158015614af857600080fd5b505af115801561225f573d6000803e3d6000fd5b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614b7857600080fd5b505af1158015614b8c573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911693506397a1cef1925001612387565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c24919061a78e565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015614c76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c9a919061a78e565b6027546025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152929350163190600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614d1857600080fd5b505af1158015614d2c573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af1158015614d9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dc2919061a637565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614e2157600080fd5b505af1158015614e35573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b031692506397a1cef19150603401604051602081830303815290604052878460286040518563ffffffff1660e01b8152600401614ea4949392919061a9c8565b600060405180830381600087803b158015614ebe57600080fd5b505af1158015614ed2573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f49919061a78e565b9050614f558582615dff565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fca919061a78e565b9050614fd68582615dff565b6027546138909085906001600160a01b031631615dff565b606060158054806020026020016040519081016040528092919081815260200182805480156122bf576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116122a1575050505050905090565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561509f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150c3919061a78e565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015615115573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615139919061a78e565b6027546026546040516001600160a01b03918216602482015292935016319060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905260255490517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561521457600080fd5b505af1158015615228573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600060248201529116925063095ea7b391506044016020604051808303816000875af115801561529a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906152be919061a637565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561531d57600080fd5b505af1158015615331573d6000803e3d6000fd5b50506020805460265460405160609190911b6bffffffffffffffffffffffff1916928101929092526001600160a01b03169250632810ae639150603401604051602081830303815290604052888486602c60286040518763ffffffff1660e01b8152600401612fb59695949392919061a87c565b6022546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa1580156153f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061541a919061a78e565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa15801561546c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615490919061a78e565b6027546020546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b0392831660848301529394509116319190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561552b57600080fd5b505af115801561553f573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff191660208201528493506001600160a01b0390911691507f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c9060340160408051601f19818403018152602254838301835260008085526001602086015292516155dc9492936001600160a01b03909216928d929182919060289061ab2e565b60405180910390a3602080546026546040516001600160a01b03928316936397a1cef1936156249316910160609190911b6bffffffffffffffffffffffff1916815260140190565b604051602081830303815290604052878460286040518563ffffffff1660e01b8152600401615656949392919061a9c8565b600060405180830381600087803b15801561567057600080fd5b505af1158015615684573d6000803e3d6000fd5b50506022546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156156d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156fb919061a78e565b905061570b61192c60018761a906565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561575c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615780919061a78e565b905061578c8582615dff565b6138906119c185600161a919565b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630427d73b60e51b17905251630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561586257600080fd5b505af1158015615876573d6000803e3d6000fd5b5050602080546040805160008152928301908190526021547f7b15118b000000000000000000000000000000000000000000000000000000009091526001600160a01b039182169450637b15118b93506105eb92916001911686602c60286024860161a98e565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa15801561592e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615952919061a78e565b6020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156159e357600080fd5b505af11580156159f7573d6000803e3d6000fd5b505060255460265460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c9060340160408051601f198184030181528282526021547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b039092169188916000918491634d8943bb916004808201926020929091908290030181865afa158015615aca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615aee919061a78e565b60408051808201825260008152600160208201529051615b169695949392919060289061ab2e565b60405180910390a3602080546026546040516001600160a01b0392831693637c0dcb5f93615b5e9316910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526021547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352615bb69287916001600160a01b03169060289060040161aa47565b600060405180830381600087803b158015615bd057600080fd5b505af1158015615be4573d6000803e3d6000fd5b50506021546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015615c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615c5b919061a78e565b905061344c61192c848461a906565b6021546025546040516370a0823160e01b81526001600160a01b03918216600482015260029260009216906370a0823190602401602060405180830381865afa158015615cbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615cdf919061a78e565b6021549091506001600160a01b031663a9059cbb610123615d0160018561a906565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015615d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615d88919061a637565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401614a1b565b6000615dea619f25565b615df5848483615e7e565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015615e6a57600080fd5b505afa15801561225f573d6000803e3d6000fd5b600080615e8b8584615ef9565b9050615eee6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001615ed992919061abb0565b60405160208183030381529060405285615f05565b9150505b9392505050565b6000615ef28383615f33565b60c08101515160009015615f2957615f2284848460c00151615f4e565b9050615ef2565b615f2284846160f4565b6000615f3f83836161df565b615ef283836020015184615f05565b600080615f596161ef565b90506000615f6786836162c2565b90506000615f7e8260600151836020015185616768565b90506000615f8e8383898961697a565b90506000615f9b826177f7565b602081015181519192509060030b1561600e57898260400151604051602001615fc592919061abd2565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526160059160040161ac53565b60405180910390fd5b60006160516040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016179c6565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906160a490849060040161ac53565b602060405180830381865afa1580156160c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906160e5919061a519565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061614990879060040161ac53565b600060405180830381865afa158015616166573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261618e919081019061ad1f565b905060006161bc82856040516020016161a892919061ad54565b604051602081830303815290604052617bc6565b90506001600160a01b038116615df5578484604051602001615fc592919061ad83565b6161eb82826000617bd9565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061627690849060040161ae2e565b600060405180830381865afa158015616293573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526162bb919081019061ae75565b9250505090565b6162f46040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d905061633f6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61634885617cdc565b60208201526000616358866180c1565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561639a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526163c2919081019061ae75565b868385602001516040516020016163dc949392919061aebe565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061643490859060040161ac53565b600060405180830381865afa158015616451573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616479919081019061ae75565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906164c190849060040161afc2565b602060405180830381865afa1580156164de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616502919061a637565b6165175781604051602001615fc5919061b014565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061655c90849060040161b0a6565b600060405180830381865afa158015616579573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526165a1919081019061ae75565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906165e890849060040161b0f8565b602060405180830381865afa158015616605573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616629919061a637565b156166be576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061667390849060040161b0f8565b600060405180830381865afa158015616690573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526166b8919081019061ae75565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016166e3919061b14a565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161670f92919061b1b6565b600060405180830381865afa15801561672c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616754919081019061ae75565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816167845790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106167e4576167e461b1db565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106168385761683861b1db565b602002602001018190525084604051602001616854919061b20a565b604051602081830303815290604052816002815181106168765761687661b1db565b602002602001018190525082604051602001616892919061b276565b604051602081830303815290604052816003815181106168b4576168b461b1db565b602002602001018190525060006168ca826177f7565b602080820151604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000818501908152825180840184526000808252908601528251808401909352905182529281019290925291925061695b9060408051808201825260008082526020918201528151808301909252845182528085019082015290618344565b6169705785604051602001615fc5919061b2b7565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156169ca565b511590565b616b3e57826020015115616a86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616005565b8260c0015115616b3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616005565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081616b5757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616bb29061b348565b935060ff1681518110616bc757616bc761b1db565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616c18919061b367565b604051602081830303815290604052828280616c339061b348565b935060ff1681518110616c4857616c4861b1db565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280616c959061b348565b935060ff1681518110616caa57616caa61b1db565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280616cf79061b348565b935060ff1681518110616d0c57616d0c61b1db565b60200260200101819052508760200151828280616d289061b348565b935060ff1681518110616d3d57616d3d61b1db565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280616d8a9061b348565b935060ff1681518110616d9f57616d9f61b1db565b602090810291909101015287518282616db78161b348565b935060ff1681518110616dcc57616dcc61b1db565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280616e199061b348565b935060ff1681518110616e2e57616e2e61b1db565b6020026020010181905250616e42466183a5565b8282616e4d8161b348565b935060ff1681518110616e6257616e6261b1db565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280616eaf9061b348565b935060ff1681518110616ec457616ec461b1db565b602002602001018190525086828280616edc9061b348565b935060ff1681518110616ef157616ef161b1db565b60209081029190910101528551156170185760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282616f428161b348565b935060ff1681518110616f5757616f5761b1db565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90616fa790899060040161ac53565b600060405180830381865afa158015616fc4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616fec919081019061ae75565b8282616ff78161b348565b935060ff168151811061700c5761700c61b1db565b60200260200101819052505b8460200151156170e85760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826170618161b348565b935060ff16815181106170765761707661b1db565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806170c39061b348565b935060ff16815181106170d8576170d861b1db565b60200260200101819052506172af565b6171206169c58660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6171b35760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826171638161b348565b935060ff16815181106171785761717861b1db565b60200260200101819052508460a00151604051602001617198919061b20a565b6040516020818303038152906040528282806170c39061b348565b8460c001511580156171f65750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526171f490511590565b155b156172af5760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261723a8161b348565b935060ff168151811061724f5761724f61b1db565b602002602001018190525061726388618445565b604051602001617273919061b20a565b60405160208183030381529060405282828061728e9061b348565b935060ff16815181106172a3576172a361b1db565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526172e390511590565b6173785760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826173268161b348565b935060ff168151811061733b5761733b61b1db565b602002602001018190525084604001518282806173579061b348565b935060ff168151811061736c5761736c61b1db565b60200260200101819052505b6060850151156174995760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826173c18161b348565b935060ff16815181106173d6576173d661b1db565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261746d919081019061ae75565b82826174788161b348565b935060ff168151811061748d5761748d61b1db565b60200260200101819052505b60e085015151156175405760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826174e38161b348565b935060ff16815181106174f8576174f861b1db565b60200260200101819052506175148560e00151600001516183a5565b828261751f8161b348565b935060ff16815181106175345761753461b1db565b60200260200101819052505b60e085015160200151156175ea5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261758d8161b348565b935060ff16815181106175a2576175a261b1db565b60200260200101819052506175be8560e00151602001516183a5565b82826175c98161b348565b935060ff16815181106175de576175de61b1db565b60200260200101819052505b60e085015160400151156176945760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826176378161b348565b935060ff168151811061764c5761764c61b1db565b60200260200101819052506176688560e00151604001516183a5565b82826176738161b348565b935060ff16815181106176885761768861b1db565b60200260200101819052505b60e0850151606001511561773e5760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826176e18161b348565b935060ff16815181106176f6576176f661b1db565b60200260200101819052506177128560e00151606001516183a5565b828261771d8161b348565b935060ff16815181106177325761773261b1db565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561775c5761775c61a659565b60405190808252806020026020018201604052801561778f57816020015b606081526020019060019003908161777a5790505b50905060005b8260ff168160ff1610156177e857838160ff16815181106177b8576177b861b1db565b6020026020010151828260ff16815181106177d5576177d561b1db565b6020908102919091010152600101617795565b5093505050505b949350505050565b61781e6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916178a49186910161b3d2565b600060405180830381865afa1580156178c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526178e9919081019061ae75565b905060006178f78683618f34565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617927919061a27e565b6000604051808303816000875af1158015617946573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261796e919081019061b419565b805190915060030b158015906179875750602081015151155b80156179965750604081015151155b1561697057816000815181106179ae576179ae61b1db565b6020026020010151604051602001615fc5919061b4cf565b606060006179fb8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150617a329082905b90619089565b15617b8f576000617aaf82617aa984617aa3617a758a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906190b0565b90619112565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617b13908290619089565b15617b7d57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b7a905b8290619197565b90505b617b86816191bd565b92505050615ef2565b8215617ba8578484604051602001615fc592919061b6bb565b5050604080516020810190915260008152615ef2565b509392505050565b6000808251602084016000f09392505050565b8160a0015115617be857505050565b6000617bf5848484619226565b90506000617c02826177f7565b602081015181519192509060030b158015617c9e5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c9e90604080518082018252600080825260209182015281518083019092528451825280850190820152617a2c565b15617cab57505050505050565b60408201515115617ccb578160400151604051602001615fc5919061b762565b80604051602001615fc5919061b7c0565b60606000617d118360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617d76905b8290618344565b15617de557604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ef290617de09083906197c1565b6191bd565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e47905b829061984b565b600103617f1457604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ead90617b73565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ef290617de0905b8390619197565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f7390617d6f565b156180aa57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617fdb9083906198e5565b905060008160018351617fee919061a906565b81518110617ffe57617ffe61b1db565b602002602001015190506180a1617de06180746040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906197c1565b95945050505050565b82604051602001615fc5919061b82b565b50919050565b606060006180f68360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061815890617d6f565b1561816657615ef2816191bd565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526181c590617e40565b60010361822f57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ef290617de090617f0d565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261828e90617d6f565b156180aa57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906182f69083906198e5565b9050600181511115618332578060028251618311919061a906565b815181106183215761832161b1db565b602002602001015192505050919050565b5082604051602001615fc5919061b82b565b80518251600091111561835957506000615df9565b8151835160208501516000929161836f9161a919565b618379919061a906565b905082602001518103618390576001915050615df9565b82516020840151819020912014905092915050565b606060006183b28361998a565b600101905060008167ffffffffffffffff8111156183d2576183d261a659565b6040519080825280601f01601f1916602001820160405280156183fc576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461840657509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916184d1905b8290619a6c565b1561851157505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618570906184ca565b156185b057505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261860f906184ca565b1561864f57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526186ae906184ca565b806187135750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618713906184ca565b1561875357505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526187b2906184ca565b806188175750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618817906184ca565b1561885757505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188b6906184ca565b8061891b5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261891b906184ca565b1561895b57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189ba906184ca565b80618a1f5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a1f906184ca565b15618a5f57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618abe906184ca565b15618afe57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618b5d906184ca565b15618b9d57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618bfc906184ca565b15618c3c57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c9b906184ca565b15618cdb57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d3a906184ca565b15618d7a57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618dd9906184ca565b80618e3e5750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e3e906184ca565b15618e7e57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618edd906184ca565b15618f1d57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151615fc5929060200161b909565b60608060005b8451811015618fbf5781858281518110618f5657618f5661b1db565b6020026020010151604051602001618f6f92919061ad54565b604051602081830303815290604052915060018551618f8e919061a906565b8114618fb75781604051602001618fa5919061ba72565b60405160208183030381529060405291505b600101618f3a565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081618fd857905050905083816000815181106190035761900361b1db565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106190575761905761b1db565b602002602001018190525081816002815181106190765761907661b1db565b6020908102919091010152949350505050565b60208083015183518351928401516000936190a79291849190619a80565b14159392505050565b604080518082019091526000808252602082015260006190e28460000151856020015185600001518660200151619b91565b90508360200151816190f4919061a906565b8451859061910390839061a906565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015619137575081615df9565b602080830151908401516001911461915e5750815160208481015190840151829020919020145b801561918f5782518451859061917590839061a906565b905250825160208501805161918b90839061a919565b9052505b509192915050565b60408051808201909152600080825260208201526191b6838383619cb1565b5092915050565b60606000826000015167ffffffffffffffff8111156191de576191de61a659565b6040519080825280601f01601f191660200182016040528015619208576020820181803683370190505b50905060006020820190506191b68185602001518660000151619d5c565b606060006192326161ef565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161924f57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806192aa9061b348565b935060ff16815181106192bf576192bf61b1db565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619310919061bab3565b60405160208183030381529060405282828061932b9061b348565b935060ff16815181106193405761934061b1db565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061938d9061b348565b935060ff16815181106193a2576193a261b1db565b6020026020010181905250826040516020016193be919061b276565b6040516020818303038152906040528282806193d99061b348565b935060ff16815181106193ee576193ee61b1db565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061943b9061b348565b935060ff16815181106194505761945061b1db565b60200260200101819052506194658784619dd6565b82826194708161b348565b935060ff16815181106194855761948561b1db565b6020908102919091010152855151156195315760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826194d78161b348565b935060ff16815181106194ec576194ec61b1db565b6020026020010181905250619505866000015184619dd6565b82826195108161b348565b935060ff16815181106195255761952561b1db565b60200260200101819052505b85608001511561959f5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261957a8161b348565b935060ff168151811061958f5761958f61b1db565b6020026020010181905250619605565b84156196055760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826195e48161b348565b935060ff16815181106195f9576195f961b1db565b60200260200101819052505b604086015151156196a15760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261964f8161b348565b935060ff16815181106196645761966461b1db565b602002602001018190525085604001518282806196809061b348565b935060ff16815181106196955761969561b1db565b60200260200101819052505b85606001511561970b5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826196ea8161b348565b935060ff16815181106196ff576196ff61b1db565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156197295761972961a659565b60405190808252806020026020018201604052801561975c57816020015b60608152602001906001900390816197475790505b50905060005b8260ff168160ff1610156197b557838160ff16815181106197855761978561b1db565b6020026020010151828260ff16815181106197a2576197a261b1db565b6020908102919091010152600101619762565b50979650505050505050565b60408051808201909152600080825260208201528151835110156197e6575081615df9565b815183516020850151600092916197fc9161a919565b619806919061a906565b60208401519091506001908214619827575082516020840151819020908220145b80156198425783518551869061983e90839061a906565b9052505b50929392505050565b600080826000015161986f8560000151866020015186600001518760200151619b91565b619879919061a919565b90505b8351602085015161988d919061a919565b81116191b6578161989d8161baf8565b92505082600001516198d48560200151836198b8919061a906565b86516198c4919061a906565b8386600001518760200151619b91565b6198de919061a919565b905061987c565b606060006198f3848461984b565b6198fe90600161a919565b67ffffffffffffffff8111156199165761991661a659565b60405190808252806020026020018201604052801561994957816020015b60608152602001906001900390816199345790505b50905060005b8151811015617bbe57619965617de08686619197565b8282815181106199775761997761b1db565b602090810291909101015260010161994f565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106199d3577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106199ff576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310619a1d57662386f26fc10000830492506010015b6305f5e1008310619a35576305f5e100830492506008015b6127108310619a4957612710830492506004015b60648310619a5b576064830492506002015b600a8310615df95760010192915050565b6000619a788383619e16565b159392505050565b600080858411619b875760208411619b335760008415619acb576001619aa786602061a906565b619ab290600861bb12565b619abd90600261bc10565b619ac7919061a906565b1990505b8351811685619ada898961a919565b619ae4919061a906565b805190935082165b818114619b1e57878411619b0657879450505050506177ef565b83619b108161bc1c565b945050828451169050619aec565b619b28878561a919565b9450505050506177ef565b838320619b40858861a906565b619b4a908761a919565b91505b858210619b8557848220808203619b7257619b68868461a919565b93505050506177ef565b619b7d60018461a906565b925050619b4d565b505b5092949350505050565b60008381868511619c9c5760208511619c4b5760008515619bdd576001619bb987602061a906565b619bc490600861bb12565b619bcf90600261bc10565b619bd9919061a906565b1990505b84518116600087619bee8b8b61a919565b619bf8919061a906565b855190915083165b828114619c3d57818610619c2557619c188b8b61a919565b96505050505050506177ef565b85619c2f8161baf8565b965050838651169050619c00565b8596505050505050506177ef565b508383206000905b619c5d868961a906565b8211619c9a57858320808203619c7957839450505050506177ef565b619c8460018561a919565b9350508180619c929061baf8565b925050619c53565b505b619ca6878761a919565b979650505050505050565b60408051808201909152600080825260208201526000619ce38560000151866020015186600001518760200151619b91565b602080870180519186019190915251909150619cff908261a906565b835284516020860151619d12919061a919565b8103619d215760008552619d53565b83518351619d2f919061a919565b85518690619d3e90839061a906565b9052508351619d4d908261a919565b60208601525b50909392505050565b60208110619d945781518352619d7360208461a919565b9250619d8060208361a919565b9150619d8d60208261a906565b9050619d5c565b6000198115619dc3576001619daa83602061a906565b619db69061010061bc10565b619dc0919061a906565b90505b9151835183169219169190911790915250565b60606000619de484846162c2565b8051602080830151604051939450619dfe9390910161bc33565b60405160208183030381529060405291505092915050565b8151815160009190811115619e29575081515b6020808501519084015160005b83811015619ee25782518251808214619eb2576000196020871015619e9157600184619e6389602061a906565b619e6d919061a919565b619e7890600861bb12565b619e8390600261bc10565b619e8d919061a906565b1990505b8181168382168181039114619eaf579750615df99650505050505050565b50505b619ebd60208661a919565b9450619eca60208561a919565b93505050602081619edb919061a919565b9050619e36565b5084518651616970919061bc8b565b610b678061bcac83390190565b61064f8061c81383390190565b61106f8061ce6283390190565b6120728061ded183390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001619f68619f6d565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001619f686040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a01f5783516001600160a01b0316835260209384019390920191600101619ff8565b509095945050505050565b60005b8381101561a04557818101518382015260200161a02d565b50506000910152565b6000815180845261a06681602086016020860161a02a565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a176577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a15c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a14684865161a04e565b602095860195909450929092019160010161a10c565b50919750505060209485019492909201915060010161a0a2565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a1d65781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a196565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a176577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a24c604088018261a04e565b905060208201519150868103602088015261a267818361a182565b96505050602093840193919091019060010161a208565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a176577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261a2e085835161a04e565b9450602093840193919091019060010161a2a6565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a176577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a376604087018261a182565b955050602093840193919091019060010161a31d565b600181811c9082168061a3a057607f821691505b6020821081036180bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a060608501526000815461a4238161a38c565b8060a0880152600182166000811461a442576001811461a47c5761a4b0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b890101935061a4b0565b84600052602060002060005b8381101561a4a75781548a820160c0015260019091019060200161a488565b890160c0019450505b50505060038401546080860152809250505092915050565b60a08152600061a4db60a083018861a04e565b866020840152856040840152828103606084015261a4f9818661a04e565b9050828103608084015261a50d818561a3d9565b98975050505050505050565b60006020828403121561a52b57600080fd5b81516001600160a01b0381168114615ef257600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff881660408301528660608301526003861061a5fc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261a61d60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561a64957600080fd5b81518015158114615ef257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f82111561344c57806000526020600020601f840160051c8101602085101561a6af5750805b601f840160051c820191505b81811015610619576000815560010161a6bb565b815167ffffffffffffffff81111561a6e95761a6e961a659565b61a6fd8161a6f7845461a38c565b8461a688565b6020601f82116001811461a731576000831561a7195750848201515b600019600385901b1c1916600184901b178455610619565b600084815260208120601f198516915b8281101561a761578785015182556020948501946001909201910161a741565b508482101561a77f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561a7a057600080fd5b5051919050565b60c08152600061a7ba60c083018961a04e565b8760208401526001600160a01b0387166040840152828103606084015261a7e1818761a04e565b905084608084015282810360a084015261a7fb818561a3d9565b9998505050505050505050565b6101208152600061a81d61012083018b61a04e565b6001600160a01b038a16602084015288604084015287606084015286608084015282810360a084015261a850818761a04e565b855460c0850152600186015460ff16151560e085015290505b8281036101008401526160e5818561a3d9565b60e08152600061a88f60e083018961a04e565b876020840152866040840152828103606084015261a8ad818761a04e565b85546080850152600186015460ff16151560a0850152905082810360c084015261a7fb818561a3d9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115615df957615df961a8d7565b80820180821115615df957615df961a8d7565b6101208152600061a94161012083018b61a04e565b6001600160a01b038a16602084015288604084015287606084015286608084015282810360a084015261a974818761a04e565b855160c08501526020860151151560e0850152905061a869565b60e08152600061a9a160e083018961a04e565b8760208401526001600160a01b0387166040840152828103606084015261a8ad818761a04e565b60808152600061a9db608083018761a04e565b8560208401528460408401528281036060840152619ca6818561a3d9565b60a08152600061aa0c60a083018861a04e565b6001600160a01b0387166020840152828103604084015261aa2d818761a04e565b9050846060840152828103608084015261a50d818561a3d9565b60808152600061aa5a608083018761a04e565b8560208401526001600160a01b03851660408401528281036060840152619ca6818561a3d9565b60a08152600061aa9460a083018761a04e565b828103602084015261aaa6818761a04e565b85546040850152600186015460ff161515606085015290508281036080840152619ca6818561a3d9565b60c08152600061aae360c083018861a04e565b6001600160a01b0387166020840152828103604084015261ab04818761a04e565b85546060850152600186015460ff1615156080850152905082810360a084015261a50d818561a3d9565b6101208152600061ab4361012083018a61a04e565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a08501526000825261ab8a60c0850187805182526020908101511515910152565b602081016101008501525061aba2602082018561a3d9565b9a9950505050505050505050565b6001600160a01b03831681526040602082015260006177ef604083018461a04e565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ac0a81601a85016020880161a02a565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161ac4781601c84016020880161a02a565b01601c01949350505050565b602081526000615ef2602083018461a04e565b6040516060810167ffffffffffffffff8111828210171561ac895761ac8961a659565b60405290565b60008067ffffffffffffffff84111561acaa5761acaa61a659565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561acd95761acd961a659565b60405283815290508082840185101561acf157600080fd5b617bbe84602083018561a02a565b600082601f83011261ad1057600080fd5b615ef28383516020850161ac8f565b60006020828403121561ad3157600080fd5b815167ffffffffffffffff81111561ad4857600080fd5b615df58482850161acff565b6000835161ad6681846020880161a02a565b83519083019061ad7a81836020880161a02a565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161adbb81601a85016020880161a02a565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161adf881603384016020880161a02a565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000615ef2608083018461a04e565b60006020828403121561ae8757600080fd5b815167ffffffffffffffff81111561ae9e57600080fd5b8201601f8101841361aeaf57600080fd5b615df58482516020840161ac8f565b6000855161aed0818460208a0161a02a565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161af0a816001840160208a0161a02a565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161af4881600284016020890161a02a565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161af8a81600284016020880161a02a565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061afd5604083018461a04e565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161b04c81601f85016020870161a02a565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b0b9604083018461a04e565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b10b604083018461a04e565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b18281601485016020870161a02a565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b1c9604083018561a04e565b8281036020840152615eee818561a04e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b24281600185016020870161a02a565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b28881846020870161a02a565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b33b81604b85016020870161a02a565b91909101604b0192915050565b600060ff821660ff810361b35e5761b35e61a8d7565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b3c581602985016020870161a02a565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000615ef2608083018461a04e565b60006020828403121561b42b57600080fd5b815167ffffffffffffffff81111561b44257600080fd5b82016060818503121561b45457600080fd5b61b45c61ac66565b81518060030b811461b46d57600080fd5b8152602082015167ffffffffffffffff81111561b48957600080fd5b61b4958682850161acff565b602083015250604082015167ffffffffffffffff81111561b4b557600080fd5b61b4c18682850161acff565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b52d81602185016020870161a02a565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b71981602185016020880161a02a565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b75681602e84016020880161a02a565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b3c581602985016020870161a02a565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b81e81602285016020870161a02a565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b86381600e85016020870161a02a565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b94181601885016020880161a02a565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b97e81601c84016020880161a02a565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161ba8481846020870161a02a565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161baeb81601c85016020870161a02a565b91909101601c0192915050565b6000600019820361bb0b5761bb0b61a8d7565b5060010190565b8082028115828204841417615df957615df961a8d7565b6001815b600184111561bb645780850481111561bb485761bb4861a8d7565b600184161561bb5657908102905b60019390931c92800261bb2d565b935093915050565b60008261bb7b57506001615df9565b8161bb8857506000615df9565b816001811461bb9e576002811461bba85761bbc4565b6001915050615df9565b60ff84111561bbb95761bbb961a8d7565b50506001821b615df9565b5060208310610133831016604e8410600b841016171561bbe7575081810a615df9565b61bbf4600019848461bb29565b806000190482111561bc085761bc0861a8d7565b029392505050565b6000615ef2838361bb6c565b60008161bc2b5761bc2b61a8d7565b506000190190565b6000835161bc4581846020880161a02a565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161bc7f81600184016020880161a02a565b01600101949350505050565b81810360008312801583831316838312821617156191b6576191b661a8d756fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a00336080604052348015600f57600080fd5b506106308061001f6000396000f3fe60806040526004361061002a5760003560e01c80635ac1e07014610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610128565b610073565b34801561005f57600080fd5b5061003161006e366004610193565b6100ad565b7ff5d4d6ed1657736cfd625a04e0585c5def81b280f6bc1b7ed4add114e79f7e9a816040516100a29190610299565b60405180910390a150565b606081156100c4576100c1828401846103bb565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100ef87806104b1565b6100ff60408a0160208b0161051d565b8960400135338660405161011896959493929190610538565b60405180910390a1505050505050565b60006020828403121561013a57600080fd5b813567ffffffffffffffff81111561015157600080fd5b82016080818503121561016357600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461018e57600080fd5b919050565b6000806000806000608086880312156101ab57600080fd5b853567ffffffffffffffff8111156101c257600080fd5b8601606081890312156101d457600080fd5b94506101e26020870161016a565b935060408601359250606086013567ffffffffffffffff81111561020557600080fd5b8601601f8101881361021657600080fd5b803567ffffffffffffffff81111561022d57600080fd5b88602082840101111561023f57600080fd5b959894975092955050506020019190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff6102bb8361016a565b16602082015273ffffffffffffffffffffffffffffffffffffffff6102e26020840161016a565b1660408201526000604083013567ffffffffffffffff811680821461030657600080fd5b806060850152505060608301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261034357600080fd5b830160208101903567ffffffffffffffff81111561036057600080fd5b80360382131561036f57600080fd5b60808085015261038360a085018284610250565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156103cd57600080fd5b813567ffffffffffffffff8111156103e457600080fd5b8201601f810184136103f557600080fd5b803567ffffffffffffffff81111561040f5761040f61038c565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561047b5761047b61038c565b60405281815282820160200186101561049357600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126104e657600080fd5b83018035915067ffffffffffffffff82111561050157600080fd5b60200191503681900382131561051657600080fd5b9250929050565b60006020828403121561052f57600080fd5b6101638261016a565b60a08152600061054c60a08301888a610250565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156105b65760208187018101518483018201520161059a565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168301019250505097965050505050505056fea264697066735822122023cfd100c0b5ffb64d0a74f749750529178249712786f8146b8cbbfeedf3ca8264736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212201b1a136275cbee5409c60f315f9fc4e6eecd668368ddacf6f2cfdcef88de5c5a64736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a26469706673582212208e8f77cfa12544e2d718c412de2cca7e52ceb5ff77d474fce7807498392e556764736f6c634300081a0033", } // GatewayZEVMInboundTestABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go b/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go index 827113f4..7335a8bc 100644 --- a/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go +++ b/v2/pkg/gatewayzevm.t.sol/gatewayzevmoutboundtest.go @@ -37,6 +37,7 @@ type CallOptions struct { // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -71,8 +72,8 @@ type StdInvariantFuzzSelector struct { // GatewayZEVMOutboundTestMetaData contains all meta data concerning the GatewayZEVMOutboundTest contract. var GatewayZEVMOutboundTestMetaData = &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\":\"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\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsITargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsITargetIsProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfSenderIsNotProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderNotProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversal\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfSenderIsNotProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfSenderIsNotProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractIfTargetIsProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractIfSenderIsNotProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContractFailsIfSenderIsNotProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"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\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotProtocol\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyMessage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrProtocol\",\"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: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061fe228061003c6000396000f3fe608060405234801561001057600080fd5b506004361061034c5760003560e01c806385226c81116101bd578063c8814d2e116100f9578063eab7674e116100a2578063ef2b53941161007c578063ef2b53941461054a578063f1d98f1b14610552578063fa7626d41461055a578063fb339a1c1461056757600080fd5b8063eab7674e14610532578063eb78bd7d1461053a578063ec294d9f1461054257600080fd5b8063e09bc659116100d3578063e09bc659146104ed578063e20c9f71146104f5578063e63ab1e9146104fd57600080fd5b8063c8814d2e146104d5578063ca26929c146104dd578063cf2c3d1d146104e557600080fd5b8063996b767511610166578063b5508aa911610140578063b5508aa9146104a5578063b936be8c146104ad578063ba414fa6146104b5578063c35cb5e4146104cd57600080fd5b8063996b76751461048d5780639c9acd5d14610495578063b0464fdc1461049d57600080fd5b8063916a17c611610197578063916a17c61461047057806396d9d8761461048557806397f7661f1461044357600080fd5b806385226c811461044b578063884660a314610460578063890a2d671461046857600080fd5b80633e5e3c231161028c5780635cec7db5116102355780636efa04b51161020f5780636efa04b51461042b5780637cec29b0146104335780637f924c4e1461043b578063828d267c1461044357600080fd5b80635cec7db5146104065780636163f8ef1461040e57806366d9a9a01461041657600080fd5b806351336fb01161026657806351336fb0146103f657806358c9987f146103fe5780635b4c90e1146103a157600080fd5b80633e5e3c23146103de5780633f7286f4146103e657806348f4fd07146103ee57600080fd5b806327820625116102f95780632ade3880116102d35780632ade3880146103b1578063339bd828146103c65780633626c616146103ce5780633ab5b199146103d657600080fd5b806327820625146103995780632948df41146103a15780632acb21b4146103a957600080fd5b80631c785a141161032a5780631c785a141461036b5780631ed7831c146103735780632468bc0f1461039157600080fd5b8063084fafab146103515780630a9254e41461035b57806314b7a6da14610363575b600080fd5b61035961056f565b005b610359610745565b610359611252565b6103596113a2565b61037b611cb9565b604051610388919061a0d0565b60405180910390f35b610359611d1b565b6103596121e6565b6103596122ae565b610359612497565b6103b9612656565b604051610388919061a16c565b610359612798565b6103596128e4565b610359612a6c565b61037b612c1d565b61037b612c7d565b610359612cdd565b610359612e28565b610359612f73565b610359613128565b610359613316565b61041e613464565b604051610388919061a2d2565b6103596135e6565b61035961398a565b610359613b75565b610359613bae565b610453613d5a565b604051610388919061a370565b610359613e2a565b610359614109565b6104786142c4565b604051610388919061a3e7565b6103596143bf565b610359614512565b610359614666565b6104786147b6565b6104536148b1565b610359614981565b6104bd614b3e565b6040519015158152602001610388565b610359614c12565b610359614dcd565b610359614f0f565b610359615192565b610359615350565b61037b615509565b6105247f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b604051908152602001610388565b610359615569565b6103596156b7565b610359615875565b610359615a24565b610359615bd5565b601f546104bd9060ff1681565b610359615d23565b602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156105fe57600080fd5b505af1158015610612573d6000803e3d6000fd5b505050507f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76602c604051610646919061a5a0565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156106a857600080fd5b505af11580156106bc573d6000803e3d6000fd5b50506020546024546040517f717d335f0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063717d335f93506107119290911690602c9060040161a5b3565b600060405180830381600087803b15801561072b57600080fd5b505af115801561073f573d6000803e3d6000fd5b50505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161078b90619fe3565b604051809103906000f0801580156107a7573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c00000000000000000000000000000000006020820152602554915160248101939093529216604482015261088b919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052615ed6565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f2722feee0000000000000000000000000000000000000000000000000000000081529051632722feee926004808401939192918290030181865afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610971919061a5d5565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516109b590619ff0565b604051809103906000f0801580156109d1573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b158015610a6d57600080fd5b505af1158015610a81573d6000803e3d6000fd5b505050506000806000604051610a9690619ffd565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610ad2573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602054604051601293600193849360009391921690610b289061a00a565b610b379695949392919061a5fe565b604051809103906000f080158015610b53573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610c6857600080fd5b505af1158015610c7c573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610cfc57600080fd5b505af1158015610d10573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e11919061a6f3565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea6919061a6f3565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f0557600080fd5b505af1158015610f19573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015611017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103b919061a6f3565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561108d57600080fd5b505af11580156110a1573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015611115573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611139919061a6f3565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b505060408051606081018252600080825260016020808401918252845190810185529182529282018190528151602c8054945167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009095166001600160a01b039290921691909117939093178355909350909150602d9061124d908261a78b565b505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156112ab57600080fd5b505af11580156112bf573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561132f57600080fd5b505af1158015611343573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260016024820152600060448201529116925063f45346dc9150606401610711565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156113fb57600080fd5b505af115801561140f573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506114fa919060040161a84a565b600060405180830381600087803b15801561151457600080fd5b505af1158015611528573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561157c57600080fd5b505af1158015611590573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156115ed57600080fd5b505af1158015611601573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506116ec919060040161a84a565b600060405180830381600087803b15801561170657600080fd5b505af115801561171a573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561176e57600080fd5b505af1158015611782573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156117df57600080fd5b505af11580156117f3573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561184757600080fd5b505af115801561185b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd93c066500000000000000000000000000000000000000000000000000000000600482015260019250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063c31eb0e090602401600060405180830381600087803b1580156118ce57600080fd5b505af11580156118e2573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561193f57600080fd5b505af1158015611953573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401600060405180830381600087803b1580156119cb57600080fd5b505af11580156119df573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a3c57600080fd5b505af1158015611a50573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611aa457600080fd5b505af1158015611ab8573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015611b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b30919061a85d565b9050611b3d600082615ef5565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611b9657600080fd5b505af1158015611baa573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611c2257600080fd5b505af1158015611c36573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cad919061a85d565b905061124d8382615ef5565b60606016805480602002602001604051908101604052809291908181526020018280548015611d1157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611cf3575b5050505050905090565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d90919061a85d565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e06919061a85d565b6024546040519192506001600160a01b03163190600090611e299060200161a876565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611f1757600080fd5b505af1158015611f2b573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450611f8693506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054611fb6936001600160a01b03928316928c92169061a8b3565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561201757600080fd5b505af115801561202b573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506120829286928c92911690889060040161a964565b600060405180830381600087803b15801561209c57600080fd5b505af11580156120b0573d6000803e3d6000fd5b50506022546027546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612103573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612127919061a85d565b905061213c612136888861a9cd565b82615ef5565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561218d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b1919061a85d565b90506121bd8682615ef5565b6121dc6121ca898761a9e0565b6024546001600160a01b031631615ef5565b5050505050505050565b604051630618f58760e51b81527f42c0407e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561225257600080fd5b505af1158015612266573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa7915060240161068e565b60006040516020016122bf9061a876565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561236d57600080fd5b505af1158015612381573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156123f157600080fd5b505af1158015612405573d6000803e3d6000fd5b50506020546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061246192869260009260019290911690899060040161a9f3565b600060405180830381600087803b15801561247b57600080fd5b505af115801561248f573d6000803e3d6000fd5b505050505050565b60006040516020016124a89061a876565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f42c0407e0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561257257600080fd5b505af1158015612586573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024015b600060405180830381600087803b1580156125e457600080fd5b505af11580156125f8573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b9450612461938793811692600192911690899060040161a9f3565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561278f57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156127785783829060005260206000200180546126eb9061a47e565b80601f01602080910402602001604051908101604052809291908181526020018280546127179061a47e565b80156127645780601f1061273957610100808354040283529160200191612764565b820191906000526020600020905b81548152906001019060200180831161274757829003601f168201915b5050505050815260200190600101906126cc565b50505050815250508152602001906001019061267a565b50505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156127f157600080fd5b505af1158015612805573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561287557600080fd5b505af1158015612889573d6000803e3d6000fd5b50506020546021546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450630310eb7693506107119290911690600190600090602c9060040161aa48565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561294057600080fd5b505af1158015612954573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156129c457600080fd5b505af11580156129d8573d6000803e3d6000fd5b50506020546021546027546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc91506064015b600060405180830381600087803b158015612a5157600080fd5b505af1158015612a65573d6000803e3d6000fd5b5050505050565b6000604051602001612a7d9061a876565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612b2b57600080fd5b505af1158015612b3f573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612baf57600080fd5b505af1158015612bc3573d6000803e3d6000fd5b50506020546021546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b93506124619286921690600190600090899060040161a9f3565b60606018805480602002602001604051908101604052809291908181526020018280548015611d11576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611cf3575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611d11576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611cf3575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612d3657600080fd5b505af1158015612d4a573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612dba57600080fd5b505af1158015612dce573d6000803e3d6000fd5b50506020546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450630310eb76935061071192600092600192911690602c9060040161aa48565b604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612e9457600080fd5b505af1158015612ea8573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612f0557600080fd5b505af1158015612f19573d6000803e3d6000fd5b50506020546021546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450630310eb76935061071192909116906001908590602c9060040161aa48565b6000604051602001612f849061a876565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561303257600080fd5b505af1158015613046573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156130b657600080fd5b505af11580156130ca573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450612461938793811692600092911690899060040161a9f3565b60405160019060009061313d9060200161a876565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561320757600080fd5b505af115801561321b573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561327857600080fd5b505af115801561328c573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a9591506132df90849087908590889060040161a964565b600060405180830381600087803b1580156132f957600080fd5b505af115801561330d573d6000803e3d6000fd5b50505050505050565b604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561338257600080fd5b505af1158015613396573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156133f357600080fd5b505af1158015613407573d6000803e3d6000fd5b50506020546021546027546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061071193928316926001921690602c9060040161aa48565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561278f57838290600052602060002090600202016040518060400160405290816000820180546134bb9061a47e565b80601f01602080910402602001604051908101604052809291908181526020018280546134e79061a47e565b80156135345780601f1061350957610100808354040283529160200191613534565b820191906000526020600020905b81548152906001019060200180831161351757829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156135ce57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161357b5790505b50505050508152505081526020019060010190613488565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa158015613636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061365a919061a85d565b9050613667600082615ef5565b60006040516020016136789061a876565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561376657600080fd5b505af115801561377a573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e94506137d593506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613806936001600160a01b0392831692600192169061a8b3565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561386757600080fd5b505af115801561387b573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca3794506138d9938793811692600192911690899060040161a9f3565b600060405180830381600087803b1580156138f357600080fd5b505af1158015613907573d6000803e3d6000fd5b5050602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061a85d565b905061073f600182615ef5565b600060405160200161399b9061a876565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613a8957600080fd5b505af1158015613a9d573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450613af893506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613b29936001600160a01b0392831692600192169061a8b3565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024016125ca565b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401611aef565b6000604051602001613bbf9061a876565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015613c6d57600080fd5b505af1158015613c81573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613cf157600080fd5b505af1158015613d05573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a959150612461908490600190600090889060040161a964565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561278f578382906000526020600020018054613d9d9061a47e565b80601f0160208091040260200160405190810160405280929190818152602001828054613dc99061a47e565b8015613e165780601f10613deb57610100808354040283529160200191613e16565b820191906000526020600020905b815481529060010190602001808311613df957829003601f168201915b505050505081526020019060010190613d7e565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa158015613e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e9e919061a85d565b9050613eab600082615ef5565b602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613f3a57600080fd5b505af1158015613f4e573d6000803e3d6000fd5b505050507f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76602c604051613f82919061a5a0565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613fe357600080fd5b505af1158015613ff7573d6000803e3d6000fd5b50506020546021546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061405493928316926001921690602c9060040161aa48565b600060405180830381600087803b15801561406e57600080fd5b505af1158015614082573d6000803e3d6000fd5b5050602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa1580156140d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f8919061a85d565b9050614105600182615ef5565b5050565b60405160019060009061411e9060200161a876565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156141e857600080fd5b505af11580156141fc573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561425957600080fd5b505af115801561426d573d6000803e3d6000fd5b50506020546027546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506132df9286928992911690889060040161a964565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561278f5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156143a757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116143545790505b505050505081525050815260200190600101906142e8565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561441b57600080fd5b505af115801561442f573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561449f57600080fd5b505af11580156144b3573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101869052911660448201819052925063f45346dc9150606401612a37565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561456b57600080fd5b505af115801561457f573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156145ef57600080fd5b505af1158015614603573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526000602482015290821660448201529116925063f45346dc9150606401610711565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156146bf57600080fd5b505af11580156146d3573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561474357600080fd5b505af1158015614757573d6000803e3d6000fd5b50506020546026546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b0391821660448201529116925063f45346dc9150606401610711565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561278f5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561489957602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116148465790505b505050505081525050815260200190600101906147da565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561278f5783829060005260206000200180546148f49061a47e565b80601f01602080910402602001604051908101604052809291908181526020018280546149209061a47e565b801561496d5780601f106149425761010080835404028352916020019161496d565b820191906000526020600020905b81548152906001019060200180831161495057829003601f168201915b5050505050815260200190600101906148d5565b6024546040516001600160a01b0390911631906000906149a39060200161a876565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015614a5157600080fd5b505af1158015614a65573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614ad557600080fd5b505af1158015614ae9573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a9591506132df908490600190600090889060040161a964565b60085460009060ff1615614b56575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015614be7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c0b919061a85d565b1415905090565b604051600190600090614c279060200161a876565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f42c0407e0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015614cf157600080fd5b505af1158015614d05573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614d6257600080fd5b505af1158015614d76573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506132df9286928992911690889060040161a964565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614e2657600080fd5b505af1158015614e3a573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614eaa57600080fd5b505af1158015614ebe573d6000803e3d6000fd5b50506020546040517f717d335f0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063717d335f915061071190600090602c9060040161a5b3565b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614f60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f84919061a85d565b9050614f91600082615ef5565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614fea57600080fd5b505af1158015614ffe573d6000803e3d6000fd5b5050604051630618f58760e51b81527f42c0407e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561506e57600080fd5b505af1158015615082573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b1580156150fa57600080fd5b505af115801561510e573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015615161573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615185919061a85d565b905061124d600082615ef5565b60006040516020016151a39061a876565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f42c0407e0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561526d57600080fd5b505af1158015615281573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156152de57600080fd5b505af11580156152f2573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450612461938793811692600192911690899060040161a9f3565b60006040516020016153619061a876565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561542b57600080fd5b505af115801561543f573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561549c57600080fd5b505af11580156154b0573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061246192869216906001908690899060040161a9f3565b60606015805480602002602001604051908101604052809291908181526020018280548015611d11576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611cf3575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156155c257600080fd5b505af11580156155d6573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561564657600080fd5b505af115801561565a573d6000803e3d6000fd5b50506020546021546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061071193928316926000921690602c9060040161aa48565b60006040516020016156c89061a876565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561579257600080fd5b505af11580156157a6573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561580357600080fd5b505af1158015615817573d6000803e3d6000fd5b50506020546021546027546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450612461938793811692600192911690899060040161a9f3565b60006040516020016158869061a876565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561593457600080fd5b505af1158015615948573d6000803e3d6000fd5b5050604051630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156159b857600080fd5b505af11580156159cc573d6000803e3d6000fd5b50506020546021546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a959350612461928692600092911690889060040161a964565b6000604051602001615a359061a876565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615ae357600080fd5b505af1158015615af7573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615b6757600080fd5b505af1158015615b7b573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca3793506124619286921690600190600090899060040161a9f3565b604051630618f58760e51b81527f42c0407e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015615c4157600080fd5b505af1158015615c55573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015615cb257600080fd5b505af1158015615cc6573d6000803e3d6000fd5b50506020546021546024546040517f0310eb760000000000000000000000000000000000000000000000000000000081526001600160a01b039384169550630310eb76945061071193928316926001921690602c9060040161aa48565b6000604051602001615d349061a876565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615de257600080fd5b505af1158015615df6573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615e6657600080fd5b505af1158015615e7a573d6000803e3d6000fd5b50506020546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061246192869260009260019290911690899060040161a9f3565b6000615ee061a017565b615eeb848483615f74565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015615f6057600080fd5b505afa15801561248f573d6000803e3d6000fd5b600080615f818584615fef565b9050615fe46040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001615fcf92919061aa7f565b60405160208183030381529060405285615ffb565b9150505b9392505050565b6000615fe88383616029565b60c0810151516000901561601f5761601884848460c00151616044565b9050615fe8565b61601884846161ea565b600061603583836162d5565b615fe883836020015184615ffb565b60008061604f6162e1565b9050600061605d86836163b4565b90506000616074826060015183602001518561685a565b9050600061608483838989616a6c565b90506000616091826178e9565b602081015181519192509060030b15616104578982604001516040516020016160bb92919061aaa1565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526160fb9160040161a84a565b60405180910390fd5b60006161476040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001617ab8565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061619a90849060040161a84a565b602060405180830381865afa1580156161b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906161db919061a5d5565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061623f90879060040161a84a565b600060405180830381865afa15801561625c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616284919081019061abdb565b905060006162b2828560405160200161629e92919061ac10565b604051602081830303815290604052617cb8565b90506001600160a01b038116615eeb5784846040516020016160bb92919061ac3f565b61410582826000617ccb565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061636890849060040161acea565b600060405180830381865afa158015616385573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526163ad919081019061ad31565b9250505090565b6163e66040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506164316040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61643a85617dce565b6020820152600061644a866181b3565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561648c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164b4919081019061ad31565b868385602001516040516020016164ce949392919061ad7a565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061652690859060040161a84a565b600060405180830381865afa158015616543573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261656b919081019061ad31565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906165b390849060040161ae7e565b602060405180830381865afa1580156165d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906165f4919061a6f3565b61660957816040516020016160bb919061aed0565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061664e90849060040161af62565b600060405180830381865afa15801561666b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616693919081019061ad31565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906166da90849060040161afb4565b602060405180830381865afa1580156166f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061671b919061a6f3565b156167b0576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061676590849060040161afb4565b600060405180830381865afa158015616782573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167aa919081019061ad31565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016167d5919061b006565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161680192919061b072565b600060405180830381865afa15801561681e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616846919081019061ad31565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816168765790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106168d6576168d661b097565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061692a5761692a61b097565b602002602001018190525084604051602001616946919061b0c6565b604051602081830303815290604052816002815181106169685761696861b097565b602002602001018190525082604051602001616984919061b132565b604051602081830303815290604052816003815181106169a6576169a661b097565b602002602001018190525060006169bc826178e9565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250616a4d9060408051808201825260008082526020918201528151808301909252845182528085019082015290618436565b616a6257856040516020016160bb919061b173565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616abc565b511590565b616c3057826020015115616b78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016160fb565b8260c0015115616c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016160fb565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081616c4957905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616ca49061b204565b935060ff1681518110616cb957616cb961b097565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616d0a919061b223565b604051602081830303815290604052828280616d259061b204565b935060ff1681518110616d3a57616d3a61b097565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280616d879061b204565b935060ff1681518110616d9c57616d9c61b097565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280616de99061b204565b935060ff1681518110616dfe57616dfe61b097565b60200260200101819052508760200151828280616e1a9061b204565b935060ff1681518110616e2f57616e2f61b097565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280616e7c9061b204565b935060ff1681518110616e9157616e9161b097565b602090810291909101015287518282616ea98161b204565b935060ff1681518110616ebe57616ebe61b097565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280616f0b9061b204565b935060ff1681518110616f2057616f2061b097565b6020026020010181905250616f3446618497565b8282616f3f8161b204565b935060ff1681518110616f5457616f5461b097565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280616fa19061b204565b935060ff1681518110616fb657616fb661b097565b602002602001018190525086828280616fce9061b204565b935060ff1681518110616fe357616fe361b097565b602090810291909101015285511561710a5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826170348161b204565b935060ff16815181106170495761704961b097565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061709990899060040161a84a565b600060405180830381865afa1580156170b6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526170de919081019061ad31565b82826170e98161b204565b935060ff16815181106170fe576170fe61b097565b60200260200101819052505b8460200151156171da5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826171538161b204565b935060ff16815181106171685761716861b097565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806171b59061b204565b935060ff16815181106171ca576171ca61b097565b60200260200101819052506173a1565b617212616ab78660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6172a55760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826172558161b204565b935060ff168151811061726a5761726a61b097565b60200260200101819052508460a0015160405160200161728a919061b0c6565b6040516020818303038152906040528282806171b59061b204565b8460c001511580156172e85750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526172e690511590565b155b156173a15760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261732c8161b204565b935060ff16815181106173415761734161b097565b602002602001018190525061735588618537565b604051602001617365919061b0c6565b6040516020818303038152906040528282806173809061b204565b935060ff16815181106173955761739561b097565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526173d590511590565b61746a5760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826174188161b204565b935060ff168151811061742d5761742d61b097565b602002602001018190525084604001518282806174499061b204565b935060ff168151811061745e5761745e61b097565b60200260200101819052505b60608501511561758b5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826174b38161b204565b935060ff16815181106174c8576174c861b097565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617537573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261755f919081019061ad31565b828261756a8161b204565b935060ff168151811061757f5761757f61b097565b60200260200101819052505b60e085015151156176325760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826175d58161b204565b935060ff16815181106175ea576175ea61b097565b60200260200101819052506176068560e0015160000151618497565b82826176118161b204565b935060ff16815181106176265761762661b097565b60200260200101819052505b60e085015160200151156176dc5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261767f8161b204565b935060ff16815181106176945761769461b097565b60200260200101819052506176b08560e0015160200151618497565b82826176bb8161b204565b935060ff16815181106176d0576176d061b097565b60200260200101819052505b60e085015160400151156177865760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826177298161b204565b935060ff168151811061773e5761773e61b097565b602002602001018190525061775a8560e0015160400151618497565b82826177658161b204565b935060ff168151811061777a5761777a61b097565b60200260200101819052505b60e085015160600151156178305760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826177d38161b204565b935060ff16815181106177e8576177e861b097565b60200260200101819052506178048560e0015160600151618497565b828261780f8161b204565b935060ff16815181106178245761782461b097565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561784e5761784e61a715565b60405190808252806020026020018201604052801561788157816020015b606081526020019060019003908161786c5790505b50905060005b8260ff168160ff1610156178da57838160ff16815181106178aa576178aa61b097565b6020026020010151828260ff16815181106178c7576178c761b097565b6020908102919091010152600101617887565b5093505050505b949350505050565b6179106040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916179969186910161b28e565b600060405180830381865afa1580156179b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526179db919081019061ad31565b905060006179e98683619026565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617a19919061a370565b6000604051808303816000875af1158015617a38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617a60919081019061b2d5565b805190915060030b15801590617a795750602081015151155b8015617a885750604081015151155b15616a625781600081518110617aa057617aa061b097565b60200260200101516040516020016160bb919061b38b565b60606000617aed8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150617b249082905b9061917b565b15617c81576000617ba182617b9b84617b95617b678a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906191a2565b90619204565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617c0590829061917b565b15617c6f57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c6c905b8290619289565b90505b617c78816192af565b92505050615fe8565b8215617c9a5784846040516020016160bb92919061b577565b5050604080516020810190915260008152615fe8565b509392505050565b6000808251602084016000f09392505050565b8160a0015115617cda57505050565b6000617ce7848484619318565b90506000617cf4826178e9565b602081015181519192509060030b158015617d905750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d9090604080518082018252600080825260209182015281518083019092528451825280850190820152617b1e565b15617d9d57505050505050565b60408201515115617dbd5781604001516040516020016160bb919061b61e565b806040516020016160bb919061b67c565b60606000617e038360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617e68905b8290618436565b15617ed757604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fe890617ed29083906198b3565b6192af565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f39905b829061993d565b60010361800657604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f9f90617c65565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fe890617ed2905b8390619289565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261806590617e61565b1561819c57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906180cd9083906199d7565b9050600081600183516180e0919061a9cd565b815181106180f0576180f061b097565b60200260200101519050618193617ed26181666040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906198b3565b95945050505050565b826040516020016160bb919061b6e7565b50919050565b606060006181e88360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061824a90617e61565b1561825857615fe8816192af565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526182b790617f32565b60010361832157604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fe890617ed290617fff565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261838090617e61565b1561819c57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906183e89083906199d7565b9050600181511115618424578060028251618403919061a9cd565b815181106184135761841361b097565b602002602001015192505050919050565b50826040516020016160bb919061b6e7565b80518251600091111561844b57506000615eef565b815183516020850151600092916184619161a9e0565b61846b919061a9cd565b905082602001518103618482576001915050615eef565b82516020840151819020912014905092915050565b606060006184a483619a7c565b600101905060008167ffffffffffffffff8111156184c4576184c461a715565b6040519080825280601f01601f1916602001820160405280156184ee576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846184f857509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916185c3905b8290619b5e565b1561860357505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618662906185bc565b156186a257505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618701906185bc565b1561874157505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526187a0906185bc565b806188055750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618805906185bc565b1561884557505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188a4906185bc565b806189095750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618909906185bc565b1561894957505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189a8906185bc565b80618a0d5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a0d906185bc565b15618a4d57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618aac906185bc565b80618b115750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618b11906185bc565b15618b5157505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618bb0906185bc565b15618bf057505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c4f906185bc565b15618c8f57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618cee906185bc565b15618d2e57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d8d906185bc565b15618dcd57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e2c906185bc565b15618e6c57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ecb906185bc565b80618f305750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f30906185bc565b15618f7057505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618fcf906185bc565b1561900f57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516160bb929060200161b7c5565b60608060005b84518110156190b157818582815181106190485761904861b097565b602002602001015160405160200161906192919061ac10565b604051602081830303815290604052915060018551619080919061a9cd565b81146190a95781604051602001619097919061b92e565b60405160208183030381529060405291505b60010161902c565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816190ca57905050905083816000815181106190f5576190f561b097565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106191495761914961b097565b602002602001018190525081816002815181106191685761916861b097565b6020908102919091010152949350505050565b60208083015183518351928401516000936191999291849190619b72565b14159392505050565b604080518082019091526000808252602082015260006191d48460000151856020015185600001518660200151619c83565b90508360200151816191e6919061a9cd565b845185906191f590839061a9cd565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015619229575081615eef565b60208083015190840151600191146192505750815160208481015190840151829020919020145b80156192815782518451859061926790839061a9cd565b905250825160208501805161927d90839061a9e0565b9052505b509192915050565b60408051808201909152600080825260208201526192a8838383619da3565b5092915050565b60606000826000015167ffffffffffffffff8111156192d0576192d061a715565b6040519080825280601f01601f1916602001820160405280156192fa576020820181803683370190505b50905060006020820190506192a88185602001518660000151619e4e565b606060006193246162e1565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161934157905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061939c9061b204565b935060ff16815181106193b1576193b161b097565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619402919061b96f565b60405160208183030381529060405282828061941d9061b204565b935060ff16815181106194325761943261b097565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061947f9061b204565b935060ff16815181106194945761949461b097565b6020026020010181905250826040516020016194b0919061b132565b6040516020818303038152906040528282806194cb9061b204565b935060ff16815181106194e0576194e061b097565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061952d9061b204565b935060ff16815181106195425761954261b097565b60200260200101819052506195578784619ec8565b82826195628161b204565b935060ff16815181106195775761957761b097565b6020908102919091010152855151156196235760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826195c98161b204565b935060ff16815181106195de576195de61b097565b60200260200101819052506195f7866000015184619ec8565b82826196028161b204565b935060ff16815181106196175761961761b097565b60200260200101819052505b8560800151156196915760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261966c8161b204565b935060ff16815181106196815761968161b097565b60200260200101819052506196f7565b84156196f75760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826196d68161b204565b935060ff16815181106196eb576196eb61b097565b60200260200101819052505b604086015151156197935760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826197418161b204565b935060ff16815181106197565761975661b097565b602002602001018190525085604001518282806197729061b204565b935060ff16815181106197875761978761b097565b60200260200101819052505b8560600151156197fd5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826197dc8161b204565b935060ff16815181106197f1576197f161b097565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561981b5761981b61a715565b60405190808252806020026020018201604052801561984e57816020015b60608152602001906001900390816198395790505b50905060005b8260ff168160ff1610156198a757838160ff16815181106198775761987761b097565b6020026020010151828260ff16815181106198945761989461b097565b6020908102919091010152600101619854565b50979650505050505050565b60408051808201909152600080825260208201528151835110156198d8575081615eef565b815183516020850151600092916198ee9161a9e0565b6198f8919061a9cd565b60208401519091506001908214619919575082516020840151819020908220145b80156199345783518551869061993090839061a9cd565b9052505b50929392505050565b60008082600001516199618560000151866020015186600001518760200151619c83565b61996b919061a9e0565b90505b8351602085015161997f919061a9e0565b81116192a8578161998f8161b9b4565b92505082600001516199c68560200151836199aa919061a9cd565b86516199b6919061a9cd565b8386600001518760200151619c83565b6199d0919061a9e0565b905061996e565b606060006199e5848461993d565b6199f090600161a9e0565b67ffffffffffffffff811115619a0857619a0861a715565b604051908082528060200260200182016040528015619a3b57816020015b6060815260200190600190039081619a265790505b50905060005b8151811015617cb057619a57617ed28686619289565b828281518110619a6957619a6961b097565b6020908102919091010152600101619a41565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619ac5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619af1576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310619b0f57662386f26fc10000830492506010015b6305f5e1008310619b27576305f5e100830492506008015b6127108310619b3b57612710830492506004015b60648310619b4d576064830492506002015b600a8310615eef5760010192915050565b6000619b6a8383619f08565b159392505050565b600080858411619c795760208411619c255760008415619bbd576001619b9986602061a9cd565b619ba490600861b9ce565b619baf90600261bacc565b619bb9919061a9cd565b1990505b8351811685619bcc898961a9e0565b619bd6919061a9cd565b805190935082165b818114619c1057878411619bf857879450505050506178e1565b83619c028161bad8565b945050828451169050619bde565b619c1a878561a9e0565b9450505050506178e1565b838320619c32858861a9cd565b619c3c908761a9e0565b91505b858210619c7757848220808203619c6457619c5a868461a9e0565b93505050506178e1565b619c6f60018461a9cd565b925050619c3f565b505b5092949350505050565b60008381868511619d8e5760208511619d3d5760008515619ccf576001619cab87602061a9cd565b619cb690600861b9ce565b619cc190600261bacc565b619ccb919061a9cd565b1990505b84518116600087619ce08b8b61a9e0565b619cea919061a9cd565b855190915083165b828114619d2f57818610619d1757619d0a8b8b61a9e0565b96505050505050506178e1565b85619d218161b9b4565b965050838651169050619cf2565b8596505050505050506178e1565b508383206000905b619d4f868961a9cd565b8211619d8c57858320808203619d6b57839450505050506178e1565b619d7660018561a9e0565b9350508180619d849061b9b4565b925050619d45565b505b619d98878761a9e0565b979650505050505050565b60408051808201909152600080825260208201526000619dd58560000151866020015186600001518760200151619c83565b602080870180519186019190915251909150619df1908261a9cd565b835284516020860151619e04919061a9e0565b8103619e135760008552619e45565b83518351619e21919061a9e0565b85518690619e3090839061a9cd565b9052508351619e3f908261a9e0565b60208601525b50909392505050565b60208110619e865781518352619e6560208461a9e0565b9250619e7260208361a9e0565b9150619e7f60208261a9cd565b9050619e4e565b6000198115619eb5576001619e9c83602061a9cd565b619ea89061010061bacc565b619eb2919061a9cd565b90505b9151835183169219169190911790915250565b60606000619ed684846163b4565b8051602080830151604051939450619ef09390910161baef565b60405160208183030381529060405291505092915050565b8151815160009190811115619f1b575081515b6020808501519084015160005b83811015619fd45782518251808214619fa4576000196020871015619f8357600184619f5589602061a9cd565b619f5f919061a9e0565b619f6a90600861b9ce565b619f7590600261bacc565b619f7f919061a9cd565b1990505b8181168382168181039114619fa1579750615eef9650505050505050565b50505b619faf60208661a9e0565b9450619fbc60208561a9e0565b93505050602081619fcd919061a9e0565b9050619f28565b5084518651616a62919061bb47565b610b678061bb6883390190565b61063d8061c6cf83390190565b61106f8061cd0c83390190565b6120728061dd7b83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a05a61a05f565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a05a6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a1115783516001600160a01b031683526020938401939092019160010161a0ea565b509095945050505050565b60005b8381101561a13757818101518382015260200161a11f565b50506000910152565b6000815180845261a15881602086016020860161a11c565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a268577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a24e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a23884865161a140565b602095860195909450929092019160010161a1fe565b50919750505060209485019492909201915060010161a194565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a2c85781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a288565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a268577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a33e604088018261a140565b905060208201519150868103602088015261a359818361a274565b96505050602093840193919091019060010161a2fa565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a268577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261a3d285835161a140565b9450602093840193919091019060010161a398565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a268577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a468604087018261a274565b955050602093840193919091019060010161a40f565b600181811c9082168061a49257607f821691505b6020821081036181ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600081546001600160a01b038116845267ffffffffffffffff8160a01c1660208501525060018201606060408501526000815461a5078161a47e565b806060880152600182166000811461a526576001811461a5605761a594565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166080890152608082151560051b890101935061a594565b84600052602060002060005b8381101561a58b5781548a82016080015260019091019060200161a56c565b89016080019450505b50919695505050505050565b602081526000615fe8602083018461a4cb565b6001600160a01b03831681526040602082015260006178e1604083018461a4cb565b60006020828403121561a5e757600080fd5b81516001600160a01b0381168114615fe857600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff881660408301528660608301526003861061a6b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261a6d960c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561a70557600080fd5b81518015158114615fe857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f82111561124d57806000526020600020601f840160051c8101602085101561a76b5750805b601f840160051c820191505b81811015612a65576000815560010161a777565b815167ffffffffffffffff81111561a7a55761a7a561a715565b61a7b98161a7b3845461a47e565b8461a744565b6020601f82116001811461a7ed576000831561a7d55750848201515b600019600385901b1c1916600184901b178455612a65565b600084815260208120601f198516915b8281101561a81d578785015182556020948501946001909201910161a7fd565b508482101561a83b5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000615fe8602083018461a140565b60006020828403121561a86f57600080fd5b5051919050565b602081526000615eef60208301600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b60a08152600061a8c660a083018761a140565b6001600160a01b03861660208401528460408401526001600160a01b03841660608401528281036080840152619d9881600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b600081516060845261a93b606085018261a140565b90506001600160a01b036020840151166020850152604083015160408501528091505092915050565b60808152600061a977608083018761a926565b8560208401526001600160a01b03851660408401528281036060840152619d98818561a140565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115615eef57615eef61a99e565b80820180821115615eef57615eef61a99e565b60a08152600061aa0660a083018861a926565b6001600160a01b03871660208401528560408401526001600160a01b0385166060840152828103608084015261aa3c818561a140565b98975050505050505050565b6001600160a01b03851681528360208201526001600160a01b0383166040820152608060608201526000616a62608083018461a4cb565b6001600160a01b03831681526040602082015260006178e1604083018461a140565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161aad981601a85016020880161a11c565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161ab1681601c84016020880161a11c565b01601c01949350505050565b6040516060810167ffffffffffffffff8111828210171561ab455761ab4561a715565b60405290565b60008067ffffffffffffffff84111561ab665761ab6661a715565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561ab955761ab9561a715565b60405283815290508082840185101561abad57600080fd5b617cb084602083018561a11c565b600082601f83011261abcc57600080fd5b615fe88383516020850161ab4b565b60006020828403121561abed57600080fd5b815167ffffffffffffffff81111561ac0457600080fd5b615eeb8482850161abbb565b6000835161ac2281846020880161a11c565b83519083019061ac3681836020880161a11c565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ac7781601a85016020880161a11c565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161acb481603384016020880161a11c565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000615fe8608083018461a140565b60006020828403121561ad4357600080fd5b815167ffffffffffffffff81111561ad5a57600080fd5b8201601f8101841361ad6b57600080fd5b615eeb8482516020840161ab4b565b6000855161ad8c818460208a0161a11c565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161adc6816001840160208a0161a11c565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161ae0481600284016020890161a11c565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161ae4681600284016020880161a11c565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061ae91604083018461a140565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161af0881601f85016020870161a11c565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061af75604083018461a140565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061afc7604083018461a140565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b03e81601485016020870161a11c565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b085604083018561a140565b8281036020840152615fe4818561a140565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b0fe81600185016020870161a11c565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b14481846020870161a11c565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b1f781604b85016020870161a11c565b91909101604b0192915050565b600060ff821660ff810361b21a5761b21a61a99e565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b28181602985016020870161a11c565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000615fe8608083018461a140565b60006020828403121561b2e757600080fd5b815167ffffffffffffffff81111561b2fe57600080fd5b82016060818503121561b31057600080fd5b61b31861ab22565b81518060030b811461b32957600080fd5b8152602082015167ffffffffffffffff81111561b34557600080fd5b61b3518682850161abbb565b602083015250604082015167ffffffffffffffff81111561b37157600080fd5b61b37d8682850161abbb565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b3e981602185016020870161a11c565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b5d581602185016020880161a11c565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b61281602e84016020880161a11c565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b28181602985016020870161a11c565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b6da81602285016020870161a11c565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b71f81600e85016020870161a11c565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b7fd81601885016020880161a11c565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b83a81601c84016020880161a11c565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161b94081846020870161a11c565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161b9a781601c85016020870161a11c565b91909101601c0192915050565b6000600019820361b9c75761b9c761a99e565b5060010190565b8082028115828204841417615eef57615eef61a99e565b6001815b600184111561ba205780850481111561ba045761ba0461a99e565b600184161561ba1257908102905b60019390931c92800261b9e9565b935093915050565b60008261ba3757506001615eef565b8161ba4457506000615eef565b816001811461ba5a576002811461ba645761ba80565b6001915050615eef565b60ff84111561ba755761ba7561a99e565b50506001821b615eef565b5060208310610133831016604e8410600b841016171561baa3575081810a615eef565b61bab0600019848461b9e5565b806000190482111561bac45761bac461a99e565b029392505050565b6000615fe8838361ba28565b60008161bae75761bae761a99e565b506000190190565b6000835161bb0181846020880161a11c565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161bb3b81600184016020880161a11c565b01600101949350505050565b81810360008312801583831316838312821617156192a8576192a861a99e56fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a00336080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c8063660b9de014610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610140565b610073565b34801561005f57600080fd5b5061003161006e3660046101a6565b6100ad565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76816040516100a291906102a7565b60405180910390a150565b606081156100c4576100c1828401846103a2565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100ef8780610498565b6100ff60408a0160208b01610504565b8960400135338660405161011896959493929190610526565b60405180910390a1505050505050565b60006060828403121561013a57600080fd5b50919050565b60006020828403121561015257600080fd5b813567ffffffffffffffff81111561016957600080fd5b61017584828501610128565b949350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101a157600080fd5b919050565b6000806000806000608086880312156101be57600080fd5b853567ffffffffffffffff8111156101d557600080fd5b6101e188828901610128565b9550506101f06020870161017d565b935060408601359250606086013567ffffffffffffffff81111561021357600080fd5b8601601f8101881361022457600080fd5b803567ffffffffffffffff81111561023b57600080fd5b88602082840101111561024d57600080fd5b959894975092955050506020019190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff6102c98361017d565b1660208201526000602083013567ffffffffffffffff81168082146102ed57600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261032a57600080fd5b830160208101903567ffffffffffffffff81111561034757600080fd5b80360382131561035657600080fd5b60608085015261036a60808501828461025e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156103b457600080fd5b813567ffffffffffffffff8111156103cb57600080fd5b8201601f810184136103dc57600080fd5b803567ffffffffffffffff8111156103f6576103f6610373565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561046257610462610373565b60405281815282820160200186101561047a57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126104cd57600080fd5b83018035915067ffffffffffffffff8211156104e857600080fd5b6020019150368190038213156104fd57600080fd5b9250929050565b60006020828403121561051657600080fd5b61051f8261017d565b9392505050565b60a08152600061053a60a08301888a61025e565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156105a457602081870181015184830182015201610588565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168301019250505097965050505050505056fea2646970667358221220ff93d07870f1d8e50e4264dfe0294e91fdae9dea40dbbcba8170288316ad1a8464736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220e0645f0dc9560bf8a1975495bcc1a88ea921f354d9c6dd0b38d7de440cf329ed64736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a2646970667358221220a68363577a473f3dae57653d36c16fa8741beb1f64c8337861d65b6816a6e98564736f6c634300081a0033", + 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\":\"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\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsITargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsITargetIsProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfSenderIsNotProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositAndRevertZRC20AndCallUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderNotProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversal\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfSenderIsNotProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZETAAndCallUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfAmountIsZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfSenderIsNotProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractIfTargetIsGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZRC20AndCallUniversalContractIfTargetIsProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfZRC20IsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractFailsIfTargetIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertUniversalContractIfSenderIsNotProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContract\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContractFailsIfSenderIsNotProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteUniversalContractFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"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\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"CallerIsNotProtocol\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyMessage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrProtocol\",\"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: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061fe848061003c6000396000f3fe608060405234801561001057600080fd5b506004361061034c5760003560e01c806385226c81116101bd578063c8814d2e116100f9578063eab7674e116100a2578063ef2b53941161007c578063ef2b53941461054a578063f1d98f1b14610552578063fa7626d41461055a578063fb339a1c1461056757600080fd5b8063eab7674e14610532578063eb78bd7d1461053a578063ec294d9f1461054257600080fd5b8063e09bc659116100d3578063e09bc659146104ed578063e20c9f71146104f5578063e63ab1e9146104fd57600080fd5b8063c8814d2e146104d5578063ca26929c146104dd578063cf2c3d1d146104e557600080fd5b8063996b767511610166578063b5508aa911610140578063b5508aa9146104a5578063b936be8c146104ad578063ba414fa6146104b5578063c35cb5e4146104cd57600080fd5b8063996b76751461048d5780639c9acd5d14610495578063b0464fdc1461049d57600080fd5b8063916a17c611610197578063916a17c61461047057806396d9d8761461048557806397f7661f1461044357600080fd5b806385226c811461044b578063884660a314610460578063890a2d671461046857600080fd5b80633e5e3c231161028c5780635cec7db5116102355780636efa04b51161020f5780636efa04b51461042b5780637cec29b0146104335780637f924c4e1461043b578063828d267c1461044357600080fd5b80635cec7db5146104065780636163f8ef1461040e57806366d9a9a01461041657600080fd5b806351336fb01161026657806351336fb0146103f657806358c9987f146103fe5780635b4c90e1146103a157600080fd5b80633e5e3c23146103de5780633f7286f4146103e657806348f4fd07146103ee57600080fd5b806327820625116102f95780632ade3880116102d35780632ade3880146103b1578063339bd828146103c65780633626c616146103ce5780633ab5b199146103d657600080fd5b806327820625146103995780632948df41146103a15780632acb21b4146103a957600080fd5b80631c785a141161032a5780631c785a141461036b5780631ed7831c146103735780632468bc0f1461039157600080fd5b8063084fafab146103515780630a9254e41461035b57806314b7a6da14610363575b600080fd5b61035961056f565b005b610359610745565b61035961128f565b6103596113df565b61037b611cf6565b604051610388919061a10d565b60405180910390f35b610359611d58565b610359612223565b6103596122eb565b6103596124d4565b6103b9612693565b604051610388919061a1a9565b6103596127d5565b610359612921565b610359612aa9565b61037b612c5a565b61037b612cba565b610359612d1a565b610359612e65565b610359612fb0565b610359613165565b610359613353565b61041e6134a1565b604051610388919061a30f565b610359613623565b6103596139c7565b610359613bb2565b610359613beb565b610453613d97565b604051610388919061a3ad565b610359613e67565b610359614146565b610478614301565b604051610388919061a424565b6103596143fc565b61035961454f565b6103596146a3565b6104786147f3565b6104536148ee565b6103596149be565b6104bd614b7b565b6040519015158152602001610388565b610359614c4f565b610359614e0a565b610359614f4c565b6103596151cf565b61035961538d565b61037b615546565b6105247f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b604051908152602001610388565b6103596155a6565b6103596156f4565b6103596158b2565b610359615a61565b610359615c12565b601f546104bd9060ff1681565b610359615d60565b602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156105fe57600080fd5b505af1158015610612573d6000803e3d6000fd5b505050507ff5d4d6ed1657736cfd625a04e0585c5def81b280f6bc1b7ed4add114e79f7e9a602c604051610646919061a5f0565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156106a857600080fd5b505af11580156106bc573d6000803e3d6000fd5b50506020546024546040517fe7d926b40000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063e7d926b493506107119290911690602c9060040161a603565b600060405180830381600087803b15801561072b57600080fd5b505af115801561073f573d6000803e3d6000fd5b50505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805490911661123417905560405161078b9061a020565b604051809103906000f0801580156107a7573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c00000000000000000000000000000000006020820152602554915160248101939093529216604482015261088b919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc95500000000000000000000000000000000000000000000000000000000179052615f13565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b039384168102919091179182905560208054919092049092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921682178155604080517f2722feee0000000000000000000000000000000000000000000000000000000081529051632722feee926004808401939192918290030181865afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610971919061a625565b602780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516109b59061a02d565b604051809103906000f0801580156109d1573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161781556027546040517f06447d5600000000000000000000000000000000000000000000000000000000815292166004830152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b158015610a6d57600080fd5b505af1158015610a81573d6000803e3d6000fd5b505050506000806000604051610a969061a03a565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610ad2573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602054604051601293600193849360009391921690610b289061a047565b610b379695949392919061a64e565b604051809103906000f080158015610b53573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556023546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b50506023546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610c6857600080fd5b505af1158015610c7c573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610cfc57600080fd5b505af1158015610d10573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e11919061a743565b506021546025546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116906347e7ef24906044016020604051808303816000875af1158015610e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea6919061a743565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f0557600080fd5b505af1158015610f19573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b50506021546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a060248201529116925063095ea7b391506044016020604051808303816000875af1158015611017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103b919061a743565b50602260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0600a6040518263ffffffff1660e01b81526004016000604051808303818588803b15801561108d57600080fd5b505af11580156110a1573d6000803e3d6000fd5b50506022546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600a60248201529116935063095ea7b3925060440190506020604051808303816000875af1158015611115573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611139919061a743565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b5050604080516080810182526025546001600160a01b0390811682526000602080840182815260018587019081528651928301909652918152606084018190528351602c80549185167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911781559151602d8054965167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009097169190941617949094179091559093509150602e9061128a908261a7db565b505050565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156112e857600080fd5b505af11580156112fc573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561136c57600080fd5b505af1158015611380573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260016024820152600060448201529116925063f45346dc9150606401610711565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561143857600080fd5b505af115801561144c573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611537919060040161a89a565b600060405180830381600087803b15801561155157600080fd5b505af1158015611565573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156115b957600080fd5b505af11580156115cd573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561162a57600080fd5b505af115801561163e573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611729919060040161a89a565b600060405180830381600087803b15801561174357600080fd5b505af1158015611757573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117ab57600080fd5b505af11580156117bf573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561181c57600080fd5b505af1158015611830573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561188457600080fd5b505af1158015611898573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd93c066500000000000000000000000000000000000000000000000000000000600482015260019250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063c31eb0e090602401600060405180830381600087803b15801561190b57600080fd5b505af115801561191f573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561197c57600080fd5b505af1158015611990573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611a0857600080fd5b505af1158015611a1c573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a7957600080fd5b505af1158015611a8d573d6000803e3d6000fd5b50505050602060009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ae157600080fd5b505af1158015611af5573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015611b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6d919061a8ad565b9050611b7a600082615f32565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611bd357600080fd5b505af1158015611be7573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b158015611c5f57600080fd5b505af1158015611c73573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611cc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cea919061a8ad565b905061128a8382615f32565b60606016805480602002602001604051908101604052809291908181526020018280548015611d4e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611d30575b5050505050905090565b6022546027546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015611da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcd919061a8ad565b6022546020546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015611e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e43919061a8ad565b6024546040519192506001600160a01b03163190600090611e669060200161a8c6565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611f5457600080fd5b505af1158015611f68573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450611fc393506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054611ff3936001600160a01b03928316928c92169061a903565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561205457600080fd5b505af1158015612068573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a9593506120bf9286928c92911690889060040161a9b4565b600060405180830381600087803b1580156120d957600080fd5b505af11580156120ed573d6000803e3d6000fd5b50506022546027546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612140573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612164919061a8ad565b9050612179612173888861aa1d565b82615f32565b6022546020546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156121ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ee919061a8ad565b90506121fa8682615f32565b612219612207898761aa30565b6024546001600160a01b031631615f32565b5050505050505050565b604051630618f58760e51b81527f42c0407e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561228f57600080fd5b505af11580156122a3573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa7915060240161068e565b60006040516020016122fc9061a8c6565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b1580156123aa57600080fd5b505af11580156123be573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561242e57600080fd5b505af1158015612442573d6000803e3d6000fd5b50506020546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061249e92869260009260019290911690899060040161aa43565b600060405180830381600087803b1580156124b857600080fd5b505af11580156124cc573d6000803e3d6000fd5b505050505050565b60006040516020016124e59061a8c6565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f42c0407e0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156125af57600080fd5b505af11580156125c3573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa791506024015b600060405180830381600087803b15801561262157600080fd5b505af1158015612635573d6000803e3d6000fd5b50506020546021546024546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063bcf7f32b945061249e938793811692600192911690899060040161aa43565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156127cc57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156127b55783829060005260206000200180546127289061a4bb565b80601f01602080910402602001604051908101604052809291908181526020018280546127549061a4bb565b80156127a15780601f10612776576101008083540402835291602001916127a1565b820191906000526020600020905b81548152906001019060200180831161278457829003601f168201915b505050505081526020019060010190612709565b5050505081525050815260200190600101906126b7565b50505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561282e57600080fd5b505af1158015612842573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156128b257600080fd5b505af11580156128c6573d6000803e3d6000fd5b50506020546021546040517fcd73d4c70000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063cd73d4c793506107119290911690600190600090602c9060040161aa98565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561297d57600080fd5b505af1158015612991573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612a0157600080fd5b505af1158015612a15573d6000803e3d6000fd5b50506020546021546027546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810187905290821660448201529116925063f45346dc91506064015b600060405180830381600087803b158015612a8e57600080fd5b505af1158015612aa2573d6000803e3d6000fd5b5050505050565b6000604051602001612aba9061a8c6565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612bec57600080fd5b505af1158015612c00573d6000803e3d6000fd5b50506020546021546040517fbcf7f32b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063bcf7f32b935061249e9286921690600190600090899060040161aa43565b60606018805480602002602001604051908101604052809291908181526020018280548015611d4e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611d30575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611d4e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611d30575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612d7357600080fd5b505af1158015612d87573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612df757600080fd5b505af1158015612e0b573d6000803e3d6000fd5b50506020546024546040517fcd73d4c70000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063cd73d4c7935061071192600092600192911690602c9060040161aa98565b604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612ed157600080fd5b505af1158015612ee5573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612f4257600080fd5b505af1158015612f56573d6000803e3d6000fd5b50506020546021546040517fcd73d4c70000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063cd73d4c7935061071192909116906001908590602c9060040161aa98565b6000604051602001612fc19061a8c6565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561306f57600080fd5b505af1158015613083573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156130f357600080fd5b505af1158015613107573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061249e938793811692600092911690899060040161aa43565b60405160019060009061317a9060200161a8c6565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561324457600080fd5b505af1158015613258573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156132b557600080fd5b505af11580156132c9573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061331c90849087908590889060040161a9b4565b600060405180830381600087803b15801561333657600080fd5b505af115801561334a573d6000803e3d6000fd5b50505050505050565b604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156133bf57600080fd5b505af11580156133d3573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561343057600080fd5b505af1158015613444573d6000803e3d6000fd5b50506020546021546027546040517fcd73d4c70000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063cd73d4c7945061071193928316926001921690602c9060040161aa98565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156127cc57838290600052602060002090600202016040518060400160405290816000820180546134f89061a4bb565b80601f01602080910402602001604051908101604052809291908181526020018280546135249061a4bb565b80156135715780601f1061354657610100808354040283529160200191613571565b820191906000526020600020905b81548152906001019060200180831161355457829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561360b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116135b85790505b505050505081525050815260200190600101906134c5565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa158015613673573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613697919061a8ad565b90506136a4600082615f32565b60006040516020016136b59061a8c6565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156137a357600080fd5b505af11580156137b7573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e945061381293506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613843936001600160a01b0392831692600192169061a903565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156138a457600080fd5b505af11580156138b8573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca379450613916938793811692600192911690899060040161aa43565b600060405180830381600087803b15801561393057600080fd5b505af1158015613944573d6000803e3d6000fd5b5050602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015613996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ba919061a8ad565b905061073f600182615f32565b60006040516020016139d89061a8c6565b60408051601f19818403018152606080840190925260205490911b6bffffffffffffffffffffffff191660808301529150600090806094810160408051808303601f190181529181529082526027546001600160a01b03908116602084015260019282018390526024805492517f81bad6f300000000000000000000000000000000000000000000000000000000815260048101859052908101849052604481018490526064810193909352166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613ac657600080fd5b505af1158015613ada573d6000803e3d6000fd5b5050602080546040517fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e9450613b3593506001600160a01b03909116910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602754602054613b66936001600160a01b0392831692600192169061a903565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401612607565b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401611b2c565b6000604051602001613bfc9061a8c6565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015613caa57600080fd5b505af1158015613cbe573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613d2e57600080fd5b505af1158015613d42573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061249e908490600190600090889060040161a9b4565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156127cc578382906000526020600020018054613dda9061a4bb565b80601f0160208091040260200160405190810160405280929190818152602001828054613e069061a4bb565b8015613e535780601f10613e2857610100808354040283529160200191613e53565b820191906000526020600020905b815481529060010190602001808311613e3657829003601f168201915b505050505081526020019060010190613dbb565b602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009391909116916370a082319101602060405180830381865afa158015613eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613edb919061a8ad565b9050613ee8600082615f32565b602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613f7757600080fd5b505af1158015613f8b573d6000803e3d6000fd5b505050507ff5d4d6ed1657736cfd625a04e0585c5def81b280f6bc1b7ed4add114e79f7e9a602c604051613fbf919061a5f0565b60405180910390a160275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561402057600080fd5b505af1158015614034573d6000803e3d6000fd5b50506020546021546024546040517fcd73d4c70000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063cd73d4c7945061409193928316926001921690602c9060040161aa98565b600060405180830381600087803b1580156140ab57600080fd5b505af11580156140bf573d6000803e3d6000fd5b5050602154602480546040516370a0823160e01b81526001600160a01b03918216600482015260009550921692506370a082319101602060405180830381865afa158015614111573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614135919061a8ad565b9050614142600182615f32565b5050565b60405160019060009061415b9060200161a8c6565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561422557600080fd5b505af1158015614239573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561429657600080fd5b505af11580156142aa573d6000803e3d6000fd5b50506020546027546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061331c9286928992911690889060040161a9b4565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156127cc5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156143e457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116143915790505b50505050508152505081526020019060010190614325565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561445857600080fd5b505af115801561446c573d6000803e3d6000fd5b5050604051630618f58760e51b81527f82d5d76a000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156144dc57600080fd5b505af11580156144f0573d6000803e3d6000fd5b50506020546021546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101869052911660448201819052925063f45346dc9150606401612a74565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156145a857600080fd5b505af11580156145bc573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561462c57600080fd5b505af1158015614640573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526000602482015290821660448201529116925063f45346dc9150606401610711565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156146fc57600080fd5b505af1158015614710573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561478057600080fd5b505af1158015614794573d6000803e3d6000fd5b50506020546026546040517ff45346dc00000000000000000000000000000000000000000000000000000000815260006004820152600160248201526001600160a01b0391821660448201529116925063f45346dc9150606401610711565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156127cc5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156148d657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116148835790505b50505050508152505081526020019060010190614817565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156127cc5783829060005260206000200180546149319061a4bb565b80601f016020809104026020016040519081016040528092919081815260200182805461495d9061a4bb565b80156149aa5780601f1061497f576101008083540402835291602001916149aa565b820191906000526020600020905b81548152906001019060200180831161498d57829003601f168201915b505050505081526020019060010190614912565b6024546040516001600160a01b0390911631906000906149e09060200161a8c6565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015614a8e57600080fd5b505af1158015614aa2573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614b1257600080fd5b505af1158015614b26573d6000803e3d6000fd5b50506020546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506321501a95915061331c908490600190600090889060040161a9b4565b60085460009060ff1615614b93575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015614c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c48919061a8ad565b1415905090565b604051600190600090614c649060200161a8c6565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f42c0407e0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b158015614d2e57600080fd5b505af1158015614d42573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614d9f57600080fd5b505af1158015614db3573d6000803e3d6000fd5b50506020546024546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061331c9286928992911690889060040161a9b4565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614e6357600080fd5b505af1158015614e77573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614ee757600080fd5b505af1158015614efb573d6000803e3d6000fd5b50506020546040517fe7d926b40000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063e7d926b4915061071190600090602c9060040161a603565b6021546026546040516370a0823160e01b81526001600160a01b03918216600482015260019260009216906370a0823190602401602060405180830381865afa158015614f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fc1919061a8ad565b9050614fce600082615f32565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561502757600080fd5b505af115801561503b573d6000803e3d6000fd5b5050604051630618f58760e51b81527f42c0407e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156150ab57600080fd5b505af11580156150bf573d6000803e3d6000fd5b50506020546021546026546040517ff45346dc0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810188905290821660448201529116925063f45346dc9150606401600060405180830381600087803b15801561513757600080fd5b505af115801561514b573d6000803e3d6000fd5b50506021546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561519e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151c2919061a8ad565b905061128a600082615f32565b60006040516020016151e09061a8c6565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f42c0407e0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156152aa57600080fd5b505af11580156152be573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561531b57600080fd5b505af115801561532f573d6000803e3d6000fd5b50506020546021546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061249e938793811692600192911690899060040161aa43565b600060405160200161539e9061a8c6565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b15801561546857600080fd5b505af115801561547c573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156154d957600080fd5b505af11580156154ed573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061249e92869216906001908690899060040161aa43565b60606015805480602002602001604051908101604052809291908181526020018280548015611d4e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611d30575050505050905090565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156155ff57600080fd5b505af1158015615613573d6000803e3d6000fd5b5050604051630618f58760e51b81527f5d67094f000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561568357600080fd5b505af1158015615697573d6000803e3d6000fd5b50506020546021546024546040517fcd73d4c70000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063cd73d4c7945061071193928316926000921690602c9060040161aa98565b60006040516020016157059061a8c6565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401526001838301528151630618f58760e51b81527f82d5d76a0000000000000000000000000000000000000000000000000000000060048201529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e091602480830192600092919082900301818387803b1580156157cf57600080fd5b505af11580156157e3573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561584057600080fd5b505af1158015615854573d6000803e3d6000fd5b50506020546021546027546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063c39aca37945061249e938793811692600192911690899060040161aa43565b60006040516020016158c39061a8c6565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b15801561597157600080fd5b505af1158015615985573d6000803e3d6000fd5b5050604051630618f58760e51b81527f19c08f49000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156159f557600080fd5b505af1158015615a09573d6000803e3d6000fd5b50506020546021546040517f21501a950000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321501a95935061249e928692600092911690889060040161a9b4565b6000604051602001615a729061a8c6565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615b2057600080fd5b505af1158015615b34573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615ba457600080fd5b505af1158015615bb8573d6000803e3d6000fd5b50506020546021546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061249e9286921690600190600090899060040161aa43565b604051630618f58760e51b81527f42c0407e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015615c7e57600080fd5b505af1158015615c92573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015615cef57600080fd5b505af1158015615d03573d6000803e3d6000fd5b50506020546021546024546040517fcd73d4c70000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063cd73d4c7945061071193928316926001921690602c9060040161aa98565b6000604051602001615d719061a8c6565b60408051601f19818403018152606080840183526020805490911b6bffffffffffffffffffffffff191660808501528251808503607401815260948501845284526027546001600160a01b0316908401819052600184840152825163ca669fa760e01b815260048101919091529151909350737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa791602480830192600092919082900301818387803b158015615e1f57600080fd5b505af1158015615e33573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015615ea357600080fd5b505af1158015615eb7573d6000803e3d6000fd5b50506020546024546040517fc39aca370000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063c39aca37935061249e92869260009260019290911690899060040161aa43565b6000615f1d61a054565b615f28848483615fb1565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015615f9d57600080fd5b505afa1580156124cc573d6000803e3d6000fd5b600080615fbe858461602c565b90506160216040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161600c92919061aacf565b60405160208183030381529060405285616038565b9150505b9392505050565b60006160258383616066565b60c0810151516000901561605c5761605584848460c00151616081565b9050616025565b6160558484616227565b60006160728383616312565b61602583836020015184616038565b60008061608c61631e565b9050600061609a86836163f1565b905060006160b18260600151836020015185616897565b905060006160c183838989616aa9565b905060006160ce82617926565b602081015181519192509060030b15616141578982604001516040516020016160f892919061aaf1565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526161389160040161a89a565b60405180910390fd5b60006161846040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001617af5565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906161d790849060040161a89a565b602060405180830381865afa1580156161f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616218919061a625565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061627c90879060040161a89a565b600060405180830381865afa158015616299573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526162c1919081019061ac2b565b905060006162ef82856040516020016162db92919061ac60565b604051602081830303815290604052617cf5565b90506001600160a01b038116615f285784846040516020016160f892919061ac8f565b61414282826000617d08565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906163a590849060040161ad3a565b600060405180830381865afa1580156163c2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526163ea919081019061ad81565b9250505090565b6164236040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d905061646e6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61647785617e0b565b60208201526000616487866181f0565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156164c9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164f1919081019061ad81565b8683856020015160405160200161650b949392919061adca565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061656390859060040161a89a565b600060405180830381865afa158015616580573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526165a8919081019061ad81565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906165f090849060040161aece565b602060405180830381865afa15801561660d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616631919061a743565b61664657816040516020016160f8919061af20565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061668b90849060040161afb2565b600060405180830381865afa1580156166a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526166d0919081019061ad81565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061671790849060040161b004565b602060405180830381865afa158015616734573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616758919061a743565b156167ed576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906167a290849060040161b004565b600060405180830381865afa1580156167bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167e7919081019061ad81565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001616812919061b056565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161683e92919061b0c2565b600060405180830381865afa15801561685b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616883919081019061ad81565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816168b35790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106169135761691361b0e7565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106169675761696761b0e7565b602002602001018190525084604051602001616983919061b116565b604051602081830303815290604052816002815181106169a5576169a561b0e7565b6020026020010181905250826040516020016169c1919061b182565b604051602081830303815290604052816003815181106169e3576169e361b0e7565b602002602001018190525060006169f982617926565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250616a8a9060408051808201825260008082526020918201528151808301909252845182528085019082015290618473565b616a9f57856040516020016160f8919061b1c3565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616af9565b511590565b616c6d57826020015115616bb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616138565b8260c0015115616c6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616138565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081616c8657905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616ce19061b254565b935060ff1681518110616cf657616cf661b0e7565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616d47919061b273565b604051602081830303815290604052828280616d629061b254565b935060ff1681518110616d7757616d7761b0e7565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280616dc49061b254565b935060ff1681518110616dd957616dd961b0e7565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280616e269061b254565b935060ff1681518110616e3b57616e3b61b0e7565b60200260200101819052508760200151828280616e579061b254565b935060ff1681518110616e6c57616e6c61b0e7565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280616eb99061b254565b935060ff1681518110616ece57616ece61b0e7565b602090810291909101015287518282616ee68161b254565b935060ff1681518110616efb57616efb61b0e7565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280616f489061b254565b935060ff1681518110616f5d57616f5d61b0e7565b6020026020010181905250616f71466184d4565b8282616f7c8161b254565b935060ff1681518110616f9157616f9161b0e7565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280616fde9061b254565b935060ff1681518110616ff357616ff361b0e7565b60200260200101819052508682828061700b9061b254565b935060ff16815181106170205761702061b0e7565b60209081029190910101528551156171475760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826170718161b254565b935060ff16815181106170865761708661b0e7565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906170d690899060040161a89a565b600060405180830381865afa1580156170f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261711b919081019061ad81565b82826171268161b254565b935060ff168151811061713b5761713b61b0e7565b60200260200101819052505b8460200151156172175760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826171908161b254565b935060ff16815181106171a5576171a561b0e7565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806171f29061b254565b935060ff16815181106172075761720761b0e7565b60200260200101819052506173de565b61724f616af48660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6172e25760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826172928161b254565b935060ff16815181106172a7576172a761b0e7565b60200260200101819052508460a001516040516020016172c7919061b116565b6040516020818303038152906040528282806171f29061b254565b8460c0015115801561732557506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261732390511590565b155b156173de5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826173698161b254565b935060ff168151811061737e5761737e61b0e7565b602002602001018190525061739288618574565b6040516020016173a2919061b116565b6040516020818303038152906040528282806173bd9061b254565b935060ff16815181106173d2576173d261b0e7565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261741290511590565b6174a75760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826174558161b254565b935060ff168151811061746a5761746a61b0e7565b602002602001018190525084604001518282806174869061b254565b935060ff168151811061749b5761749b61b0e7565b60200260200101819052505b6060850151156175c85760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826174f08161b254565b935060ff16815181106175055761750561b0e7565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617574573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261759c919081019061ad81565b82826175a78161b254565b935060ff16815181106175bc576175bc61b0e7565b60200260200101819052505b60e0850151511561766f5760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826176128161b254565b935060ff16815181106176275761762761b0e7565b60200260200101819052506176438560e00151600001516184d4565b828261764e8161b254565b935060ff16815181106176635761766361b0e7565b60200260200101819052505b60e085015160200151156177195760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826176bc8161b254565b935060ff16815181106176d1576176d161b0e7565b60200260200101819052506176ed8560e00151602001516184d4565b82826176f88161b254565b935060ff168151811061770d5761770d61b0e7565b60200260200101819052505b60e085015160400151156177c35760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826177668161b254565b935060ff168151811061777b5761777b61b0e7565b60200260200101819052506177978560e00151604001516184d4565b82826177a28161b254565b935060ff16815181106177b7576177b761b0e7565b60200260200101819052505b60e0850151606001511561786d5760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826178108161b254565b935060ff16815181106178255761782561b0e7565b60200260200101819052506178418560e00151606001516184d4565b828261784c8161b254565b935060ff16815181106178615761786161b0e7565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561788b5761788b61a765565b6040519080825280602002602001820160405280156178be57816020015b60608152602001906001900390816178a95790505b50905060005b8260ff168160ff16101561791757838160ff16815181106178e7576178e761b0e7565b6020026020010151828260ff16815181106179045761790461b0e7565b60209081029190910101526001016178c4565b5093505050505b949350505050565b61794d6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916179d39186910161b2de565b600060405180830381865afa1580156179f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617a18919081019061ad81565b90506000617a268683619063565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617a56919061a3ad565b6000604051808303816000875af1158015617a75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617a9d919081019061b325565b805190915060030b15801590617ab65750602081015151155b8015617ac55750604081015151155b15616a9f5781600081518110617add57617add61b0e7565b60200260200101516040516020016160f8919061b3db565b60606000617b2a8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150617b619082905b906191b8565b15617cbe576000617bde82617bd884617bd2617ba48a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906191df565b90619241565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617c429082906191b8565b15617cac57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ca9905b82906192c6565b90505b617cb5816192ec565b92505050616025565b8215617cd75784846040516020016160f892919061b5c7565b5050604080516020810190915260008152616025565b509392505050565b6000808251602084016000f09392505050565b8160a0015115617d1757505050565b6000617d24848484619355565b90506000617d3182617926565b602081015181519192509060030b158015617dcd5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dcd90604080518082018252600080825260209182015281518083019092528451825280850190820152617b5b565b15617dda57505050505050565b60408201515115617dfa5781604001516040516020016160f8919061b66e565b806040516020016160f8919061b6cc565b60606000617e408360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617ea5905b8290618473565b15617f1457604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261602590617f0f9083906198f0565b6192ec565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f76905b829061997a565b60010361804357604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617fdc90617ca2565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261602590617f0f905b83906192c6565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526180a290617e9e565b156181d957604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061810a908390619a14565b90506000816001835161811d919061aa1d565b8151811061812d5761812d61b0e7565b602002602001015190506181d0617f0f6181a36040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906198f0565b95945050505050565b826040516020016160f8919061b737565b50919050565b606060006182258360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061828790617e9e565b1561829557616025816192ec565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526182f490617f6f565b60010361835e57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261602590617f0f9061803c565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526183bd90617e9e565b156181d957604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618425908390619a14565b9050600181511115618461578060028251618440919061aa1d565b815181106184505761845061b0e7565b602002602001015192505050919050565b50826040516020016160f8919061b737565b80518251600091111561848857506000615f2c565b8151835160208501516000929161849e9161aa30565b6184a8919061aa1d565b9050826020015181036184bf576001915050615f2c565b82516020840151819020912014905092915050565b606060006184e183619ab9565b600101905060008167ffffffffffffffff8111156185015761850161a765565b6040519080825280601f01601f19166020018201604052801561852b576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461853557509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091618600905b8290619b9b565b1561864057505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261869f906185f9565b156186df57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261873e906185f9565b1561877e57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526187dd906185f9565b806188425750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618842906185f9565b1561888257505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188e1906185f9565b806189465750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618946906185f9565b1561898657505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189e5906185f9565b80618a4a5750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a4a906185f9565b15618a8a57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ae9906185f9565b80618b4e5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618b4e906185f9565b15618b8e57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618bed906185f9565b15618c2d57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c8c906185f9565b15618ccc57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d2b906185f9565b15618d6b57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618dca906185f9565b15618e0a57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e69906185f9565b15618ea957505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f08906185f9565b80618f6d5750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f6d906185f9565b15618fad57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261900c906185f9565b1561904c57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516160f8929060200161b815565b60608060005b84518110156190ee57818582815181106190855761908561b0e7565b602002602001015160405160200161909e92919061ac60565b6040516020818303038152906040529150600185516190bd919061aa1d565b81146190e657816040516020016190d4919061b97e565b60405160208183030381529060405291505b600101619069565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161910757905050905083816000815181106191325761913261b0e7565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106191865761918661b0e7565b602002602001018190525081816002815181106191a5576191a561b0e7565b6020908102919091010152949350505050565b60208083015183518351928401516000936191d69291849190619baf565b14159392505050565b604080518082019091526000808252602082015260006192118460000151856020015185600001518660200151619cc0565b9050836020015181619223919061aa1d565b8451859061923290839061aa1d565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015619266575081615f2c565b602080830151908401516001911461928d5750815160208481015190840151829020919020145b80156192be578251845185906192a490839061aa1d565b90525082516020850180516192ba90839061aa30565b9052505b509192915050565b60408051808201909152600080825260208201526192e5838383619de0565b5092915050565b60606000826000015167ffffffffffffffff81111561930d5761930d61a765565b6040519080825280601f01601f191660200182016040528015619337576020820181803683370190505b50905060006020820190506192e58185602001518660000151619e8b565b6060600061936161631e565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161937e57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806193d99061b254565b935060ff16815181106193ee576193ee61b0e7565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161943f919061b9bf565b60405160208183030381529060405282828061945a9061b254565b935060ff168151811061946f5761946f61b0e7565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806194bc9061b254565b935060ff16815181106194d1576194d161b0e7565b6020026020010181905250826040516020016194ed919061b182565b6040516020818303038152906040528282806195089061b254565b935060ff168151811061951d5761951d61b0e7565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061956a9061b254565b935060ff168151811061957f5761957f61b0e7565b60200260200101819052506195948784619f05565b828261959f8161b254565b935060ff16815181106195b4576195b461b0e7565b6020908102919091010152855151156196605760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826196068161b254565b935060ff168151811061961b5761961b61b0e7565b6020026020010181905250619634866000015184619f05565b828261963f8161b254565b935060ff16815181106196545761965461b0e7565b60200260200101819052505b8560800151156196ce5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826196a98161b254565b935060ff16815181106196be576196be61b0e7565b6020026020010181905250619734565b84156197345760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826197138161b254565b935060ff16815181106197285761972861b0e7565b60200260200101819052505b604086015151156197d05760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261977e8161b254565b935060ff16815181106197935761979361b0e7565b602002602001018190525085604001518282806197af9061b254565b935060ff16815181106197c4576197c461b0e7565b60200260200101819052505b85606001511561983a5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826198198161b254565b935060ff168151811061982e5761982e61b0e7565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156198585761985861a765565b60405190808252806020026020018201604052801561988b57816020015b60608152602001906001900390816198765790505b50905060005b8260ff168160ff1610156198e457838160ff16815181106198b4576198b461b0e7565b6020026020010151828260ff16815181106198d1576198d161b0e7565b6020908102919091010152600101619891565b50979650505050505050565b6040805180820190915260008082526020820152815183511015619915575081615f2c565b8151835160208501516000929161992b9161aa30565b619935919061aa1d565b60208401519091506001908214619956575082516020840151819020908220145b80156199715783518551869061996d90839061aa1d565b9052505b50929392505050565b600080826000015161999e8560000151866020015186600001518760200151619cc0565b6199a8919061aa30565b90505b835160208501516199bc919061aa30565b81116192e557816199cc8161ba04565b9250508260000151619a038560200151836199e7919061aa1d565b86516199f3919061aa1d565b8386600001518760200151619cc0565b619a0d919061aa30565b90506199ab565b60606000619a22848461997a565b619a2d90600161aa30565b67ffffffffffffffff811115619a4557619a4561a765565b604051908082528060200260200182016040528015619a7857816020015b6060815260200190600190039081619a635790505b50905060005b8151811015617ced57619a94617f0f86866192c6565b828281518110619aa657619aa661b0e7565b6020908102919091010152600101619a7e565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619b02577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619b2e576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310619b4c57662386f26fc10000830492506010015b6305f5e1008310619b64576305f5e100830492506008015b6127108310619b7857612710830492506004015b60648310619b8a576064830492506002015b600a8310615f2c5760010192915050565b6000619ba78383619f45565b159392505050565b600080858411619cb65760208411619c625760008415619bfa576001619bd686602061aa1d565b619be190600861ba1e565b619bec90600261bb1c565b619bf6919061aa1d565b1990505b8351811685619c09898961aa30565b619c13919061aa1d565b805190935082165b818114619c4d57878411619c35578794505050505061791e565b83619c3f8161bb28565b945050828451169050619c1b565b619c57878561aa30565b94505050505061791e565b838320619c6f858861aa1d565b619c79908761aa30565b91505b858210619cb457848220808203619ca157619c97868461aa30565b935050505061791e565b619cac60018461aa1d565b925050619c7c565b505b5092949350505050565b60008381868511619dcb5760208511619d7a5760008515619d0c576001619ce887602061aa1d565b619cf390600861ba1e565b619cfe90600261bb1c565b619d08919061aa1d565b1990505b84518116600087619d1d8b8b61aa30565b619d27919061aa1d565b855190915083165b828114619d6c57818610619d5457619d478b8b61aa30565b965050505050505061791e565b85619d5e8161ba04565b965050838651169050619d2f565b85965050505050505061791e565b508383206000905b619d8c868961aa1d565b8211619dc957858320808203619da8578394505050505061791e565b619db360018561aa30565b9350508180619dc19061ba04565b925050619d82565b505b619dd5878761aa30565b979650505050505050565b60408051808201909152600080825260208201526000619e128560000151866020015186600001518760200151619cc0565b602080870180519186019190915251909150619e2e908261aa1d565b835284516020860151619e41919061aa30565b8103619e505760008552619e82565b83518351619e5e919061aa30565b85518690619e6d90839061aa1d565b9052508351619e7c908261aa30565b60208601525b50909392505050565b60208110619ec35781518352619ea260208461aa30565b9250619eaf60208361aa30565b9150619ebc60208261aa1d565b9050619e8b565b6000198115619ef2576001619ed983602061aa1d565b619ee59061010061bb1c565b619eef919061aa1d565b90505b9151835183169219169190911790915250565b60606000619f1384846163f1565b8051602080830151604051939450619f2d9390910161bb3f565b60405160208183030381529060405291505092915050565b8151815160009190811115619f58575081515b6020808501519084015160005b8381101561a0115782518251808214619fe1576000196020871015619fc057600184619f9289602061aa1d565b619f9c919061aa30565b619fa790600861ba1e565b619fb290600261bb1c565b619fbc919061aa1d565b1990505b8181168382168181039114619fde579750615f2c9650505050505050565b50505b619fec60208661aa30565b9450619ff960208561aa30565b9350505060208161a00a919061aa30565b9050619f65565b5084518651616a9f919061bb97565b610b678061bbb883390190565b61064f8061c71f83390190565b61106f8061cd6e83390190565b6120728061dddd83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a09761a09c565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a0976040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a14e5783516001600160a01b031683526020938401939092019160010161a127565b509095945050505050565b60005b8381101561a17457818101518382015260200161a15c565b50506000910152565b6000815180845261a19581602086016020860161a159565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a2a5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a28b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a27584865161a17d565b602095860195909450929092019160010161a23b565b50919750505060209485019492909201915060010161a1d1565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a3055781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a2c5565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a2a5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a37b604088018261a17d565b905060208201519150868103602088015261a396818361a2b1565b96505050602093840193919091019060010161a337565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a2a5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261a40f85835161a17d565b9450602093840193919091019060010161a3d5565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a2a5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a4a5604087018261a2b1565b955050602093840193919091019060010161a44c565b600181811c9082168061a4cf57607f821691505b6020821081036181ea577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6001600160a01b038154168252600060018201546001600160a01b038116602085015267ffffffffffffffff8160a01c1660408501525060028201608060608501526000815461a5578161a4bb565b806080880152600182166000811461a576576001811461a5b05761a5e4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660a089015260a082151560051b890101935061a5e4565b84600052602060002060005b8381101561a5db5781548a820160a0015260019091019060200161a5bc565b890160a0019450505b50919695505050505050565b602081526000616025602083018461a508565b6001600160a01b038316815260406020820152600061791e604083018461a508565b60006020828403121561a63757600080fd5b81516001600160a01b038116811461602557600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff881660408301528660608301526003861061a708577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261a72960c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b60006020828403121561a75557600080fd5b8151801515811461602557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f82111561128a57806000526020600020601f840160051c8101602085101561a7bb5750805b601f840160051c820191505b81811015612aa2576000815560010161a7c7565b815167ffffffffffffffff81111561a7f55761a7f561a765565b61a8098161a803845461a4bb565b8461a794565b6020601f82116001811461a83d576000831561a8255750848201515b600019600385901b1c1916600184901b178455612aa2565b600084815260208120601f198516915b8281101561a86d578785015182556020948501946001909201910161a84d565b508482101561a88b5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000616025602083018461a17d565b60006020828403121561a8bf57600080fd5b5051919050565b602081526000615f2c60208301600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b60a08152600061a91660a083018761a17d565b6001600160a01b03861660208401528460408401526001600160a01b03841660608401528281036080840152619dd581600581527f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260400190565b600081516060845261a98b606085018261a17d565b90506001600160a01b036020840151166020850152604083015160408501528091505092915050565b60808152600061a9c7608083018761a976565b8560208401526001600160a01b03851660408401528281036060840152619dd5818561a17d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115615f2c57615f2c61a9ee565b80820180821115615f2c57615f2c61a9ee565b60a08152600061aa5660a083018861a976565b6001600160a01b03871660208401528560408401526001600160a01b0385166060840152828103608084015261aa8c818561a17d565b98975050505050505050565b6001600160a01b03851681528360208201526001600160a01b0383166040820152608060608201526000616a9f608083018461a508565b6001600160a01b038316815260406020820152600061791e604083018461a17d565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ab2981601a85016020880161a159565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161ab6681601c84016020880161a159565b01601c01949350505050565b6040516060810167ffffffffffffffff8111828210171561ab955761ab9561a765565b60405290565b60008067ffffffffffffffff84111561abb65761abb661a765565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561abe55761abe561a765565b60405283815290508082840185101561abfd57600080fd5b617ced84602083018561a159565b600082601f83011261ac1c57600080fd5b6160258383516020850161ab9b565b60006020828403121561ac3d57600080fd5b815167ffffffffffffffff81111561ac5457600080fd5b615f288482850161ac0b565b6000835161ac7281846020880161a159565b83519083019061ac8681836020880161a159565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161acc781601a85016020880161a159565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161ad0481603384016020880161a159565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000616025608083018461a17d565b60006020828403121561ad9357600080fd5b815167ffffffffffffffff81111561adaa57600080fd5b8201601f8101841361adbb57600080fd5b615f288482516020840161ab9b565b6000855161addc818460208a0161a159565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161ae16816001840160208a0161a159565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161ae5481600284016020890161a159565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161ae9681600284016020880161a159565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061aee1604083018461a17d565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161af5881601f85016020870161a159565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061afc5604083018461a17d565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b017604083018461a17d565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b08e81601485016020870161a159565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b0d5604083018561a17d565b8281036020840152616021818561a17d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b14e81600185016020870161a159565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b19481846020870161a159565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b24781604b85016020870161a159565b91909101604b0192915050565b600060ff821660ff810361b26a5761b26a61a9ee565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b2d181602985016020870161a159565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000616025608083018461a17d565b60006020828403121561b33757600080fd5b815167ffffffffffffffff81111561b34e57600080fd5b82016060818503121561b36057600080fd5b61b36861ab72565b81518060030b811461b37957600080fd5b8152602082015167ffffffffffffffff81111561b39557600080fd5b61b3a18682850161ac0b565b602083015250604082015167ffffffffffffffff81111561b3c157600080fd5b61b3cd8682850161ac0b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b43981602185016020870161a159565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b62581602185016020880161a159565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b66281602e84016020880161a159565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b2d181602985016020870161a159565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b72a81602285016020870161a159565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b76f81600e85016020870161a159565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b84d81601885016020880161a159565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b88a81601c84016020880161a159565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161b99081846020870161a159565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161b9f781601c85016020870161a159565b91909101601c0192915050565b6000600019820361ba175761ba1761a9ee565b5060010190565b8082028115828204841417615f2c57615f2c61a9ee565b6001815b600184111561ba705780850481111561ba545761ba5461a9ee565b600184161561ba6257908102905b60019390931c92800261ba39565b935093915050565b60008261ba8757506001615f2c565b8161ba9457506000615f2c565b816001811461baaa576002811461bab45761bad0565b6001915050615f2c565b60ff84111561bac55761bac561a9ee565b50506001821b615f2c565b5060208310610133831016604e8410600b841016171561baf3575081810a615f2c565b61bb00600019848461ba35565b806000190482111561bb145761bb1461a9ee565b029392505050565b6000616025838361ba78565b60008161bb375761bb3761a9ee565b506000190190565b6000835161bb5181846020880161a159565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161bb8b81600184016020880161a159565b01600101949350505050565b81810360008312801583831316838312821617156192e5576192e561a9ee56fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a00336080604052348015600f57600080fd5b506106308061001f6000396000f3fe60806040526004361061002a5760003560e01c80635ac1e07014610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610128565b610073565b34801561005f57600080fd5b5061003161006e366004610193565b6100ad565b7ff5d4d6ed1657736cfd625a04e0585c5def81b280f6bc1b7ed4add114e79f7e9a816040516100a29190610299565b60405180910390a150565b606081156100c4576100c1828401846103bb565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100ef87806104b1565b6100ff60408a0160208b0161051d565b8960400135338660405161011896959493929190610538565b60405180910390a1505050505050565b60006020828403121561013a57600080fd5b813567ffffffffffffffff81111561015157600080fd5b82016080818503121561016357600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461018e57600080fd5b919050565b6000806000806000608086880312156101ab57600080fd5b853567ffffffffffffffff8111156101c257600080fd5b8601606081890312156101d457600080fd5b94506101e26020870161016a565b935060408601359250606086013567ffffffffffffffff81111561020557600080fd5b8601601f8101881361021657600080fd5b803567ffffffffffffffff81111561022d57600080fd5b88602082840101111561023f57600080fd5b959894975092955050506020019190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff6102bb8361016a565b16602082015273ffffffffffffffffffffffffffffffffffffffff6102e26020840161016a565b1660408201526000604083013567ffffffffffffffff811680821461030657600080fd5b806060850152505060608301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261034357600080fd5b830160208101903567ffffffffffffffff81111561036057600080fd5b80360382131561036f57600080fd5b60808085015261038360a085018284610250565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156103cd57600080fd5b813567ffffffffffffffff8111156103e457600080fd5b8201601f810184136103f557600080fd5b803567ffffffffffffffff81111561040f5761040f61038c565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561047b5761047b61038c565b60405281815282820160200186101561049357600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126104e657600080fd5b83018035915067ffffffffffffffff82111561050157600080fd5b60200191503681900382131561051657600080fd5b9250929050565b60006020828403121561052f57600080fd5b6101638261016a565b60a08152600061054c60a08301888a610250565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156105b65760208187018101518483018201520161059a565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168301019250505097965050505050505056fea264697066735822122023cfd100c0b5ffb64d0a74f749750529178249712786f8146b8cbbfeedf3ca8264736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212201b1a136275cbee5409c60f315f9fc4e6eecd668368ddacf6f2cfdcef88de5c5a64736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a264697066735822122038f5e6e956cf2c96bf1463494f8fe65913f394a1a4ddb9a0a0db2420321a134a64736f6c634300081a0033", } // GatewayZEVMOutboundTestABI is the input ABI used to generate the binding from. @@ -1832,9 +1833,9 @@ type GatewayZEVMOutboundTestContextDataRevert struct { Raw types.Log // Blockchain specific contextual infos } -// FilterContextDataRevert is a free log retrieval operation binding the contract event 0x35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76. +// FilterContextDataRevert is a free log retrieval operation binding the contract event 0xf5d4d6ed1657736cfd625a04e0585c5def81b280f6bc1b7ed4add114e79f7e9a. // -// Solidity: event ContextDataRevert((address,uint64,bytes) revertContext) +// Solidity: event ContextDataRevert((address,address,uint64,bytes) revertContext) func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestFilterer) FilterContextDataRevert(opts *bind.FilterOpts) (*GatewayZEVMOutboundTestContextDataRevertIterator, error) { logs, sub, err := _GatewayZEVMOutboundTest.contract.FilterLogs(opts, "ContextDataRevert") @@ -1844,9 +1845,9 @@ func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestFilterer) FilterContextDa return &GatewayZEVMOutboundTestContextDataRevertIterator{contract: _GatewayZEVMOutboundTest.contract, event: "ContextDataRevert", logs: logs, sub: sub}, nil } -// WatchContextDataRevert is a free log subscription operation binding the contract event 0x35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76. +// WatchContextDataRevert is a free log subscription operation binding the contract event 0xf5d4d6ed1657736cfd625a04e0585c5def81b280f6bc1b7ed4add114e79f7e9a. // -// Solidity: event ContextDataRevert((address,uint64,bytes) revertContext) +// Solidity: event ContextDataRevert((address,address,uint64,bytes) revertContext) func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestFilterer) WatchContextDataRevert(opts *bind.WatchOpts, sink chan<- *GatewayZEVMOutboundTestContextDataRevert) (event.Subscription, error) { logs, sub, err := _GatewayZEVMOutboundTest.contract.WatchLogs(opts, "ContextDataRevert") @@ -1881,9 +1882,9 @@ func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestFilterer) WatchContextDat }), nil } -// ParseContextDataRevert is a log parse operation binding the contract event 0x35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76. +// ParseContextDataRevert is a log parse operation binding the contract event 0xf5d4d6ed1657736cfd625a04e0585c5def81b280f6bc1b7ed4add114e79f7e9a. // -// Solidity: event ContextDataRevert((address,uint64,bytes) revertContext) +// Solidity: event ContextDataRevert((address,address,uint64,bytes) revertContext) func (_GatewayZEVMOutboundTest *GatewayZEVMOutboundTestFilterer) ParseContextDataRevert(log types.Log) (*GatewayZEVMOutboundTestContextDataRevert, error) { event := new(GatewayZEVMOutboundTestContextDataRevert) if err := _GatewayZEVMOutboundTest.contract.UnpackLog(event, "ContextDataRevert", log); err != nil { diff --git a/v2/pkg/ierc20custody.sol/ierc20custody.go b/v2/pkg/ierc20custody.sol/ierc20custody.go index efcebc68..dfdd4f46 100644 --- a/v2/pkg/ierc20custody.sol/ierc20custody.go +++ b/v2/pkg/ierc20custody.sol/ierc20custody.go @@ -31,6 +31,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -38,7 +39,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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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. @@ -260,23 +261,23 @@ func (_IERC20Custody *IERC20CustodyTransactorSession) WithdrawAndCall(token comm return _IERC20Custody.Contract.WithdrawAndCall(&_IERC20Custody.TransactOpts, token, to, amount, data) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xc709ab6e. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x5eb72e15. // -// Solidity: function withdrawAndRevert(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address token, address to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) returns() func (_IERC20Custody *IERC20CustodyTransactor) WithdrawAndRevert(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _IERC20Custody.contract.Transact(opts, "withdrawAndRevert", token, to, amount, data, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xc709ab6e. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x5eb72e15. // -// Solidity: function withdrawAndRevert(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address token, address to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) returns() func (_IERC20Custody *IERC20CustodySession) WithdrawAndRevert(token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _IERC20Custody.Contract.WithdrawAndRevert(&_IERC20Custody.TransactOpts, token, to, amount, data, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0xc709ab6e. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x5eb72e15. // -// Solidity: function withdrawAndRevert(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address token, address to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) returns() func (_IERC20Custody *IERC20CustodyTransactorSession) WithdrawAndRevert(token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _IERC20Custody.Contract.WithdrawAndRevert(&_IERC20Custody.TransactOpts, token, to, amount, data, revertContext) } @@ -1102,9 +1103,9 @@ type IERC20CustodyWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_IERC20Custody *IERC20CustodyFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*IERC20CustodyWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -1123,9 +1124,9 @@ func (_IERC20Custody *IERC20CustodyFilterer) FilterWithdrawnAndReverted(opts *bi return &IERC20CustodyWithdrawnAndRevertedIterator{contract: _IERC20Custody.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_IERC20Custody *IERC20CustodyFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *IERC20CustodyWithdrawnAndReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -1169,9 +1170,9 @@ func (_IERC20Custody *IERC20CustodyFilterer) WatchWithdrawnAndReverted(opts *bin }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_IERC20Custody *IERC20CustodyFilterer) ParseWithdrawnAndReverted(log types.Log) (*IERC20CustodyWithdrawnAndReverted, error) { event := new(IERC20CustodyWithdrawnAndReverted) if err := _IERC20Custody.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { diff --git a/v2/pkg/ierc20custody.sol/ierc20custodyevents.go b/v2/pkg/ierc20custody.sol/ierc20custodyevents.go index cb245ce3..83fbbc0a 100644 --- a/v2/pkg/ierc20custody.sol/ierc20custodyevents.go +++ b/v2/pkg/ierc20custody.sol/ierc20custodyevents.go @@ -31,6 +31,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -38,7 +39,7 @@ type RevertContext struct { // IERC20CustodyEventsMetaData contains all meta data concerning the IERC20CustodyEvents contract. var IERC20CustodyEventsMetaData = &bind.MetaData{ - ABI: "[{\"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\":\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", + ABI: "[{\"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\":\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", } // IERC20CustodyEventsABI is the input ABI used to generate the binding from. @@ -1008,9 +1009,9 @@ type IERC20CustodyEventsWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_IERC20CustodyEvents *IERC20CustodyEventsFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*IERC20CustodyEventsWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -1029,9 +1030,9 @@ func (_IERC20CustodyEvents *IERC20CustodyEventsFilterer) FilterWithdrawnAndRever return &IERC20CustodyEventsWithdrawnAndRevertedIterator{contract: _IERC20CustodyEvents.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_IERC20CustodyEvents *IERC20CustodyEventsFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *IERC20CustodyEventsWithdrawnAndReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -1075,9 +1076,9 @@ func (_IERC20CustodyEvents *IERC20CustodyEventsFilterer) WatchWithdrawnAndRevert }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37. // -// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_IERC20CustodyEvents *IERC20CustodyEventsFilterer) ParseWithdrawnAndReverted(log types.Log) (*IERC20CustodyEventsWithdrawnAndReverted, error) { event := new(IERC20CustodyEventsWithdrawnAndReverted) if err := _IERC20CustodyEvents.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { diff --git a/v2/pkg/igatewayevm.sol/igatewayevm.go b/v2/pkg/igatewayevm.sol/igatewayevm.go index 284d0f49..61a06ca3 100644 --- a/v2/pkg/igatewayevm.sol/igatewayevm.go +++ b/v2/pkg/igatewayevm.sol/igatewayevm.go @@ -36,6 +36,7 @@ type MessageContext struct { // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -52,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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"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\":\"NotWhitelistedInCustody\",\"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\":\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"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\":\"ZeroAddress\",\"inputs\":[]}]", } // IGatewayEVMABI is the input ABI used to generate the binding from. @@ -348,23 +349,23 @@ func (_IGatewayEVM *IGatewayEVMTransactorSession) Execute0(messageContext Messag return _IGatewayEVM.Contract.Execute0(&_IGatewayEVM.TransactOpts, messageContext, destination, data) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0xf7ad60db. +// ExecuteRevert is a paid mutator transaction binding the contract method 0x1b5ee25b. // -// Solidity: function executeRevert(address destination, bytes data, (address,uint64,bytes) revertContext) payable returns() +// Solidity: function executeRevert(address destination, bytes data, (address,address,uint64,bytes) revertContext) payable returns() func (_IGatewayEVM *IGatewayEVMTransactor) ExecuteRevert(opts *bind.TransactOpts, destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayEVM.contract.Transact(opts, "executeRevert", destination, data, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0xf7ad60db. +// ExecuteRevert is a paid mutator transaction binding the contract method 0x1b5ee25b. // -// Solidity: function executeRevert(address destination, bytes data, (address,uint64,bytes) revertContext) payable returns() +// Solidity: function executeRevert(address destination, bytes data, (address,address,uint64,bytes) revertContext) payable returns() func (_IGatewayEVM *IGatewayEVMSession) ExecuteRevert(destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayEVM.Contract.ExecuteRevert(&_IGatewayEVM.TransactOpts, destination, data, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0xf7ad60db. +// ExecuteRevert is a paid mutator transaction binding the contract method 0x1b5ee25b. // -// Solidity: function executeRevert(address destination, bytes data, (address,uint64,bytes) revertContext) payable returns() +// Solidity: function executeRevert(address destination, bytes data, (address,address,uint64,bytes) revertContext) payable returns() func (_IGatewayEVM *IGatewayEVMTransactorSession) ExecuteRevert(destination common.Address, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayEVM.Contract.ExecuteRevert(&_IGatewayEVM.TransactOpts, destination, data, revertContext) } @@ -390,23 +391,23 @@ func (_IGatewayEVM *IGatewayEVMTransactorSession) ExecuteWithERC20(token common. return _IGatewayEVM.Contract.ExecuteWithERC20(&_IGatewayEVM.TransactOpts, token, to, amount, data) } -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xd0b492c3. +// RevertWithERC20 is a paid mutator transaction binding the contract method 0x36c99f3b. // -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) returns() func (_IGatewayEVM *IGatewayEVMTransactor) RevertWithERC20(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayEVM.contract.Transact(opts, "revertWithERC20", token, to, amount, data, revertContext) } -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xd0b492c3. +// RevertWithERC20 is a paid mutator transaction binding the contract method 0x36c99f3b. // -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) returns() func (_IGatewayEVM *IGatewayEVMSession) RevertWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayEVM.Contract.RevertWithERC20(&_IGatewayEVM.TransactOpts, token, to, amount, data, revertContext) } -// RevertWithERC20 is a paid mutator transaction binding the contract method 0xd0b492c3. +// RevertWithERC20 is a paid mutator transaction binding the contract method 0x36c99f3b. // -// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) returns() +// Solidity: function revertWithERC20(address token, address to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) returns() func (_IGatewayEVM *IGatewayEVMTransactorSession) RevertWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayEVM.Contract.RevertWithERC20(&_IGatewayEVM.TransactOpts, token, to, amount, data, revertContext) } @@ -1101,9 +1102,9 @@ type IGatewayEVMReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// FilterReverted is a free log retrieval operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_IGatewayEVM *IGatewayEVMFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*IGatewayEVMRevertedIterator, error) { var toRule []interface{} @@ -1122,9 +1123,9 @@ func (_IGatewayEVM *IGatewayEVMFilterer) FilterReverted(opts *bind.FilterOpts, t return &IGatewayEVMRevertedIterator{contract: _IGatewayEVM.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// WatchReverted is a free log subscription operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_IGatewayEVM *IGatewayEVMFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *IGatewayEVMReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -1168,9 +1169,9 @@ func (_IGatewayEVM *IGatewayEVMFilterer) WatchReverted(opts *bind.WatchOpts, sin }), nil } -// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// ParseReverted is a log parse operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_IGatewayEVM *IGatewayEVMFilterer) ParseReverted(log types.Log) (*IGatewayEVMReverted, error) { event := new(IGatewayEVMReverted) if err := _IGatewayEVM.contract.UnpackLog(event, "Reverted", log); err != nil { diff --git a/v2/pkg/igatewayevm.sol/igatewayevmerrors.go b/v2/pkg/igatewayevm.sol/igatewayevmerrors.go index 8eea2600..02415dd5 100644 --- a/v2/pkg/igatewayevm.sol/igatewayevmerrors.go +++ b/v2/pkg/igatewayevm.sol/igatewayevmerrors.go @@ -31,7 +31,7 @@ var ( // IGatewayEVMErrorsMetaData contains all meta data concerning the IGatewayEVMErrors contract. var IGatewayEVMErrorsMetaData = &bind.MetaData{ - ABI: "[{\"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\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + ABI: "[{\"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\":\"ZeroAddress\",\"inputs\":[]}]", } // IGatewayEVMErrorsABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/igatewayevm.sol/igatewayevmevents.go b/v2/pkg/igatewayevm.sol/igatewayevmevents.go index 0eecc546..7e907472 100644 --- a/v2/pkg/igatewayevm.sol/igatewayevmevents.go +++ b/v2/pkg/igatewayevm.sol/igatewayevmevents.go @@ -31,6 +31,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -47,7 +48,7 @@ type RevertOptions struct { // IGatewayEVMEventsMetaData contains all meta data concerning the IGatewayEVMEvents contract. var IGatewayEVMEventsMetaData = &bind.MetaData{ - ABI: "[{\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", + ABI: "[{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", } // IGatewayEVMEventsABI is the input ABI used to generate the binding from. @@ -886,9 +887,9 @@ type IGatewayEVMEventsReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// FilterReverted is a free log retrieval operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_IGatewayEVMEvents *IGatewayEVMEventsFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*IGatewayEVMEventsRevertedIterator, error) { var toRule []interface{} @@ -907,9 +908,9 @@ func (_IGatewayEVMEvents *IGatewayEVMEventsFilterer) FilterReverted(opts *bind.F return &IGatewayEVMEventsRevertedIterator{contract: _IGatewayEVMEvents.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// WatchReverted is a free log subscription operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_IGatewayEVMEvents *IGatewayEVMEventsFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *IGatewayEVMEventsReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -953,9 +954,9 @@ func (_IGatewayEVMEvents *IGatewayEVMEventsFilterer) WatchReverted(opts *bind.Wa }), nil } -// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// ParseReverted is a log parse operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_IGatewayEVMEvents *IGatewayEVMEventsFilterer) ParseReverted(log types.Log) (*IGatewayEVMEventsReverted, error) { event := new(IGatewayEVMEventsReverted) if err := _IGatewayEVMEvents.contract.UnpackLog(event, "Reverted", log); err != nil { diff --git a/v2/pkg/igatewayzevm.sol/igatewayzevm.go b/v2/pkg/igatewayzevm.sol/igatewayzevm.go index 1b16b4de..f1a31f54 100644 --- a/v2/pkg/igatewayzevm.sol/igatewayzevm.go +++ b/v2/pkg/igatewayzevm.sol/igatewayzevm.go @@ -37,6 +37,7 @@ type CallOptions struct { // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -60,7 +61,7 @@ type ZContext struct { // IGatewayZEVMMetaData contains all meta data concerning the IGatewayZEVM contract. var IGatewayZEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"callOptions\",\"type\":\"tuple\",\"internalType\":\"structCallOptions\",\"components\":[{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"isArbitraryCall\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"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\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"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\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"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\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"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\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"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\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"callOptions\",\"type\":\"tuple\",\"internalType\":\"structCallOptions\",\"components\":[{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"isArbitraryCall\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"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\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"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\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"callOptions\",\"type\":\"tuple\",\"internalType\":\"structCallOptions\",\"components\":[{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"isArbitraryCall\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"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\":\"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\":\"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\":\"error\",\"name\":\"CallerIsNotProtocol\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyMessage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrProtocol\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"callOptions\",\"type\":\"tuple\",\"internalType\":\"structCallOptions\",\"components\":[{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"isArbitraryCall\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"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\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"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\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositAndRevert\",\"inputs\":[{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"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\":\"withdraw\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"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\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"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\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"callOptions\",\"type\":\"tuple\",\"internalType\":\"structCallOptions\",\"components\":[{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"isArbitraryCall\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"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\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"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\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"callOptions\",\"type\":\"tuple\",\"internalType\":\"structCallOptions\",\"components\":[{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"isArbitraryCall\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"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\":\"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\":\"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\":\"error\",\"name\":\"CallerIsNotProtocol\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyMessage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrProtocol\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]}]", } // IGatewayZEVMABI is the input ABI used to generate the binding from. @@ -314,23 +315,23 @@ func (_IGatewayZEVM *IGatewayZEVMTransactorSession) DepositAndCall0(context ZCon return _IGatewayZEVM.Contract.DepositAndCall0(&_IGatewayZEVM.TransactOpts, context, zrc20, amount, target, message) } -// DepositAndRevert is a paid mutator transaction binding the contract method 0x0310eb76. +// DepositAndRevert is a paid mutator transaction binding the contract method 0xcd73d4c7. // -// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,uint64,bytes) revertContext) returns() +// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,address,uint64,bytes) revertContext) returns() func (_IGatewayZEVM *IGatewayZEVMTransactor) DepositAndRevert(opts *bind.TransactOpts, zrc20 common.Address, amount *big.Int, target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayZEVM.contract.Transact(opts, "depositAndRevert", zrc20, amount, target, revertContext) } -// DepositAndRevert is a paid mutator transaction binding the contract method 0x0310eb76. +// DepositAndRevert is a paid mutator transaction binding the contract method 0xcd73d4c7. // -// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,uint64,bytes) revertContext) returns() +// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,address,uint64,bytes) revertContext) returns() func (_IGatewayZEVM *IGatewayZEVMSession) DepositAndRevert(zrc20 common.Address, amount *big.Int, target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayZEVM.Contract.DepositAndRevert(&_IGatewayZEVM.TransactOpts, zrc20, amount, target, revertContext) } -// DepositAndRevert is a paid mutator transaction binding the contract method 0x0310eb76. +// DepositAndRevert is a paid mutator transaction binding the contract method 0xcd73d4c7. // -// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,uint64,bytes) revertContext) returns() +// Solidity: function depositAndRevert(address zrc20, uint256 amount, address target, (address,address,uint64,bytes) revertContext) returns() func (_IGatewayZEVM *IGatewayZEVMTransactorSession) DepositAndRevert(zrc20 common.Address, amount *big.Int, target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayZEVM.Contract.DepositAndRevert(&_IGatewayZEVM.TransactOpts, zrc20, amount, target, revertContext) } @@ -356,23 +357,23 @@ func (_IGatewayZEVM *IGatewayZEVMTransactorSession) Execute(context ZContext, zr return _IGatewayZEVM.Contract.Execute(&_IGatewayZEVM.TransactOpts, context, zrc20, amount, target, message) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0x717d335f. +// ExecuteRevert is a paid mutator transaction binding the contract method 0xe7d926b4. // -// Solidity: function executeRevert(address target, (address,uint64,bytes) revertContext) returns() +// Solidity: function executeRevert(address target, (address,address,uint64,bytes) revertContext) returns() func (_IGatewayZEVM *IGatewayZEVMTransactor) ExecuteRevert(opts *bind.TransactOpts, target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayZEVM.contract.Transact(opts, "executeRevert", target, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0x717d335f. +// ExecuteRevert is a paid mutator transaction binding the contract method 0xe7d926b4. // -// Solidity: function executeRevert(address target, (address,uint64,bytes) revertContext) returns() +// Solidity: function executeRevert(address target, (address,address,uint64,bytes) revertContext) returns() func (_IGatewayZEVM *IGatewayZEVMSession) ExecuteRevert(target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayZEVM.Contract.ExecuteRevert(&_IGatewayZEVM.TransactOpts, target, revertContext) } -// ExecuteRevert is a paid mutator transaction binding the contract method 0x717d335f. +// ExecuteRevert is a paid mutator transaction binding the contract method 0xe7d926b4. // -// Solidity: function executeRevert(address target, (address,uint64,bytes) revertContext) returns() +// Solidity: function executeRevert(address target, (address,address,uint64,bytes) revertContext) returns() func (_IGatewayZEVM *IGatewayZEVMTransactorSession) ExecuteRevert(target common.Address, revertContext RevertContext) (*types.Transaction, error) { return _IGatewayZEVM.Contract.ExecuteRevert(&_IGatewayZEVM.TransactOpts, target, revertContext) } diff --git a/v2/pkg/ireceiverevm.sol/ireceiverevmevents.go b/v2/pkg/ireceiverevm.sol/ireceiverevmevents.go index 8e5ece36..e2af8748 100644 --- a/v2/pkg/ireceiverevm.sol/ireceiverevmevents.go +++ b/v2/pkg/ireceiverevm.sol/ireceiverevmevents.go @@ -31,6 +31,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -38,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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":[],\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", } // IReceiverEVMEventsABI is the input ABI used to generate the binding from. @@ -940,9 +941,9 @@ type IReceiverEVMEventsReceivedRevert struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_IReceiverEVMEvents *IReceiverEVMEventsFilterer) FilterReceivedRevert(opts *bind.FilterOpts) (*IReceiverEVMEventsReceivedRevertIterator, error) { logs, sub, err := _IReceiverEVMEvents.contract.FilterLogs(opts, "ReceivedRevert") @@ -952,9 +953,9 @@ func (_IReceiverEVMEvents *IReceiverEVMEventsFilterer) FilterReceivedRevert(opts return &IReceiverEVMEventsReceivedRevertIterator{contract: _IReceiverEVMEvents.contract, event: "ReceivedRevert", logs: logs, sub: sub}, nil } -// WatchReceivedRevert is a free log subscription operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// WatchReceivedRevert is a free log subscription operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_IReceiverEVMEvents *IReceiverEVMEventsFilterer) WatchReceivedRevert(opts *bind.WatchOpts, sink chan<- *IReceiverEVMEventsReceivedRevert) (event.Subscription, error) { logs, sub, err := _IReceiverEVMEvents.contract.WatchLogs(opts, "ReceivedRevert") @@ -989,9 +990,9 @@ func (_IReceiverEVMEvents *IReceiverEVMEventsFilterer) WatchReceivedRevert(opts }), nil } -// ParseReceivedRevert is a log parse operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// ParseReceivedRevert is a log parse operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_IReceiverEVMEvents *IReceiverEVMEventsFilterer) ParseReceivedRevert(log types.Log) (*IReceiverEVMEventsReceivedRevert, error) { event := new(IReceiverEVMEventsReceivedRevert) if err := _IReceiverEVMEvents.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { diff --git a/v2/pkg/izetaconnector.sol/izetaconnectorevents.go b/v2/pkg/izetaconnector.sol/izetaconnectorevents.go index faa317ea..ceb1a972 100644 --- a/v2/pkg/izetaconnector.sol/izetaconnectorevents.go +++ b/v2/pkg/izetaconnector.sol/izetaconnectorevents.go @@ -31,6 +31,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -38,7 +39,7 @@ type RevertContext struct { // IZetaConnectorEventsMetaData contains all meta data concerning the IZetaConnectorEvents contract. var IZetaConnectorEventsMetaData = &bind.MetaData{ - ABI: "[{\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", + ABI: "[{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", } // IZetaConnectorEventsABI is the input ABI used to generate the binding from. @@ -554,9 +555,9 @@ type IZetaConnectorEventsWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0xa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address) (*IZetaConnectorEventsWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -571,9 +572,9 @@ func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) FilterWithdrawnAndRev return &IZetaConnectorEventsWithdrawnAndRevertedIterator{contract: _IZetaConnectorEvents.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0xa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *IZetaConnectorEventsWithdrawnAndReverted, to []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -613,9 +614,9 @@ func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) WatchWithdrawnAndReve }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0xa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_IZetaConnectorEvents *IZetaConnectorEventsFilterer) ParseWithdrawnAndReverted(log types.Log) (*IZetaConnectorEventsWithdrawnAndReverted, error) { event := new(IZetaConnectorEventsWithdrawnAndReverted) if err := _IZetaConnectorEvents.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { diff --git a/v2/pkg/receiverevm.sol/receiverevm.go b/v2/pkg/receiverevm.sol/receiverevm.go index 4e6cbd46..28ab8cd3 100644 --- a/v2/pkg/receiverevm.sol/receiverevm.go +++ b/v2/pkg/receiverevm.sol/receiverevm.go @@ -36,6 +36,7 @@ type MessageContext struct { // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -43,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\":\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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: "0x6080604052348015600f57600080fd5b506001600055610ec3806100246000396000f3fe60806040526004361061006e5760003560e01c80636ed701691161004b5780636ed70169146100e0578063c5131691146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063660b9de014610097578063676cc054146100b757005b3661007557005b005b34801561008357600080fd5b50610075610092366004610724565b610148565b3480156100a357600080fd5b506100756100b2366004610760565b6101de565b6100ca6100c536600461079b565b61021a565b6040516100d79190610896565b60405180910390f35b3480156100ec57600080fd5b5061007561024d565b34801561010157600080fd5b50610075610110366004610724565b610282565b6100756101233660046109ce565b61035d565b34801561013457600080fd5b50610075610143366004610aba565b6103a1565b6101506103d6565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610419565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b7f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e338260405161020f929190610bed565b60405180910390a150565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a19392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61028a6103d6565b6000610297600285610ccc565b9050806000036102d3576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102f573ffffffffffffffffffffffffffffffffffffffff8416338484610419565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610394959493929190610d07565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103949493929190610d91565b600260005403610412576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104ae9085906104b4565b50505050565b60006104d673ffffffffffffffffffffffffffffffffffffffff84168361054f565b905080516000141580156104fb5750808060200190518101906104f99190610e54565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061055d83836000610564565b9392505050565b6060814710156105a2576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610546565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105cb9190610e71565b60006040518083038185875af1925050503d8060008114610608576040519150601f19603f3d011682016040523d82523d6000602084013e61060d565b606091505b509150915061061d868383610627565b9695505050505050565b60608261063c57610637826106b6565b61055d565b8151158015610660575073ffffffffffffffffffffffffffffffffffffffff84163b155b156106af576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610546565b508061055d565b8051156106c65780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461071f57600080fd5b919050565b60008060006060848603121561073957600080fd5b83359250610749602085016106fb565b9150610757604085016106fb565b90509250925092565b60006020828403121561077257600080fd5b813567ffffffffffffffff81111561078957600080fd5b82016060818503121561055d57600080fd5b600080600083850360408112156107b157600080fd5b60208112156107bf57600080fd5b50839250602084013567ffffffffffffffff8111156107dd57600080fd5b8401601f810186136107ee57600080fd5b803567ffffffffffffffff81111561080557600080fd5b86602082840101111561081757600080fd5b939660209190910195509293505050565b60005b8381101561084357818101518382015260200161082b565b50506000910152565b60008151808452610864816020860160208601610828565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061055d602083018461084c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561091f5761091f6108a9565b604052919050565b600082601f83011261093857600080fd5b813567ffffffffffffffff811115610952576109526108a9565b61098360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108d8565b81815284602083860101111561099857600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106f857600080fd5b803561071f816109b5565b6000806000606084860312156109e357600080fd5b833567ffffffffffffffff8111156109fa57600080fd5b610a0686828701610927565b935050602084013591506040840135610a1e816109b5565b809150509250925092565b600067ffffffffffffffff821115610a4357610a436108a9565b5060051b60200190565b600082601f830112610a5e57600080fd5b8135610a71610a6c82610a29565b6108d8565b8082825260208201915060208360051b860101925085831115610a9357600080fd5b602085015b83811015610ab0578035835260209283019201610a98565b5095945050505050565b600080600060608486031215610acf57600080fd5b833567ffffffffffffffff811115610ae657600080fd5b8401601f81018613610af757600080fd5b8035610b05610a6c82610a29565b8082825260208201915060208360051b850101925088831115610b2757600080fd5b602084015b83811015610b6957803567ffffffffffffffff811115610b4b57600080fd5b610b5a8b602083890101610927565b84525060209283019201610b2c565b509550505050602084013567ffffffffffffffff811115610b8957600080fd5b610b9586828701610a4d565b925050610757604085016109c3565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2b836106fb565b1660408201526000602083013567ffffffffffffffff8116808214610c4f57600080fd5b6060840152506040830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610c8b57600080fd5b830160208101903567ffffffffffffffff811115610ca857600080fd5b803603821315610cb757600080fd5b6060608085015261061d60a085018284610ba4565b600082610d02577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d3c60a083018661084c565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610d87578151865260209586019590910190600101610d69565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e0f85835161084c565b94506020938401939190910190600101610dd5565b505050508281036040840152610e3a8186610d55565b915050610e4b606083018415159052565b95945050505050565b600060208284031215610e6657600080fd5b815161055d816109b5565b60008251610e83818460208701610828565b919091019291505056fea2646970667358221220d537f023478b5746f5f67760e722db6f4a51db89700ac69d6ba33759b8ac342f64736f6c634300081a0033", + 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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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: "0x6080604052348015600f57600080fd5b506001600055610eea806100246000396000f3fe60806040526004361061006e5760003560e01c80636ed701691161004b5780636ed70169146100e0578063c5131691146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a2146100775780635ac1e07014610097578063676cc054146100b757005b3661007557005b005b34801561008357600080fd5b50610075610092366004610724565b610148565b3480156100a357600080fd5b506100756100b2366004610760565b6101de565b6100ca6100c536600461079b565b61021a565b6040516100d79190610896565b60405180910390f35b3480156100ec57600080fd5b5061007561024d565b34801561010157600080fd5b50610075610110366004610724565b610282565b6100756101233660046109ce565b61035d565b34801561013457600080fd5b50610075610143366004610aba565b6103a1565b6101506103d6565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610419565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b7f8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264338260405161020f929190610bed565b60405180910390a150565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a19392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61028a6103d6565b6000610297600285610cf3565b9050806000036102d3576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102f573ffffffffffffffffffffffffffffffffffffffff8416338484610419565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610394959493929190610d2e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103949493929190610db8565b600260005403610412576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104ae9085906104b4565b50505050565b60006104d673ffffffffffffffffffffffffffffffffffffffff84168361054f565b905080516000141580156104fb5750808060200190518101906104f99190610e7b565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061055d83836000610564565b9392505050565b6060814710156105a2576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610546565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105cb9190610e98565b60006040518083038185875af1925050503d8060008114610608576040519150601f19603f3d011682016040523d82523d6000602084013e61060d565b606091505b509150915061061d868383610627565b9695505050505050565b60608261063c57610637826106b6565b61055d565b8151158015610660575073ffffffffffffffffffffffffffffffffffffffff84163b155b156106af576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610546565b508061055d565b8051156106c65780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461071f57600080fd5b919050565b60008060006060848603121561073957600080fd5b83359250610749602085016106fb565b9150610757604085016106fb565b90509250925092565b60006020828403121561077257600080fd5b813567ffffffffffffffff81111561078957600080fd5b82016080818503121561055d57600080fd5b600080600083850360408112156107b157600080fd5b60208112156107bf57600080fd5b50839250602084013567ffffffffffffffff8111156107dd57600080fd5b8401601f810186136107ee57600080fd5b803567ffffffffffffffff81111561080557600080fd5b86602082840101111561081757600080fd5b939660209190910195509293505050565b60005b8381101561084357818101518382015260200161082b565b50506000910152565b60008151808452610864816020860160208601610828565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061055d602083018461084c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561091f5761091f6108a9565b604052919050565b600082601f83011261093857600080fd5b813567ffffffffffffffff811115610952576109526108a9565b61098360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108d8565b81815284602083860101111561099857600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106f857600080fd5b803561071f816109b5565b6000806000606084860312156109e357600080fd5b833567ffffffffffffffff8111156109fa57600080fd5b610a0686828701610927565b935050602084013591506040840135610a1e816109b5565b809150509250925092565b600067ffffffffffffffff821115610a4357610a436108a9565b5060051b60200190565b600082601f830112610a5e57600080fd5b8135610a71610a6c82610a29565b6108d8565b8082825260208201915060208360051b860101925085831115610a9357600080fd5b602085015b83811015610ab0578035835260209283019201610a98565b5095945050505050565b600080600060608486031215610acf57600080fd5b833567ffffffffffffffff811115610ae657600080fd5b8401601f81018613610af757600080fd5b8035610b05610a6c82610a29565b8082825260208201915060208360051b850101925088831115610b2757600080fd5b602084015b83811015610b6957803567ffffffffffffffff811115610b4b57600080fd5b610b5a8b602083890101610927565b84525060209283019201610b2c565b509550505050602084013567ffffffffffffffff811115610b8957600080fd5b610b9586828701610a4d565b925050610757604085016109c3565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2b836106fb565b16604082015273ffffffffffffffffffffffffffffffffffffffff610c52602084016106fb565b1660608201526000604083013567ffffffffffffffff8116808214610c7657600080fd5b6080840152506060830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610cb257600080fd5b830160208101903567ffffffffffffffff811115610ccf57600080fd5b803603821315610cde57600080fd5b608060a085015261061d60c085018284610ba4565b600082610d29577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d6360a083018661084c565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610dae578151865260209586019590910190600101610d90565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e4b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e3685835161084c565b94506020938401939190910190600101610dfc565b505050508281036040840152610e618186610d7c565b915050610e72606083018415159052565b95945050505050565b600060208284031215610e8d57600080fd5b815161055d816109b5565b60008251610eaa818460208701610828565b919091019291505056fea264697066735822122075e241dc7d0b3cc5bb3ca3c583250993ad9bf6a64ef50849b87060df5ab2e8e364736f6c634300081a0033", } // ReceiverEVMABI is the input ABI used to generate the binding from. @@ -235,23 +236,23 @@ func (_ReceiverEVM *ReceiverEVMTransactorSession) OnCall(messageContext MessageC return _ReceiverEVM.Contract.OnCall(&_ReceiverEVM.TransactOpts, messageContext, message) } -// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. +// OnRevert is a paid mutator transaction binding the contract method 0x5ac1e070. // -// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() +// Solidity: function onRevert((address,address,uint64,bytes) revertContext) returns() func (_ReceiverEVM *ReceiverEVMTransactor) OnRevert(opts *bind.TransactOpts, revertContext RevertContext) (*types.Transaction, error) { return _ReceiverEVM.contract.Transact(opts, "onRevert", revertContext) } -// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. +// OnRevert is a paid mutator transaction binding the contract method 0x5ac1e070. // -// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() +// Solidity: function onRevert((address,address,uint64,bytes) revertContext) returns() func (_ReceiverEVM *ReceiverEVMSession) OnRevert(revertContext RevertContext) (*types.Transaction, error) { return _ReceiverEVM.Contract.OnRevert(&_ReceiverEVM.TransactOpts, revertContext) } -// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. +// OnRevert is a paid mutator transaction binding the contract method 0x5ac1e070. // -// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() +// Solidity: function onRevert((address,address,uint64,bytes) revertContext) returns() func (_ReceiverEVM *ReceiverEVMTransactorSession) OnRevert(revertContext RevertContext) (*types.Transaction, error) { return _ReceiverEVM.Contract.OnRevert(&_ReceiverEVM.TransactOpts, revertContext) } @@ -1156,9 +1157,9 @@ type ReceiverEVMReceivedRevert struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_ReceiverEVM *ReceiverEVMFilterer) FilterReceivedRevert(opts *bind.FilterOpts) (*ReceiverEVMReceivedRevertIterator, error) { logs, sub, err := _ReceiverEVM.contract.FilterLogs(opts, "ReceivedRevert") @@ -1168,9 +1169,9 @@ func (_ReceiverEVM *ReceiverEVMFilterer) FilterReceivedRevert(opts *bind.FilterO return &ReceiverEVMReceivedRevertIterator{contract: _ReceiverEVM.contract, event: "ReceivedRevert", logs: logs, sub: sub}, nil } -// WatchReceivedRevert is a free log subscription operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// WatchReceivedRevert is a free log subscription operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_ReceiverEVM *ReceiverEVMFilterer) WatchReceivedRevert(opts *bind.WatchOpts, sink chan<- *ReceiverEVMReceivedRevert) (event.Subscription, error) { logs, sub, err := _ReceiverEVM.contract.WatchLogs(opts, "ReceivedRevert") @@ -1205,9 +1206,9 @@ func (_ReceiverEVM *ReceiverEVMFilterer) WatchReceivedRevert(opts *bind.WatchOpt }), nil } -// ParseReceivedRevert is a log parse operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// ParseReceivedRevert is a log parse operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_ReceiverEVM *ReceiverEVMFilterer) ParseReceivedRevert(log types.Log) (*ReceiverEVMReceivedRevert, error) { event := new(ReceiverEVMReceivedRevert) if err := _ReceiverEVM.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { diff --git a/v2/pkg/revert.sol/revertable.go b/v2/pkg/revert.sol/revertable.go index 57403093..f47993a3 100644 --- a/v2/pkg/revert.sol/revertable.go +++ b/v2/pkg/revert.sol/revertable.go @@ -31,6 +31,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -38,7 +39,7 @@ type RevertContext struct { // RevertableMetaData contains all meta data concerning the Revertable contract. var RevertableMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"onRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", + ABI: "[{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", } // RevertableABI is the input ABI used to generate the binding from. @@ -187,23 +188,23 @@ func (_Revertable *RevertableTransactorRaw) Transact(opts *bind.TransactOpts, me return _Revertable.Contract.contract.Transact(opts, method, params...) } -// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. +// OnRevert is a paid mutator transaction binding the contract method 0x5ac1e070. // -// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() +// Solidity: function onRevert((address,address,uint64,bytes) revertContext) returns() func (_Revertable *RevertableTransactor) OnRevert(opts *bind.TransactOpts, revertContext RevertContext) (*types.Transaction, error) { return _Revertable.contract.Transact(opts, "onRevert", revertContext) } -// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. +// OnRevert is a paid mutator transaction binding the contract method 0x5ac1e070. // -// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() +// Solidity: function onRevert((address,address,uint64,bytes) revertContext) returns() func (_Revertable *RevertableSession) OnRevert(revertContext RevertContext) (*types.Transaction, error) { return _Revertable.Contract.OnRevert(&_Revertable.TransactOpts, revertContext) } -// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. +// OnRevert is a paid mutator transaction binding the contract method 0x5ac1e070. // -// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() +// Solidity: function onRevert((address,address,uint64,bytes) revertContext) returns() func (_Revertable *RevertableTransactorSession) OnRevert(revertContext RevertContext) (*types.Transaction, error) { return _Revertable.Contract.OnRevert(&_Revertable.TransactOpts, revertContext) } diff --git a/v2/pkg/senderzevm.sol/senderzevm.go b/v2/pkg/senderzevm.sol/senderzevm.go index 44adfaaa..5a0b7154 100644 --- a/v2/pkg/senderzevm.sol/senderzevm.go +++ b/v2/pkg/senderzevm.sol/senderzevm.go @@ -32,7 +32,7 @@ var ( // SenderZEVMMetaData contains all meta data concerning the SenderZEVM contract. var SenderZEVMMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"callReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawAndCallReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]}]", - Bin: "0x6080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526001602080840182905283850192909252835191820184526000808352606084019290925260808301829052905492517f048ae42c000000000000000000000000000000000000000000000000000000008152919273ffffffffffffffffffffffffffffffffffffffff169163048ae42c916102d7918c918c918c9189918990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a081018352610321808252600182840181905282850191909152835192830184526000808452606083019390935260808201839052915492517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201526024810183905293945092909188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea2646970667358221220792a5e1e201d0b1f639959350189e03421096c54285a3cac719abddeae7c88fa64736f6c634300081a0033", + Bin: "0x6080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526001602080840182905283850192909252835191820184526000808352606084019290925260808301829052905492517f048ae42c000000000000000000000000000000000000000000000000000000008152919273ffffffffffffffffffffffffffffffffffffffff169163048ae42c916102d7918c918c918c9189918990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a081018352610321808252600182840181905282850191909152835192830184526000808452606083019390935260808201839052915492517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201526024810183905293945092909188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea264697066735822122014b5ef93498637ee9a3f4d89a96843ea228d38a24ccae4d361ad086fb4a2ba2b64736f6c634300081a0033", } // SenderZEVMABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/systemcontract.sol/systemcontract.go b/v2/pkg/systemcontract.sol/systemcontract.go index 4cadb799..84e04731 100644 --- a/v2/pkg/systemcontract.sol/systemcontract.go +++ b/v2/pkg/systemcontract.sol/systemcontract.go @@ -39,7 +39,7 @@ type ZContext struct { // SystemContractMetaData contains all meta data concerning the SystemContract contract. var SystemContractMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"wzeta_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uniswapv2Factory_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uniswapv2Router02_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gasCoinZRC20ByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPriceByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasZetaPoolByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setConnectorZEVMAddress\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasCoinZRC20\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasPrice\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"price\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasZetaPool\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"erc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setWZETAContractAddress\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"uniswapv2FactoryAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"uniswapv2PairFor\",\"inputs\":[{\"name\":\"factory\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenA\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenB\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"pair\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"uniswapv2Router02Address\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"wZetaContractAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaConnectorZEVMAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"SetConnectorZEVM\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetGasCoin\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetGasPrice\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetGasZetaPool\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetWZeta\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SystemContractDeployed\",\"inputs\":[],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CantBeIdenticalAddresses\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CantBeZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220e0645f0dc9560bf8a1975495bcc1a88ea921f354d9c6dd0b38d7de440cf329ed64736f6c634300081a0033", + Bin: "0x60c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212201b1a136275cbee5409c60f315f9fc4e6eecd668368ddacf6f2cfdcef88de5c5a64736f6c634300081a0033", } // SystemContractABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/systemcontractmock.sol/systemcontractmock.go b/v2/pkg/systemcontractmock.sol/systemcontractmock.go index 5996e280..3717ff4d 100644 --- a/v2/pkg/systemcontractmock.sol/systemcontractmock.go +++ b/v2/pkg/systemcontractmock.sol/systemcontractmock.go @@ -32,7 +32,7 @@ var ( // SystemContractMockMetaData contains all meta data concerning the SystemContractMock contract. var SystemContractMockMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"wzeta_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uniswapv2Factory_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uniswapv2Router02_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gasCoinZRC20ByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPriceByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasZetaPoolByChainId\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"onCrossChainCall\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasCoinZRC20\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasPrice\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"price\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setWZETAContractAddress\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"uniswapv2FactoryAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"uniswapv2PairFor\",\"inputs\":[{\"name\":\"factory\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenA\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tokenB\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"pair\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"uniswapv2Router02Address\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"wZetaContractAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"SetGasCoin\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetGasPrice\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetGasZetaPool\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetWZeta\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SystemContractDeployed\",\"inputs\":[],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CantBeIdenticalAddresses\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CantBeZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]}]", - Bin: "0x608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220f5c4cae5cc505bc5e795bca446028bb75a72680a148baa4a180dc1a1714ebe3764736f6c634300081a0033", + Bin: "0x608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220658a03788e7c2558f3159d5347e48afa7ee297970854aae30cfc9aac2a0aa57d64736f6c634300081a0033", } // SystemContractMockABI is the input ABI used to generate the binding from. diff --git a/v2/pkg/testuniversalcontract.sol/testuniversalcontract.go b/v2/pkg/testuniversalcontract.sol/testuniversalcontract.go index aa26fec1..45a864bd 100644 --- a/v2/pkg/testuniversalcontract.sol/testuniversalcontract.go +++ b/v2/pkg/testuniversalcontract.sol/testuniversalcontract.go @@ -31,6 +31,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -45,8 +46,8 @@ type ZContext struct { // TestUniversalContractMetaData contains all meta data concerning the TestUniversalContract contract. var TestUniversalContractMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"onCrossChainCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", - Bin: "0x6080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c8063660b9de014610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610140565b610073565b34801561005f57600080fd5b5061003161006e3660046101a6565b6100ad565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76816040516100a291906102a7565b60405180910390a150565b606081156100c4576100c1828401846103a2565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100ef8780610498565b6100ff60408a0160208b01610504565b8960400135338660405161011896959493929190610526565b60405180910390a1505050505050565b60006060828403121561013a57600080fd5b50919050565b60006020828403121561015257600080fd5b813567ffffffffffffffff81111561016957600080fd5b61017584828501610128565b949350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101a157600080fd5b919050565b6000806000806000608086880312156101be57600080fd5b853567ffffffffffffffff8111156101d557600080fd5b6101e188828901610128565b9550506101f06020870161017d565b935060408601359250606086013567ffffffffffffffff81111561021357600080fd5b8601601f8101881361022457600080fd5b803567ffffffffffffffff81111561023b57600080fd5b88602082840101111561024d57600080fd5b959894975092955050506020019190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff6102c98361017d565b1660208201526000602083013567ffffffffffffffff81168082146102ed57600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261032a57600080fd5b830160208101903567ffffffffffffffff81111561034757600080fd5b80360382131561035657600080fd5b60608085015261036a60808501828461025e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156103b457600080fd5b813567ffffffffffffffff8111156103cb57600080fd5b8201601f810184136103dc57600080fd5b803567ffffffffffffffff8111156103f6576103f6610373565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561046257610462610373565b60405281815282820160200186101561047a57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126104cd57600080fd5b83018035915067ffffffffffffffff8211156104e857600080fd5b6020019150368190038213156104fd57600080fd5b9250929050565b60006020828403121561051657600080fd5b61051f8261017d565b9392505050565b60a08152600061053a60a08301888a61025e565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156105a457602081870181015184830182015201610588565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168301019250505097965050505050505056fea2646970667358221220ff93d07870f1d8e50e4264dfe0294e91fdae9dea40dbbcba8170288316ad1a8464736f6c634300081a0033", + ABI: "[{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"onCrossChainCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ContextData\",\"inputs\":[{\"name\":\"origin\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"msgSender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ContextDataRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", + Bin: "0x6080604052348015600f57600080fd5b506106308061001f6000396000f3fe60806040526004361061002a5760003560e01c80635ac1e07014610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610128565b610073565b34801561005f57600080fd5b5061003161006e366004610193565b6100ad565b7ff5d4d6ed1657736cfd625a04e0585c5def81b280f6bc1b7ed4add114e79f7e9a816040516100a29190610299565b60405180910390a150565b606081156100c4576100c1828401846103bb565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100ef87806104b1565b6100ff60408a0160208b0161051d565b8960400135338660405161011896959493929190610538565b60405180910390a1505050505050565b60006020828403121561013a57600080fd5b813567ffffffffffffffff81111561015157600080fd5b82016080818503121561016357600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461018e57600080fd5b919050565b6000806000806000608086880312156101ab57600080fd5b853567ffffffffffffffff8111156101c257600080fd5b8601606081890312156101d457600080fd5b94506101e26020870161016a565b935060408601359250606086013567ffffffffffffffff81111561020557600080fd5b8601601f8101881361021657600080fd5b803567ffffffffffffffff81111561022d57600080fd5b88602082840101111561023f57600080fd5b959894975092955050506020019190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff6102bb8361016a565b16602082015273ffffffffffffffffffffffffffffffffffffffff6102e26020840161016a565b1660408201526000604083013567ffffffffffffffff811680821461030657600080fd5b806060850152505060608301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261034357600080fd5b830160208101903567ffffffffffffffff81111561036057600080fd5b80360382131561036f57600080fd5b60808085015261038360a085018284610250565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156103cd57600080fd5b813567ffffffffffffffff8111156103e457600080fd5b8201601f810184136103f557600080fd5b803567ffffffffffffffff81111561040f5761040f61038c565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561047b5761047b61038c565b60405281815282820160200186101561049357600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126104e657600080fd5b83018035915067ffffffffffffffff82111561050157600080fd5b60200191503681900382131561051657600080fd5b9250929050565b60006020828403121561052f57600080fd5b6101638261016a565b60a08152600061054c60a08301888a610250565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156105b65760208187018101518483018201520161059a565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168301019250505097965050505050505056fea264697066735822122023cfd100c0b5ffb64d0a74f749750529178249712786f8146b8cbbfeedf3ca8264736f6c634300081a0033", } // TestUniversalContractABI is the input ABI used to generate the binding from. @@ -237,23 +238,23 @@ func (_TestUniversalContract *TestUniversalContractTransactorSession) OnCrossCha return _TestUniversalContract.Contract.OnCrossChainCall(&_TestUniversalContract.TransactOpts, context, zrc20, amount, message) } -// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. +// OnRevert is a paid mutator transaction binding the contract method 0x5ac1e070. // -// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() +// Solidity: function onRevert((address,address,uint64,bytes) revertContext) returns() func (_TestUniversalContract *TestUniversalContractTransactor) OnRevert(opts *bind.TransactOpts, revertContext RevertContext) (*types.Transaction, error) { return _TestUniversalContract.contract.Transact(opts, "onRevert", revertContext) } -// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. +// OnRevert is a paid mutator transaction binding the contract method 0x5ac1e070. // -// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() +// Solidity: function onRevert((address,address,uint64,bytes) revertContext) returns() func (_TestUniversalContract *TestUniversalContractSession) OnRevert(revertContext RevertContext) (*types.Transaction, error) { return _TestUniversalContract.Contract.OnRevert(&_TestUniversalContract.TransactOpts, revertContext) } -// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. +// OnRevert is a paid mutator transaction binding the contract method 0x5ac1e070. // -// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() +// Solidity: function onRevert((address,address,uint64,bytes) revertContext) returns() func (_TestUniversalContract *TestUniversalContractTransactorSession) OnRevert(revertContext RevertContext) (*types.Transaction, error) { return _TestUniversalContract.Contract.OnRevert(&_TestUniversalContract.TransactOpts, revertContext) } @@ -511,9 +512,9 @@ type TestUniversalContractContextDataRevert struct { Raw types.Log // Blockchain specific contextual infos } -// FilterContextDataRevert is a free log retrieval operation binding the contract event 0x35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76. +// FilterContextDataRevert is a free log retrieval operation binding the contract event 0xf5d4d6ed1657736cfd625a04e0585c5def81b280f6bc1b7ed4add114e79f7e9a. // -// Solidity: event ContextDataRevert((address,uint64,bytes) revertContext) +// Solidity: event ContextDataRevert((address,address,uint64,bytes) revertContext) func (_TestUniversalContract *TestUniversalContractFilterer) FilterContextDataRevert(opts *bind.FilterOpts) (*TestUniversalContractContextDataRevertIterator, error) { logs, sub, err := _TestUniversalContract.contract.FilterLogs(opts, "ContextDataRevert") @@ -523,9 +524,9 @@ func (_TestUniversalContract *TestUniversalContractFilterer) FilterContextDataRe return &TestUniversalContractContextDataRevertIterator{contract: _TestUniversalContract.contract, event: "ContextDataRevert", logs: logs, sub: sub}, nil } -// WatchContextDataRevert is a free log subscription operation binding the contract event 0x35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76. +// WatchContextDataRevert is a free log subscription operation binding the contract event 0xf5d4d6ed1657736cfd625a04e0585c5def81b280f6bc1b7ed4add114e79f7e9a. // -// Solidity: event ContextDataRevert((address,uint64,bytes) revertContext) +// Solidity: event ContextDataRevert((address,address,uint64,bytes) revertContext) func (_TestUniversalContract *TestUniversalContractFilterer) WatchContextDataRevert(opts *bind.WatchOpts, sink chan<- *TestUniversalContractContextDataRevert) (event.Subscription, error) { logs, sub, err := _TestUniversalContract.contract.WatchLogs(opts, "ContextDataRevert") @@ -560,9 +561,9 @@ func (_TestUniversalContract *TestUniversalContractFilterer) WatchContextDataRev }), nil } -// ParseContextDataRevert is a log parse operation binding the contract event 0x35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76. +// ParseContextDataRevert is a log parse operation binding the contract event 0xf5d4d6ed1657736cfd625a04e0585c5def81b280f6bc1b7ed4add114e79f7e9a. // -// Solidity: event ContextDataRevert((address,uint64,bytes) revertContext) +// Solidity: event ContextDataRevert((address,address,uint64,bytes) revertContext) func (_TestUniversalContract *TestUniversalContractFilterer) ParseContextDataRevert(log types.Log) (*TestUniversalContractContextDataRevert, error) { event := new(TestUniversalContractContextDataRevert) if err := _TestUniversalContract.contract.UnpackLog(event, "ContextDataRevert", log); err != nil { diff --git a/v2/pkg/universalcontract.sol/universalcontract.go b/v2/pkg/universalcontract.sol/universalcontract.go index bafa6694..3fab6f2f 100644 --- a/v2/pkg/universalcontract.sol/universalcontract.go +++ b/v2/pkg/universalcontract.sol/universalcontract.go @@ -29,13 +29,6 @@ var ( _ = abi.ConvertType ) -// RevertContext is an auto generated low-level Go binding around an user-defined struct. -type RevertContext struct { - Asset common.Address - Amount uint64 - RevertMessage []byte -} - // ZContext is an auto generated low-level Go binding around an user-defined struct. type ZContext struct { Origin []byte @@ -45,7 +38,7 @@ type ZContext struct { // UniversalContractMetaData contains all meta data concerning the UniversalContract contract. var UniversalContractMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"onCrossChainCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", + ABI: "[{\"type\":\"function\",\"name\":\"onCrossChainCall\",\"inputs\":[{\"name\":\"context\",\"type\":\"tuple\",\"internalType\":\"structzContext\",\"components\":[{\"name\":\"origin\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"zrc20\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", } // UniversalContractABI is the input ABI used to generate the binding from. @@ -214,24 +207,3 @@ func (_UniversalContract *UniversalContractSession) OnCrossChainCall(context ZCo func (_UniversalContract *UniversalContractTransactorSession) OnCrossChainCall(context ZContext, zrc20 common.Address, amount *big.Int, message []byte) (*types.Transaction, error) { return _UniversalContract.Contract.OnCrossChainCall(&_UniversalContract.TransactOpts, context, zrc20, amount, message) } - -// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. -// -// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() -func (_UniversalContract *UniversalContractTransactor) OnRevert(opts *bind.TransactOpts, revertContext RevertContext) (*types.Transaction, error) { - return _UniversalContract.contract.Transact(opts, "onRevert", revertContext) -} - -// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. -// -// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() -func (_UniversalContract *UniversalContractSession) OnRevert(revertContext RevertContext) (*types.Transaction, error) { - return _UniversalContract.Contract.OnRevert(&_UniversalContract.TransactOpts, revertContext) -} - -// OnRevert is a paid mutator transaction binding the contract method 0x660b9de0. -// -// Solidity: function onRevert((address,uint64,bytes) revertContext) returns() -func (_UniversalContract *UniversalContractTransactorSession) OnRevert(revertContext RevertContext) (*types.Transaction, error) { - return _UniversalContract.Contract.OnRevert(&_UniversalContract.TransactOpts, revertContext) -} diff --git a/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go b/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go index 6e5e7244..94af48c5 100644 --- a/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go +++ b/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go @@ -31,6 +31,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -38,7 +39,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\":\"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\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"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\":\"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\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", } // ZetaConnectorBaseABI is the input ABI used to generate the binding from. @@ -665,23 +666,23 @@ func (_ZetaConnectorBase *ZetaConnectorBaseTransactorSession) WithdrawAndCall(to return _ZetaConnectorBase.Contract.WithdrawAndCall(&_ZetaConnectorBase.TransactOpts, to, amount, data, internalSendHash) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x2ccb404d. // -// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,address,uint64,bytes) revertContext) returns() func (_ZetaConnectorBase *ZetaConnectorBaseTransactor) WithdrawAndRevert(opts *bind.TransactOpts, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { return _ZetaConnectorBase.contract.Transact(opts, "withdrawAndRevert", to, amount, data, internalSendHash, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x2ccb404d. // -// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,address,uint64,bytes) revertContext) returns() func (_ZetaConnectorBase *ZetaConnectorBaseSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { return _ZetaConnectorBase.Contract.WithdrawAndRevert(&_ZetaConnectorBase.TransactOpts, to, amount, data, internalSendHash, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x2ccb404d. // -// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,address,uint64,bytes) revertContext) returns() func (_ZetaConnectorBase *ZetaConnectorBaseTransactorSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { return _ZetaConnectorBase.Contract.WithdrawAndRevert(&_ZetaConnectorBase.TransactOpts, to, amount, data, internalSendHash, revertContext) } @@ -1807,9 +1808,9 @@ type ZetaConnectorBaseWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0xa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorBaseWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -1824,9 +1825,9 @@ func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) FilterWithdrawnAndReverted( return &ZetaConnectorBaseWithdrawnAndRevertedIterator{contract: _ZetaConnectorBase.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0xa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *ZetaConnectorBaseWithdrawnAndReverted, to []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -1866,9 +1867,9 @@ func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) WatchWithdrawnAndReverted(o }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0xa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorBase *ZetaConnectorBaseFilterer) ParseWithdrawnAndReverted(log types.Log) (*ZetaConnectorBaseWithdrawnAndReverted, error) { event := new(ZetaConnectorBaseWithdrawnAndReverted) if err := _ZetaConnectorBase.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { diff --git a/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go b/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go index ebbe739b..85263981 100644 --- a/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go +++ b/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go @@ -31,6 +31,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -38,8 +39,8 @@ type RevertContext struct { // ZetaConnectorNativeMetaData contains all meta data concerning the ZetaConnectorNative contract. var ZetaConnectorNativeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"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\"}],\"stateMutability\":\"nonpayable\"},{\"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\":\"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\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60c060405234801561001057600080fd5b5060405161188c38038061188c83398101604081905261002f9161021a565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf60008261014e565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014e565b506101157f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361014e565b506101407f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014e565b50505050505050505061026e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101f45760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ac3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101f8565b5060005b92915050565b80516001600160a01b038116811461021557600080fd5b919050565b6000806000806080858703121561023057600080fd5b610239856101fe565b9350610247602086016101fe565b9250610255604086016101fe565b9150610263606086016101fe565b905092959194509250565b60805160a0516115b36102d9600039600081816101f7015281816104740152818161052501528181610644015281816107d80152818161088901526109710152600081816101ab01528181610496015281816104f8015281816107fa015261085c01526115b36000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635c975abb116100cd57806391d1485411610081578063a783c78911610066578063a783c78914610326578063d547741f1461034d578063e63ab1e91461036057600080fd5b806391d14854146102d8578063a217fddf1461031e57600080fd5b8063743e0c9b116100b2578063743e0c9b146102965780638456cb59146102a957806385f438c1146102b157600080fd5b80635c975abb146102785780635e3e9fef1461028357600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a714610156578063057e0f251461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110e4565b610387565b60405190151581526020015b60405180910390f35b61019161018c366004611198565b610420565b005b6101916101a1366004611230565b6105f0565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c610227366004611263565b60009081526002602052604090206001015490565b604051908152602001610175565b61019161025836600461127c565b6106cb565b61019161026b36600461127c565b6106f6565b61019161074f565b60015460ff16610169565b6101916102913660046112a8565b610784565b6101916102a4366004611263565b61094f565b610191610999565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102e636600461127c565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b61023c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61019161035b36600461127c565b6109cb565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104286109f0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461045281610a33565b61045a610a3d565b6104bb73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000088610a7c565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610557907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a90600401611418565b600060405180830381600087803b15801561057157600080fd5b505af1158015610585573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c878787866040516105d59493929190611489565b60405180910390a2506105e86001600055565b505050505050565b6105f86109f0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062281610a33565b61062a610a3d565b61066b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a7c565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5846040516106b391815260200190565b60405180910390a2506106c66001600055565b505050565b6000828152600260205260409020600101546106e681610a33565b6106f08383610afd565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610745576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106c68282610bfd565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077981610a33565b610781610cbc565b50565b61078c6109f0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107b681610a33565b6107be610a3d565b61081f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a7c565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108b9907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114c0565b600060405180830381600087803b1580156108d357600080fd5b505af11580156108e7573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d86868660405161093593929190611512565b60405180910390a2506109486001600055565b5050505050565b610957610a3d565b61078173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d39565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109c381610a33565b610781610d7f565b6000828152600260205260409020600101546109e681610a33565b6106f08383610bfd565b600260005403610a2c576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107818133610dd8565b60015460ff1615610a7a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106c691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e69565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bf557600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b933390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161041a565b50600061041a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bf557600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161041a565b610cc4610eff565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106f09186918216906323b872dd90608401610ab6565b610d87610a3d565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610d0f565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e65576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e8b73ffffffffffffffffffffffffffffffffffffffff841683610f3b565b90508051600014158015610eb0575080806020019051810190610eae919061152c565b155b156106c6576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e5c565b60015460ff16610a7a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f4983836000610f50565b9392505050565b606081471015610f8e576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e5c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610fb7919061154e565b60006040518083038185875af1925050503d8060008114610ff4576040519150601f19603f3d011682016040523d82523d6000602084013e610ff9565b606091505b5091509150611009868383611013565b9695505050505050565b60608261102857611023826110a2565b610f49565b815115801561104c575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561109b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e5c565b5080610f49565b8051156110b25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110f657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f4957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461114a57600080fd5b919050565b60008083601f84011261116157600080fd5b50813567ffffffffffffffff81111561117957600080fd5b60208301915083602082850101111561119157600080fd5b9250929050565b60008060008060008060a087890312156111b157600080fd5b6111ba87611126565b955060208701359450604087013567ffffffffffffffff8111156111dd57600080fd5b6111e989828a0161114f565b90955093505060608701359150608087013567ffffffffffffffff81111561121057600080fd5b87016060818a03121561122257600080fd5b809150509295509295509295565b60008060006060848603121561124557600080fd5b61124e84611126565b95602085013595506040909401359392505050565b60006020828403121561127557600080fd5b5035919050565b6000806040838503121561128f57600080fd5b8235915061129f60208401611126565b90509250929050565b6000806000806000608086880312156112c057600080fd5b6112c986611126565b945060208601359350604086013567ffffffffffffffff8111156112ec57600080fd5b6112f88882890161114f565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff61137182611126565b1682526000602082013567ffffffffffffffff811680821461139257600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126113ce57600080fd5b820160208101903567ffffffffffffffff8111156113eb57600080fd5b8036038213156113fa57600080fd5b6060604086015261140f60608601828461130a565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061146a60a08301858761130a565b828103608084015261147c8185611353565b9998505050505050505050565b8481526060602082015260006114a360608301858761130a565b82810360408401526114b58185611353565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114b560808301848661130a565b83815260406020820152600061140f60408301848661130a565b60006020828403121561153e57600080fd5b81518015158114610f4957600080fd5b6000825160005b8181101561156f5760208186018101518583015201611555565b50600092019182525091905056fea26469706673582212208568eb5447d9d0fee399f3e161164b36a7f43cc5bc13eb5835e3c9f436b2697664736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"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\"}],\"stateMutability\":\"nonpayable\"},{\"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\":\"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\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"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\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60c060405234801561001057600080fd5b506040516118b33803806118b383398101604081905261002f9161021a565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf60008261014e565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014e565b506101157f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361014e565b506101407f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014e565b50505050505050505061026e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101f45760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ac3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101f8565b5060005b92915050565b80516001600160a01b038116811461021557600080fd5b919050565b6000806000806080858703121561023057600080fd5b610239856101fe565b9350610247602086016101fe565b9250610255604086016101fe565b9150610263606086016101fe565b905092959194509250565b60805160a0516115da6102d9600039600081816101e4015281816104740152818161054f01528181610600015281816107d801528181610889015261097101526000818161019801528181610571015281816105d3015281816107fa015261085c01526115da6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635c975abb116100cd57806391d1485411610081578063a783c78911610066578063a783c78914610326578063d547741f1461034d578063e63ab1e91461036057600080fd5b806391d14854146102d8578063a217fddf1461031e57600080fd5b8063743e0c9b116100b2578063743e0c9b146102965780638456cb59146102a957806385f438c1146102b157600080fd5b80635c975abb146102785780635e3e9fef1461028357600080fd5b8063248a9ca3116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b8063248a9ca3146102065780632ccb404d1461023757600080fd5b806301ffc9a714610156578063106e62901461017e578063116191b61461019357806321e093b1146101df575b600080fd5b6101696101643660046110e4565b610387565b60405190151581526020015b60405180910390f35b61019161018c36600461114f565b610420565b005b6101ba7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101ba7f000000000000000000000000000000000000000000000000000000000000000081565b610229610214366004611182565b60009081526002602052604090206001015490565b604051908152602001610175565b6101916102453660046111e4565b6104fb565b61019161025836600461127c565b6106cb565b61019161026b36600461127c565b6106f6565b61019161074f565b60015460ff16610169565b6101916102913660046112a8565b610784565b6101916102a4366004611182565b61094f565b610191610999565b6102297f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102e636600461127c565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610229600081565b6102297f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61019161035b36600461127c565b6109cb565b6102297f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104286109f0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461045281610a33565b61045a610a3d565b61049b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a7c565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5846040516104e391815260200190565b60405180910390a2506104f66001600055565b505050565b6105036109f0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461052d81610a33565b610535610a3d565b61059673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000088610a7c565b6040517f36c99f3b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b90610632907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161143f565b600060405180830381600087803b15801561064c57600080fd5b505af1158015610660573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167fa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017878787866040516106b094939291906114b0565b60405180910390a2506106c36001600055565b505050505050565b6000828152600260205260409020600101546106e681610a33565b6106f08383610afd565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610745576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104f68282610bfd565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077981610a33565b610781610cbc565b50565b61078c6109f0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107b681610a33565b6107be610a3d565b61081f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a7c565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108b9907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114e7565b600060405180830381600087803b1580156108d357600080fd5b505af11580156108e7573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d86868660405161093593929190611539565b60405180910390a2506109486001600055565b5050505050565b610957610a3d565b61078173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d39565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109c381610a33565b610781610d7f565b6000828152600260205260409020600101546109e681610a33565b6106f08383610bfd565b600260005403610a2c576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107818133610dd8565b60015460ff1615610a7a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526104f691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e69565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bf557600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b933390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161041a565b50600061041a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bf557600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161041a565b610cc4610eff565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106f09186918216906323b872dd90608401610ab6565b610d87610a3d565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610d0f565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e65576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e8b73ffffffffffffffffffffffffffffffffffffffff841683610f3b565b90508051600014158015610eb0575080806020019051810190610eae9190611553565b155b156104f6576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e5c565b60015460ff16610a7a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f4983836000610f50565b9392505050565b606081471015610f8e576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e5c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610fb79190611575565b60006040518083038185875af1925050503d8060008114610ff4576040519150601f19603f3d011682016040523d82523d6000602084013e610ff9565b606091505b5091509150611009868383611013565b9695505050505050565b60608261102857611023826110a2565b610f49565b815115801561104c575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561109b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e5c565b5080610f49565b8051156110b25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110f657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f4957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461114a57600080fd5b919050565b60008060006060848603121561116457600080fd5b61116d84611126565b95602085013595506040909401359392505050565b60006020828403121561119457600080fd5b5035919050565b60008083601f8401126111ad57600080fd5b50813567ffffffffffffffff8111156111c557600080fd5b6020830191508360208285010111156111dd57600080fd5b9250929050565b60008060008060008060a087890312156111fd57600080fd5b61120687611126565b955060208701359450604087013567ffffffffffffffff81111561122957600080fd5b61123589828a0161119b565b90955093505060608701359150608087013567ffffffffffffffff81111561125c57600080fd5b87016080818a03121561126e57600080fd5b809150509295509295509295565b6000806040838503121561128f57600080fd5b8235915061129f60208401611126565b90509250929050565b6000806000806000608086880312156112c057600080fd5b6112c986611126565b945060208601359350604086013567ffffffffffffffff8111156112ec57600080fd5b6112f88882890161119b565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff61137182611126565b16825273ffffffffffffffffffffffffffffffffffffffff61139560208301611126565b1660208301526000604082013567ffffffffffffffff81168082146113b957600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126113f557600080fd5b820160208101903567ffffffffffffffff81111561141257600080fd5b80360382131561142157600080fd5b6080606086015261143660808601828461130a565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061149160a08301858761130a565b82810360808401526114a38185611353565b9998505050505050505050565b8481526060602082015260006114ca60608301858761130a565b82810360408401526114dc8185611353565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114dc60808301848661130a565b83815260406020820152600061143660408301848661130a565b60006020828403121561156557600080fd5b81518015158114610f4957600080fd5b6000825160005b81811015611596576020818601810151858301520161157c565b50600092019182525091905056fea2646970667358221220dc0c07f30c80680d98675e920337998abbeaccddeb0e3323337c2c843c731cd164736f6c634300081a0033", } // ZetaConnectorNativeABI is the input ABI used to generate the binding from. @@ -687,23 +688,23 @@ func (_ZetaConnectorNative *ZetaConnectorNativeTransactorSession) WithdrawAndCal return _ZetaConnectorNative.Contract.WithdrawAndCall(&_ZetaConnectorNative.TransactOpts, to, amount, data, internalSendHash) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x2ccb404d. // -// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,address,uint64,bytes) revertContext) returns() func (_ZetaConnectorNative *ZetaConnectorNativeTransactor) WithdrawAndRevert(opts *bind.TransactOpts, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { return _ZetaConnectorNative.contract.Transact(opts, "withdrawAndRevert", to, amount, data, internalSendHash, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x2ccb404d. // -// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,address,uint64,bytes) revertContext) returns() func (_ZetaConnectorNative *ZetaConnectorNativeSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { return _ZetaConnectorNative.Contract.WithdrawAndRevert(&_ZetaConnectorNative.TransactOpts, to, amount, data, internalSendHash, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x2ccb404d. // -// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,address,uint64,bytes) revertContext) returns() func (_ZetaConnectorNative *ZetaConnectorNativeTransactorSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { return _ZetaConnectorNative.Contract.WithdrawAndRevert(&_ZetaConnectorNative.TransactOpts, to, amount, data, internalSendHash, revertContext) } @@ -1829,9 +1830,9 @@ type ZetaConnectorNativeWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0xa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorNativeWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -1846,9 +1847,9 @@ func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) FilterWithdrawnAndRever return &ZetaConnectorNativeWithdrawnAndRevertedIterator{contract: _ZetaConnectorNative.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0xa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeWithdrawnAndReverted, to []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -1888,9 +1889,9 @@ func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) WatchWithdrawnAndRevert }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0xa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNative *ZetaConnectorNativeFilterer) ParseWithdrawnAndReverted(log types.Log) (*ZetaConnectorNativeWithdrawnAndReverted, error) { event := new(ZetaConnectorNativeWithdrawnAndReverted) if err := _ZetaConnectorNative.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { diff --git a/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go b/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go index 0d04a355..15231da2 100644 --- a/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go +++ b/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go @@ -31,6 +31,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -65,8 +66,8 @@ type StdInvariantFuzzSelector struct { // ZetaConnectorNativeTestMetaData contains all meta data concerning the ZetaConnectorNativeTest contract. var ZetaConnectorNativeTestMetaData = &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\":\"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\":\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ef0b8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c8063b0464fdc116100e3578063dcf7d0371161008c578063e63ab1e911610066578063e63ab1e9146102ce578063fa7626d4146102f5578063fe574f841461030257600080fd5b8063dcf7d037146102b6578063de1cb76c146102be578063e20c9f71146102c657600080fd5b8063c1909972116100bd578063c19099721461029e578063ccb0e3f2146102a6578063d509b16c146102ae57600080fd5b8063b0464fdc14610276578063b5508aa91461027e578063ba414fa61461028657600080fd5b8063493465581161014557806385226c811161011f57806385226c811461021757806385f438c11461022c578063916a17c61461026157600080fd5b806349346558146101f257806366d9a9a0146101fa578063828320141461020f57600080fd5b80633cba0107116101765780633cba0107146101da5780633e5e3c23146101e25780633f7286f4146101ea57600080fd5b80630a9254e41461019d5780631ed7831c146101a75780632ade3880146101c5575b600080fd5b6101a561030a565b005b6101af610b0d565b6040516101bc9190618303565b60405180910390f35b6101cd610b6f565b6040516101bc919061839f565b6101a5610cb1565b6101af61146b565b6101af6114cb565b6101a561152b565b610202611b6e565b6040516101bc9190618505565b6101a5611cf0565b61021f611f4c565b6040516101bc91906185a3565b6102537f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101bc565b61026961201c565b6040516101bc919061861a565b610269612117565b61021f612212565b61028e6122e2565b60405190151581526020016101bc565b6101a56123b6565b6101a5612621565b6101a561314d565b6101a5613189565b6101a5613830565b6101af613e87565b6102537f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f5461028e9060ff1681565b6101a5613ee7565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805490911661567817905560405161035c90618216565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103e0573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190861694810194909452604484019290925290921660648201526104d1919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052614105565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061055d90618223565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610599573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460275460255460405193851694928316939183169216906105f490618230565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610638573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161067d9061823d565b604051809103906000f080158015610699573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561074557600080fd5b505af1158015610759573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156107cf57600080fd5b505af11580156107e3573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561084957600080fd5b505af115801561085d573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b1580156108c357600080fd5b505af11580156108d7573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561093957600080fd5b505af115801561094d573d6000803e3d6000fd5b5050602480546023546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152624c4b40938101939093521692506340c10f199150604401600060405180830381600087803b1580156109be57600080fd5b505af11580156109d2573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610a5657600080fd5b505af1158015610a6a573d6000803e3d6000fd5b5050604080516060810182526024546001600160a01b039081168252600160208084019182528451908101855260008152938301849052825160288054925167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090931691909316171781559093509150602990610b089082618774565b505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610b6557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b47575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610ca857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610c91578382906000526020600020018054610c04906186e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c30906186e0565b8015610c7d5780601f10610c5257610100808354040283529160200191610c7d565b820191906000526020600020905b815481529060010190602001808311610c6057829003601f168201915b505050505081526020019060010190610be5565b505050508152505081526020019060010190610b93565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610d8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db09190618833565b9050610dbd816000614124565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015610e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e319190618833565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391610f14916001600160a01b039190911690600090869060040161884c565b600060405180830381600087803b158015610f2e57600080fd5b505af1158015610f42573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015610fd457600080fd5b505af1158015610fe8573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156110d757600080fd5b505af11580156110eb573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d91506111309089908890618874565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561119157600080fd5b505af11580156111a5573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506111fd92909116908a9089908b9060040161888d565b600060405180830381600087803b15801561121757600080fd5b505af115801561122b573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa15801561127e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a29190618833565b90506112ae8188614124565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156112fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113229190618833565b9050611337816113328a876188f5565b614124565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156113ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d19190618833565b90506113de816000614124565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561142e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114529190618833565b905061145f816000614124565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610b65576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610b47575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610b65576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610b47575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a08231936115cc93921691016001600160a01b0391909116815260200190565b602060405180830381865afa1580156115e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160d9190618833565b905061161a816000614124565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561166a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168e9190618833565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611771916001600160a01b039190911690600090869060040161884c565b600060405180830381600087803b15801561178b57600080fd5b505af115801561179f573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561183157600080fd5b505af1158015611845573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561191757600080fd5b505af115801561192b573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d91506119709089908890618874565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156119d157600080fd5b505af11580156119e5573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611a3d92909116908a9089908b9060040161888d565b600060405180830381600087803b158015611a5757600080fd5b505af1158015611a6b573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae19190618833565b9050611aee816000614124565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b629190618833565b90506113378185614124565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610ca85783829060005260206000209060020201604051806040016040529081600082018054611bc5906186e0565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf1906186e0565b8015611c3e5780601f10611c1357610100808354040283529160200191611c3e565b820191906000526020600020905b815481529060010190602001808311611c2157829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611cd857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611c855790505b50505050508152505081526020019060010190611b92565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d8d57600080fd5b505af1158015611da1573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611e8c9190600401618908565b600060405180830381600087803b158015611ea657600080fd5b505af1158015611eba573d6000803e3d6000fd5b50506023546021546040517f057e0f250000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063057e0f259350611f1592909116908790869088906028906004016189f0565b600060405180830381600087803b158015611f2f57600080fd5b505af1158015611f43573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610ca8578382906000526020600020018054611f8f906186e0565b80601f0160208091040260200160405190810160405280929190818152602001828054611fbb906186e0565b80156120085780601f10611fdd57610100808354040283529160200191612008565b820191906000526020600020905b815481529060010190602001808311611feb57829003601f168201915b505050505081526020019060010190611f70565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610ca85760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156120ff57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116120ac5790505b50505050508152505081526020019060010190612040565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610ca85760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156121fa57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116121a75790505b5050505050815250508152602001906001019061213b565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610ca8578382906000526020600020018054612255906186e0565b80601f0160208091040260200160405190810160405280929190818152602001828054612281906186e0565b80156122ce5780601f106122a3576101008083540402835291602001916122ce565b820191906000526020600020905b8154815290600101906020018083116122b157829003601f168201915b505050505081526020019060010190612236565b60085460009060ff16156122fa575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa15801561238b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123af9190618833565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561249c57600080fd5b505af11580156124b0573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061259b9190600401618908565b600060405180830381600087803b1580156125b557600080fd5b505af11580156125c9573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611f15929091169087908690889060040161888d565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561268257600080fd5b505af1158015612696573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506127819190600401618908565b600060405180830381600087803b15801561279b57600080fd5b505af11580156127af573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561280357600080fd5b505af1158015612817573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561287457600080fd5b505af1158015612888573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506129739190600401618908565b600060405180830381600087803b15801561298d57600080fd5b505af11580156129a1573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156129f557600080fd5b505af1158015612a09573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612a6657600080fd5b505af1158015612a7a573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ace57600080fd5b505af1158015612ae2573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612b6b57600080fd5b505af1158015612b7f573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612bdc57600080fd5b505af1158015612bf0573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b158015612c6457600080fd5b505af1158015612c78573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612cd557600080fd5b505af1158015612ce9573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d3d57600080fd5b505af1158015612d51573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015612da4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc89190618833565b9050612dd5816000614124565b6026546040516001600160a01b0390911660248201526044810184905260009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612eb5916001600160a01b039190911690600090869060040161884c565b600060405180830381600087803b158015612ecf57600080fd5b505af1158015612ee3573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612f7557600080fd5b505af1158015612f89573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561302857600080fd5b505af115801561303c573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e62909150606401600060405180830381600087803b1580156130b057600080fd5b505af11580156130c4573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061313a9190618833565b90506131468186614124565b5050505050565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a093600093849316916370a082319101612d87565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132889190618833565b9050613295816000614124565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156132e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133099190618833565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916133ec916001600160a01b039190911690600090869060040161884c565b600060405180830381600087803b15801561340657600080fd5b505af115801561341a573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156134ac57600080fd5b505af11580156134c0573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b031690506134fe600289618a3c565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156135c657600080fd5b505af11580156135da573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d915061361f9089908890618874565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561368057600080fd5b505af1158015613694573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506136ec92909116908a9089908b9060040161888d565b600060405180830381600087803b15801561370657600080fd5b505af115801561371a573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561376c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137909190618833565b90506137a18161133260028a618a3c565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156137f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138159190618833565b90506113378161382660028b618a3c565b61133290876188f5565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa1580156138c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138e99190618833565b90506138f6816000614124565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613946573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061396a9190618833565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613a4d916001600160a01b039190911690600090869060040161884c565b600060405180830381600087803b158015613a6757600080fd5b505af1158015613a7b573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613b0d57600080fd5b505af1158015613b21573d6000803e3d6000fd5b50506020546040517f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e9350613b6592506001600160a01b0390911690602890618a77565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613bfb57600080fd5b505af1158015613c0f573d6000803e3d6000fd5b50506024546021546040516001600160a01b039283169450911691507f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143690613c5d908a908990602890618a99565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613cf357600080fd5b505af1158015613d07573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c9150613d4f9089908890602890618a99565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613db057600080fd5b505af1158015613dc4573d6000803e3d6000fd5b50506023546021546040517f057e0f250000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063057e0f259350613e1f92909116908a9089908b906028906004016189f0565b600060405180830381600087803b158015613e3957600080fd5b505af1158015613e4d573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101611261565b60606015805480602002602001604051908101604052809291908181526020018280548015610b65576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610b47575050505050905090565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613f4857600080fd5b505af1158015613f5c573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506140479190600401618908565b600060405180830381600087803b15801561406157600080fd5b505af1158015614075573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b1580156140e957600080fd5b505af11580156140fd573d6000803e3d6000fd5b505050505050565b600061410f61824a565b61411a8484836141a3565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561418f57600080fd5b505afa1580156140fd573d6000803e3d6000fd5b6000806141b0858461421e565b90506142136040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016141fe929190618ac4565b6040516020818303038152906040528561422a565b9150505b9392505050565b60006142178383614258565b60c0810151516000901561424e5761424784848460c00151614273565b9050614217565b6142478484614419565b60006142648383614504565b6142178383602001518461422a565b60008061427e614514565b9050600061428c86836145e7565b905060006142a38260600151836020015185614a8d565b905060006142b383838989614c9f565b905060006142c082615b1c565b602081015181519192509060030b15614333578982604001516040516020016142ea929190618ae6565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261432a91600401618908565b60405180910390fd5b60006143766040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615ceb565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906143c9908490600401618908565b602060405180830381865afa1580156143e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061440a9190618b67565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061446e908790600401618908565b600060405180830381865afa15801561448b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526144b39190810190618c49565b905060006144e182856040516020016144cd929190618c7e565b604051602081830303815290604052615eeb565b90506001600160a01b03811661411a5784846040516020016142ea929190618cad565b61451082826000615efe565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061459b908490600401618d58565b600060405180830381865afa1580156145b8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526145e09190810190618d9f565b9250505090565b6146196040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506146646040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61466d85616001565b6020820152600061467d866163e6565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156146bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526146e79190810190618d9f565b868385602001516040516020016147019493929190618de8565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190614759908590600401618908565b600060405180830381865afa158015614776573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261479e9190810190618d9f565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906147e6908490600401618eec565b602060405180830381865afa158015614803573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148279190618f3e565b61483c57816040516020016142ea9190618f60565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614881908490600401618ff2565b600060405180830381865afa15801561489e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526148c69190810190618d9f565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061490d908490600401619044565b602060405180830381865afa15801561492a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061494e9190618f3e565b156149e3576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614998908490600401619044565b600060405180830381865afa1580156149b5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149dd9190810190618d9f565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001614a089190619096565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614a34929190619102565b600060405180830381865afa158015614a51573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614a799190810190618d9f565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081614aa95790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614b0957614b09619127565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110614b5d57614b5d619127565b602002602001018190525084604051602001614b799190619156565b60405160208183030381529060405281600281518110614b9b57614b9b619127565b602002602001018190525082604051602001614bb791906191c2565b60405160208183030381529060405281600381518110614bd957614bd9619127565b60200260200101819052506000614bef82615b1c565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614c809060408051808201825260008082526020918201528151808301909252845182528085019082015290616669565b614c9557856040516020016142ea9190619203565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614cef565b511590565b614e6357826020015115614dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161432a565b8260c0015115614e63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161432a565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081614e7c57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280614ed790619294565b935060ff1681518110614eec57614eec619127565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001614f3d91906192b3565b604051602081830303815290604052828280614f5890619294565b935060ff1681518110614f6d57614f6d619127565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280614fba90619294565b935060ff1681518110614fcf57614fcf619127565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061501c90619294565b935060ff168151811061503157615031619127565b6020026020010181905250876020015182828061504d90619294565b935060ff168151811061506257615062619127565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806150af90619294565b935060ff16815181106150c4576150c4619127565b6020908102919091010152875182826150dc81619294565b935060ff16815181106150f1576150f1619127565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061513e90619294565b935060ff168151811061515357615153619127565b6020026020010181905250615167466166ca565b828261517281619294565b935060ff168151811061518757615187619127565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806151d490619294565b935060ff16815181106151e9576151e9619127565b60200260200101819052508682828061520190619294565b935060ff168151811061521657615216619127565b602090810291909101015285511561533d5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261526781619294565b935060ff168151811061527c5761527c619127565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906152cc908990600401618908565b600060405180830381865afa1580156152e9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526153119190810190618d9f565b828261531c81619294565b935060ff168151811061533157615331619127565b60200260200101819052505b84602001511561540d5760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261538681619294565b935060ff168151811061539b5761539b619127565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806153e890619294565b935060ff16815181106153fd576153fd619127565b60200260200101819052506155d4565b615445614cea8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6154d85760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261548881619294565b935060ff168151811061549d5761549d619127565b60200260200101819052508460a001516040516020016154bd9190619156565b6040516020818303038152906040528282806153e890619294565b8460c0015115801561551b57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261551990511590565b155b156155d45760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261555f81619294565b935060ff168151811061557457615574619127565b60200260200101819052506155888861676a565b6040516020016155989190619156565b6040516020818303038152906040528282806155b390619294565b935060ff16815181106155c8576155c8619127565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261560890511590565b61569d5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261564b81619294565b935060ff168151811061566057615660619127565b6020026020010181905250846040015182828061567c90619294565b935060ff168151811061569157615691619127565b60200260200101819052505b6060850151156157be5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826156e681619294565b935060ff16815181106156fb576156fb619127565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561576a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157929190810190618d9f565b828261579d81619294565b935060ff16815181106157b2576157b2619127565b60200260200101819052505b60e085015151156158655760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261580881619294565b935060ff168151811061581d5761581d619127565b60200260200101819052506158398560e00151600001516166ca565b828261584481619294565b935060ff168151811061585957615859619127565b60200260200101819052505b60e0850151602001511561590f5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826158b281619294565b935060ff16815181106158c7576158c7619127565b60200260200101819052506158e38560e00151602001516166ca565b82826158ee81619294565b935060ff168151811061590357615903619127565b60200260200101819052505b60e085015160400151156159b95760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261595c81619294565b935060ff168151811061597157615971619127565b602002602001018190525061598d8560e00151604001516166ca565b828261599881619294565b935060ff16815181106159ad576159ad619127565b60200260200101819052505b60e08501516060015115615a635760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615a0681619294565b935060ff1681518110615a1b57615a1b619127565b6020026020010181905250615a378560e00151606001516166ca565b8282615a4281619294565b935060ff1681518110615a5757615a57619127565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615a8157615a816186b1565b604051908082528060200260200182016040528015615ab457816020015b6060815260200190600190039081615a9f5790505b50905060005b8260ff168160ff161015615b0d57838160ff1681518110615add57615add619127565b6020026020010151828260ff1681518110615afa57615afa619127565b6020908102919091010152600101615aba565b5093505050505b949350505050565b615b436040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91615bc99186910161931e565b600060405180830381865afa158015615be6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615c0e9190810190618d9f565b90506000615c1c8683617259565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615c4c91906185a3565b6000604051808303816000875af1158015615c6b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615c939190810190619365565b805190915060030b15801590615cac5750602081015151155b8015615cbb5750604081015151155b15614c955781600081518110615cd357615cd3619127565b60200260200101516040516020016142ea919061941b565b60606000615d208560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150615d579082905b906173ae565b15615eb4576000615dd482615dce84615dc8615d9a8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906173d5565b90617437565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615e389082906173ae565b15615ea257604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615e9f905b82906174bc565b90505b615eab816174e2565b92505050614217565b8215615ecd5784846040516020016142ea929190619607565b5050604080516020810190915260008152614217565b509392505050565b6000808251602084016000f09392505050565b8160a0015115615f0d57505050565b6000615f1a84848461754b565b90506000615f2782615b1c565b602081015181519192509060030b158015615fc35750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615fc390604080518082018252600080825260209182015281518083019092528451825280850190820152615d51565b15615fd057505050505050565b60408201515115615ff05781604001516040516020016142ea91906196ae565b806040516020016142ea919061970c565b606060006160368360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061609b905b8290616669565b1561610a57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261421790616105908390617ae6565b6174e2565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261616c905b8290617b70565b60010361623957604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161d290615e98565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261421790616105905b83906174bc565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261629890616094565b156163cf57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616300908390617c0a565b90506000816001835161631391906188f5565b8151811061632357616323619127565b602002602001015190506163c66161056163996040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617ae6565b95945050505050565b826040516020016142ea9190619777565b50919050565b6060600061641b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061647d90616094565b1561648b57614217816174e2565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164ea90616165565b60010361655457604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526142179061610590616232565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165b390616094565b156163cf57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061661b908390617c0a565b905060018151111561665757806002825161663691906188f5565b8151811061664657616646619127565b602002602001015192505050919050565b50826040516020016142ea9190619777565b80518251600091111561667e5750600061411e565b8151835160208501516000929161669491619855565b61669e91906188f5565b9050826020015181036166b557600191505061411e565b82516020840151819020912014905092915050565b606060006166d783617caf565b600101905060008167ffffffffffffffff8111156166f7576166f76186b1565b6040519080825280601f01601f191660200182016040528015616721576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461672b57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916167f6905b8290617d91565b1561683657505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616895906167ef565b156168d557505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616934906167ef565b1561697457505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169d3906167ef565b80616a385750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a38906167ef565b15616a7857505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ad7906167ef565b80616b3c5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b3c906167ef565b15616b7c57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bdb906167ef565b80616c405750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c40906167ef565b15616c8057505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616cdf906167ef565b80616d445750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d44906167ef565b15616d8457505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616de3906167ef565b15616e2357505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e82906167ef565b15616ec257505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f21906167ef565b15616f6157505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616fc0906167ef565b1561700057505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261705f906167ef565b1561709f57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170fe906167ef565b806171635750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617163906167ef565b156171a357505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617202906167ef565b1561724257505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516142ea9290602001619868565b60608060005b84518110156172e4578185828151811061727b5761727b619127565b6020026020010151604051602001617294929190618c7e565b6040516020818303038152906040529150600185516172b391906188f5565b81146172dc57816040516020016172ca91906199d1565b60405160208183030381529060405291505b60010161725f565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816172fd579050509050838160008151811061732857617328619127565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061737c5761737c619127565b6020026020010181905250818160028151811061739b5761739b619127565b6020908102919091010152949350505050565b60208083015183518351928401516000936173cc9291849190617da5565b14159392505050565b604080518082019091526000808252602082015260006174078460000151856020015185600001518660200151617eb6565b905083602001518161741991906188f5565b845185906174289083906188f5565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561745c57508161411e565b60208083015190840151600191146174835750815160208481015190840151829020919020145b80156174b45782518451859061749a9083906188f5565b90525082516020850180516174b0908390619855565b9052505b509192915050565b60408051808201909152600080825260208201526174db838383617fd6565b5092915050565b60606000826000015167ffffffffffffffff811115617503576175036186b1565b6040519080825280601f01601f19166020018201604052801561752d576020820181803683370190505b50905060006020820190506174db8185602001518660000151618081565b60606000617557614514565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161757457905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806175cf90619294565b935060ff16815181106175e4576175e4619127565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016176359190619a12565b60405160208183030381529060405282828061765090619294565b935060ff168151811061766557617665619127565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806176b290619294565b935060ff16815181106176c7576176c7619127565b6020026020010181905250826040516020016176e391906191c2565b6040516020818303038152906040528282806176fe90619294565b935060ff168151811061771357617713619127565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061776090619294565b935060ff168151811061777557617775619127565b602002602001018190525061778a87846180fb565b828261779581619294565b935060ff16815181106177aa576177aa619127565b6020908102919091010152855151156178565760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826177fc81619294565b935060ff168151811061781157617811619127565b602002602001018190525061782a8660000151846180fb565b828261783581619294565b935060ff168151811061784a5761784a619127565b60200260200101819052505b8560800151156178c45760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261789f81619294565b935060ff16815181106178b4576178b4619127565b602002602001018190525061792a565b841561792a5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261790981619294565b935060ff168151811061791e5761791e619127565b60200260200101819052505b604086015151156179c65760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261797481619294565b935060ff168151811061798957617989619127565b602002602001018190525085604001518282806179a590619294565b935060ff16815181106179ba576179ba619127565b60200260200101819052505b856060015115617a305760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617a0f81619294565b935060ff1681518110617a2457617a24619127565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617a4e57617a4e6186b1565b604051908082528060200260200182016040528015617a8157816020015b6060815260200190600190039081617a6c5790505b50905060005b8260ff168160ff161015617ada57838160ff1681518110617aaa57617aaa619127565b6020026020010151828260ff1681518110617ac757617ac7619127565b6020908102919091010152600101617a87565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617b0b57508161411e565b81518351602085015160009291617b2191619855565b617b2b91906188f5565b60208401519091506001908214617b4c575082516020840151819020908220145b8015617b6757835185518690617b639083906188f5565b9052505b50929392505050565b6000808260000151617b948560000151866020015186600001518760200151617eb6565b617b9e9190619855565b90505b83516020850151617bb29190619855565b81116174db5781617bc281619a57565b9250508260000151617bf9856020015183617bdd91906188f5565b8651617be991906188f5565b8386600001518760200151617eb6565b617c039190619855565b9050617ba1565b60606000617c188484617b70565b617c23906001619855565b67ffffffffffffffff811115617c3b57617c3b6186b1565b604051908082528060200260200182016040528015617c6e57816020015b6060815260200190600190039081617c595790505b50905060005b8151811015615ee357617c8a61610586866174bc565b828281518110617c9c57617c9c619127565b6020908102919091010152600101617c74565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617cf8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617d24576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310617d4257662386f26fc10000830492506010015b6305f5e1008310617d5a576305f5e100830492506008015b6127108310617d6e57612710830492506004015b60648310617d80576064830492506002015b600a831061411e5760010192915050565b6000617d9d838361813b565b159392505050565b600080858411617eac5760208411617e585760008415617df0576001617dcc8660206188f5565b617dd7906008619a71565b617de2906002619b6f565b617dec91906188f5565b1990505b8351811685617dff8989619855565b617e0991906188f5565b805190935082165b818114617e4357878411617e2b5787945050505050615b14565b83617e3581619b7b565b945050828451169050617e11565b617e4d8785619855565b945050505050615b14565b838320617e6585886188f5565b617e6f9087619855565b91505b858210617eaa57848220808203617e9757617e8d8684619855565b9350505050615b14565b617ea26001846188f5565b925050617e72565b505b5092949350505050565b60008381868511617fc15760208511617f705760008515617f02576001617ede8760206188f5565b617ee9906008619a71565b617ef4906002619b6f565b617efe91906188f5565b1990505b84518116600087617f138b8b619855565b617f1d91906188f5565b855190915083165b828114617f6257818610617f4a57617f3d8b8b619855565b9650505050505050615b14565b85617f5481619a57565b965050838651169050617f25565b859650505050505050615b14565b508383206000905b617f8286896188f5565b8211617fbf57858320808203617f9e5783945050505050615b14565b617fa9600185619855565b9350508180617fb790619a57565b925050617f78565b505b617fcb8787619855565b979650505050505050565b604080518082019091526000808252602082015260006180088560000151866020015186600001518760200151617eb6565b60208087018051918601919091525190915061802490826188f5565b8352845160208601516180379190619855565b81036180465760008552618078565b835183516180549190619855565b855186906180639083906188f5565b90525083516180729082619855565b60208601525b50909392505050565b602081106180b95781518352618098602084619855565b92506180a5602083619855565b91506180b26020826188f5565b9050618081565b60001981156180e85760016180cf8360206188f5565b6180db90610100619b6f565b6180e591906188f5565b90505b9151835183169219169190911790915250565b6060600061810984846145e7565b805160208083015160405193945061812393909101619b92565b60405160208183030381529060405291505092915050565b815181516000919081111561814e575081515b6020808501519084015160005b8381101561820757825182518082146181d75760001960208710156181b6576001846181888960206188f5565b6181929190619855565b61819d906008619a71565b6181a8906002619b6f565b6181b291906188f5565b1990505b81811683821681810391146181d457975061411e9650505050505050565b50505b6181e2602086619855565b94506181ef602085619855565b935050506020816182009190619855565b905061815b565b5084518651614c959190619bea565b610c9f80619c0b83390190565b611eb98061a8aa83390190565b61188c8061c76383390190565b610ee78061dfef83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161828d618292565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161828d6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156183445783516001600160a01b031683526020938401939092019160010161831d565b509095945050505050565b60005b8381101561836a578181015183820152602001618352565b50506000910152565b6000815180845261838b81602086016020860161834f565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561849b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015618481577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261846b848651618373565b6020958601959094509290920191600101618431565b5091975050506020948501949290920191506001016183c7565b50929695505050505050565b600081518084526020840193506020830160005b828110156184fb5781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016184bb565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561849b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526185716040880182618373565b905060208201519150868103602088015261858c81836184a7565b96505050602093840193919091019060010161852d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561849b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452618605858351618373565b945060209384019391909101906001016185cb565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561849b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261869b60408701826184a7565b9550506020938401939190910190600101618642565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c908216806186f457607f821691505b6020821081036163e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610b0857806000526020600020601f840160051c810160208510156187545750805b601f840160051c820191505b818110156131465760008155600101618760565b815167ffffffffffffffff81111561878e5761878e6186b1565b6187a28161879c84546186e0565b8461872d565b6020601f8211600181146187d657600083156187be5750848201515b600019600385901b1c1916600184901b178455613146565b600084815260208120601f198516915b8281101561880657878501518255602094850194600190920191016187e6565b50848210156188245786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561884557600080fd5b5051919050565b6001600160a01b03841681528260208201526060604082015260006163c66060830184618373565b828152604060208201526000615b146040830184618373565b6001600160a01b03851681528360208201526080604082015260006188b56080830185618373565b905082606083015295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561411e5761411e6188c6565b6020815260006142176020830184618373565b600081546001600160a01b038116845267ffffffffffffffff8160a01c16602085015250600182016060604085015260008154618957816186e0565b806060880152600182166000811461897657600181146189b0576189e4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166080890152608082151560051b89010193506189e4565b84600052602060002060005b838110156189db5781548a8201608001526001909101906020016189bc565b89016080019450505b50919695505050505050565b6001600160a01b038616815284602082015260a060408201526000618a1860a0830186618373565b8460608401528281036080840152618a30818561891b565b98975050505050505050565b600082618a72577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b0383168152604060208201526000615b14604083018461891b565b838152606060208201526000618ab26060830185618373565b8281036040840152614c95818561891b565b6001600160a01b0383168152604060208201526000615b146040830184618373565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618b1e81601a85016020880161834f565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351618b5b81601c84016020880161834f565b01601c01949350505050565b600060208284031215618b7957600080fd5b81516001600160a01b038116811461421757600080fd5b6040516060810167ffffffffffffffff81118282101715618bb357618bb36186b1565b60405290565b60008067ffffffffffffffff841115618bd457618bd46186b1565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715618c0357618c036186b1565b604052838152905080828401851015618c1b57600080fd5b615ee384602083018561834f565b600082601f830112618c3a57600080fd5b61421783835160208501618bb9565b600060208284031215618c5b57600080fd5b815167ffffffffffffffff811115618c7257600080fd5b61411a84828501618c29565b60008351618c9081846020880161834f565b835190830190618ca481836020880161834f565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618ce581601a85016020880161834f565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618d2281603384016020880161834f565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006142176080830184618373565b600060208284031215618db157600080fd5b815167ffffffffffffffff811115618dc857600080fd5b8201601f81018413618dd957600080fd5b61411a84825160208401618bb9565b60008551618dfa818460208a0161834f565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551618e34816001840160208a0161834f565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618e7281600284016020890161834f565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618eb481600284016020880161834f565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618eff6040830184618373565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b600060208284031215618f5057600080fd5b8151801515811461421757600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618f9881601f85016020870161834f565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006190056040830184618373565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006190576040830184618373565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516190ce81601485016020870161834f565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b6040815260006191156040830185618373565b82810360208401526142138185618373565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161918e81600185016020870161834f565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516191d481846020870161834f565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161928781604b85016020870161834f565b91909101604b0192915050565b600060ff821660ff81036192aa576192aa6188c6565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161931181602985016020870161834f565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006142176080830184618373565b60006020828403121561937757600080fd5b815167ffffffffffffffff81111561938e57600080fd5b8201606081850312156193a057600080fd5b6193a8618b90565b81518060030b81146193b957600080fd5b8152602082015167ffffffffffffffff8111156193d557600080fd5b6193e186828501618c29565b602083015250604082015167ffffffffffffffff81111561940157600080fd5b61940d86828501618c29565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161947981602185016020870161834f565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161966581602185016020880161834f565b7f2720696e206f75747075743a200000000000000000000000000000000000000060219184019182015283516196a281602e84016020880161834f565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161931181602985016020870161834f565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161976a81602285016020870161834f565b9190910160220192915050565b7f436f6e7472616374206e616d65200000000000000000000000000000000000008152600082516197af81600e85016020870161834f565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561411e5761411e6188c6565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516198a081601885016020880161834f565b7f20696e200000000000000000000000000000000000000000000000000000000060189184019182015283516198dd81601c84016020880161834f565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516199e381846020870161834f565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251619a4a81601c85016020870161834f565b91909101601c0192915050565b60006000198203619a6a57619a6a6188c6565b5060010190565b808202811582820484141761411e5761411e6188c6565b6001815b6001841115619ac357808504811115619aa757619aa76188c6565b6001841615619ab557908102905b60019390931c928002619a8c565b935093915050565b600082619ada5750600161411e565b81619ae75750600061411e565b8160018114619afd5760028114619b0757619b23565b600191505061411e565b60ff841115619b1857619b186188c6565b50506001821b61411e565b5060208310610133831016604e8410600b8410161715619b46575081810a61411e565b619b536000198484619a88565b8060001904821115619b6757619b676188c6565b029392505050565b60006142178383619acb565b600081619b8a57619b8a6188c6565b506000190190565b60008351619ba481846020880161834f565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619bde81600184016020880161834f565b01600101949350505050565b81810360008312801583831316838312821617156174db576174db6188c656fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a003360a060405234801561001057600080fd5b50604051611eb9380380611eb983398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611e998339815191528261014c565b50610143600080516020611e998339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b608051611c22610277600039600081816101ca01528181610597015281816105f901528181610a280152610a8a0152611c226000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806385f438c1116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103fc578063e63ab1e91461040f578063eab103df1461043657600080fd5b8063d547741f146103b3578063d936547e146103c6578063d9caed12146103e957600080fd5b80639b19251a116100bd5780639b19251a14610385578063a217fddf14610398578063c709ab6e146103a057600080fd5b806385f438c11461030557806391d148541461032c5780639a5904271461037257600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102d25780635c975abb146102f25780638456cb59146102fd57600080fd5b806336568abe146102905780633f4ba83a146102a3578063570618e1146102ab57600080fd5b8063248a9ca311610176578063248a9ca314610226578063252f07bf146102585780632f2ff15d1461027d57600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610211575b600080fd5b6101b06101ab3660046115ca565b610449565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b61022461021f366004611677565b6104e2565b005b61024a6102343660046116ea565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61022461028b366004611703565b6106e3565b61022461029e366004611703565b61070f565b61022461076d565b61024a7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff166101b0565b6102246107a2565b61024a7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b061033a366004611703565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610224610380366004611733565b6107d4565b610224610393366004611733565b6108a2565b61024a600081565b6102246103ae366004611750565b610973565b6102246103c1366004611703565b610b79565b6101b06103d4366004611733565b60036020526000908152604090205460ff1681565b6102246103f73660046117f3565b610b9f565b61022461040a366004611834565b610ccb565b61024a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102246104443660046118d3565b610f2b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104dc57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104ea610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461051481610fc4565b61051c610fce565b73ffffffffffffffffffffffffffffffffffffffff851660009081526003602052604090205460ff1661057b576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bc73ffffffffffffffffffffffffffffffffffffffff86167f00000000000000000000000000000000000000000000000000000000000000008661100d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106369088908a90899089908990600401611939565b600060405180830381600087803b15801561065057600080fd5b505af1158015610664573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d58686866040516106c993929190611996565b60405180910390a3506106dc6001600055565b5050505050565b600082815260016020819052604090912001546106ff81610fc4565b610709838361108e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461075e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610768828261113b565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61079781610fc4565b61079f6111dc565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107cc81610fc4565b61079f61123b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107fe81610fc4565b73ffffffffffffffffffffffffffffffffffffffff821661084b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6108cc81610fc4565b73ffffffffffffffffffffffffffffffffffffffff8216610919576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61097b610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109a581610fc4565b6109ad610fce565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610a0c576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a4d73ffffffffffffffffffffffffffffffffffffffff87167f00000000000000000000000000000000000000000000000000000000000000008761100d565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610ac99089908b908a908a908a908a90600401611a77565b600060405180830381600087803b158015610ae357600080fd5b505af1158015610af7573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b87878787604051610b5e9493929190611ae8565b60405180910390a350610b716001600055565b505050505050565b60008281526001602081905260409091200154610b9581610fc4565b610709838361113b565b610ba7610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610bd181610fc4565b610bd9610fce565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205460ff16610c38576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5973ffffffffffffffffffffffffffffffffffffffff8416858461100d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610cb891815260200190565b60405180910390a3506107686001600055565b610cd3610f81565b610cdb610fce565b60045474010000000000000000000000000000000000000000900460ff16610d2f576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610d8e576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8616906370a0823190602401602060405180830381865afa158015610dfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1f9190611b14565b9050610e4373ffffffffffffffffffffffffffffffffffffffff8616333087611278565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efb9190611b14565b610f059190611b2d565b8787604051610f18959493929190611b67565b60405180910390a250610b716001600055565b6000610f3681610fc4565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610fbd576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61079f81336112be565b60025460ff161561100b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261076891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061134f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661113357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104dc565b5060006104dc565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561113357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104dc565b6111e46113e5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611243610fce565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112113390565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526107099186918216906323b872dd90608401611047565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661134b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b600061137173ffffffffffffffffffffffffffffffffffffffff841683611421565b905080516000141580156113965750808060200190518101906113949190611ba0565b155b15610768576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401611342565b60025460ff1661100b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061142f83836000611436565b9392505050565b606081471015611474576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611342565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161149d9190611bbd565b60006040518083038185875af1925050503d80600081146114da576040519150601f19603f3d011682016040523d82523d6000602084013e6114df565b606091505b50915091506114ef8683836114f9565b9695505050505050565b60608261150e5761150982611588565b61142f565b8151158015611532575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611581576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401611342565b508061142f565b8051156115985780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156115dc57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461142f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461079f57600080fd5b60008083601f84011261164057600080fd5b50813567ffffffffffffffff81111561165857600080fd5b60208301915083602082850101111561167057600080fd5b9250929050565b60008060008060006080868803121561168f57600080fd5b853561169a8161160c565b945060208601356116aa8161160c565b935060408601359250606086013567ffffffffffffffff8111156116cd57600080fd5b6116d98882890161162e565b969995985093965092949392505050565b6000602082840312156116fc57600080fd5b5035919050565b6000806040838503121561171657600080fd5b8235915060208301356117288161160c565b809150509250929050565b60006020828403121561174557600080fd5b813561142f8161160c565b60008060008060008060a0878903121561176957600080fd5b86356117748161160c565b955060208701356117848161160c565b945060408701359350606087013567ffffffffffffffff8111156117a757600080fd5b6117b389828a0161162e565b909450925050608087013567ffffffffffffffff8111156117d357600080fd5b87016060818a0312156117e557600080fd5b809150509295509295509295565b60008060006060848603121561180857600080fd5b83356118138161160c565b925060208401356118238161160c565b929592945050506040919091013590565b6000806000806000806080878903121561184d57600080fd5b863567ffffffffffffffff81111561186457600080fd5b61187089828a0161162e565b90975095505060208701356118848161160c565b935060408701359250606087013567ffffffffffffffff8111156118a757600080fd5b6118b389828a0161162e565b979a9699509497509295939492505050565b801515811461079f57600080fd5b6000602082840312156118e557600080fd5b813561142f816118c5565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061198b6080830184866118f0565b979650505050505050565b8381526040602082015260006119b06040830184866118f0565b95945050505050565b600081356119c68161160c565b73ffffffffffffffffffffffffffffffffffffffff168352602082013567ffffffffffffffff81168082146119fa57600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112611a3657600080fd5b820160208101903567ffffffffffffffff811115611a5357600080fd5b803603821315611a6257600080fd5b606060408601526119b06060860182846118f0565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a060608201526000611ac960a0830185876118f0565b8281036080840152611adb81856119b9565b9998505050505050505050565b848152606060208201526000611b026060830185876118f0565b828103604084015261198b81856119b9565b600060208284031215611b2657600080fd5b5051919050565b818103818111156104dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606081526000611b7b6060830187896118f0565b8560208401528281036040840152611b948185876118f0565b98975050505050505050565b600060208284031215611bb257600080fd5b815161142f816118c5565b6000825160005b81811015611bde5760208186018101518583015201611bc4565b50600092019182525091905056fea264697066735822122029d8a02c5c60bae7d404d08786de2b2dd6b37e11d10fa76c968c7809ff06f3b864736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405234801561001057600080fd5b5060405161188c38038061188c83398101604081905261002f9161021a565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf60008261014e565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014e565b506101157f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361014e565b506101407f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014e565b50505050505050505061026e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101f45760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ac3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101f8565b5060005b92915050565b80516001600160a01b038116811461021557600080fd5b919050565b6000806000806080858703121561023057600080fd5b610239856101fe565b9350610247602086016101fe565b9250610255604086016101fe565b9150610263606086016101fe565b905092959194509250565b60805160a0516115b36102d9600039600081816101f7015281816104740152818161052501528181610644015281816107d80152818161088901526109710152600081816101ab01528181610496015281816104f8015281816107fa015261085c01526115b36000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635c975abb116100cd57806391d1485411610081578063a783c78911610066578063a783c78914610326578063d547741f1461034d578063e63ab1e91461036057600080fd5b806391d14854146102d8578063a217fddf1461031e57600080fd5b8063743e0c9b116100b2578063743e0c9b146102965780638456cb59146102a957806385f438c1146102b157600080fd5b80635c975abb146102785780635e3e9fef1461028357600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a714610156578063057e0f251461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110e4565b610387565b60405190151581526020015b60405180910390f35b61019161018c366004611198565b610420565b005b6101916101a1366004611230565b6105f0565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c610227366004611263565b60009081526002602052604090206001015490565b604051908152602001610175565b61019161025836600461127c565b6106cb565b61019161026b36600461127c565b6106f6565b61019161074f565b60015460ff16610169565b6101916102913660046112a8565b610784565b6101916102a4366004611263565b61094f565b610191610999565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102e636600461127c565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b61023c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61019161035b36600461127c565b6109cb565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104286109f0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461045281610a33565b61045a610a3d565b6104bb73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000088610a7c565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610557907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a90600401611418565b600060405180830381600087803b15801561057157600080fd5b505af1158015610585573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c878787866040516105d59493929190611489565b60405180910390a2506105e86001600055565b505050505050565b6105f86109f0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062281610a33565b61062a610a3d565b61066b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a7c565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5846040516106b391815260200190565b60405180910390a2506106c66001600055565b505050565b6000828152600260205260409020600101546106e681610a33565b6106f08383610afd565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610745576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106c68282610bfd565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077981610a33565b610781610cbc565b50565b61078c6109f0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107b681610a33565b6107be610a3d565b61081f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a7c565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108b9907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114c0565b600060405180830381600087803b1580156108d357600080fd5b505af11580156108e7573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d86868660405161093593929190611512565b60405180910390a2506109486001600055565b5050505050565b610957610a3d565b61078173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d39565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109c381610a33565b610781610d7f565b6000828152600260205260409020600101546109e681610a33565b6106f08383610bfd565b600260005403610a2c576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107818133610dd8565b60015460ff1615610a7a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106c691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e69565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bf557600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b933390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161041a565b50600061041a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bf557600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161041a565b610cc4610eff565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106f09186918216906323b872dd90608401610ab6565b610d87610a3d565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610d0f565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e65576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e8b73ffffffffffffffffffffffffffffffffffffffff841683610f3b565b90508051600014158015610eb0575080806020019051810190610eae919061152c565b155b156106c6576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e5c565b60015460ff16610a7a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f4983836000610f50565b9392505050565b606081471015610f8e576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e5c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610fb7919061154e565b60006040518083038185875af1925050503d8060008114610ff4576040519150601f19603f3d011682016040523d82523d6000602084013e610ff9565b606091505b5091509150611009868383611013565b9695505050505050565b60608261102857611023826110a2565b610f49565b815115801561104c575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561109b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e5c565b5080610f49565b8051156110b25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110f657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f4957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461114a57600080fd5b919050565b60008083601f84011261116157600080fd5b50813567ffffffffffffffff81111561117957600080fd5b60208301915083602082850101111561119157600080fd5b9250929050565b60008060008060008060a087890312156111b157600080fd5b6111ba87611126565b955060208701359450604087013567ffffffffffffffff8111156111dd57600080fd5b6111e989828a0161114f565b90955093505060608701359150608087013567ffffffffffffffff81111561121057600080fd5b87016060818a03121561122257600080fd5b809150509295509295509295565b60008060006060848603121561124557600080fd5b61124e84611126565b95602085013595506040909401359392505050565b60006020828403121561127557600080fd5b5035919050565b6000806040838503121561128f57600080fd5b8235915061129f60208401611126565b90509250929050565b6000806000806000608086880312156112c057600080fd5b6112c986611126565b945060208601359350604086013567ffffffffffffffff8111156112ec57600080fd5b6112f88882890161114f565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff61137182611126565b1682526000602082013567ffffffffffffffff811680821461139257600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126113ce57600080fd5b820160208101903567ffffffffffffffff8111156113eb57600080fd5b8036038213156113fa57600080fd5b6060604086015261140f60608601828461130a565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061146a60a08301858761130a565b828103608084015261147c8185611353565b9998505050505050505050565b8481526060602082015260006114a360608301858761130a565b82810360408401526114b58185611353565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114b560808301848661130a565b83815260406020820152600061140f60408301848661130a565b60006020828403121561153e57600080fd5b81518015158114610f4957600080fd5b6000825160005b8181101561156f5760208186018101518583015201611555565b50600092019182525091905056fea26469706673582212208568eb5447d9d0fee399f3e161164b36a7f43cc5bc13eb5835e3c9f436b2697664736f6c634300081a00336080604052348015600f57600080fd5b506001600055610ec3806100246000396000f3fe60806040526004361061006e5760003560e01c80636ed701691161004b5780636ed70169146100e0578063c5131691146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063660b9de014610097578063676cc054146100b757005b3661007557005b005b34801561008357600080fd5b50610075610092366004610724565b610148565b3480156100a357600080fd5b506100756100b2366004610760565b6101de565b6100ca6100c536600461079b565b61021a565b6040516100d79190610896565b60405180910390f35b3480156100ec57600080fd5b5061007561024d565b34801561010157600080fd5b50610075610110366004610724565b610282565b6100756101233660046109ce565b61035d565b34801561013457600080fd5b50610075610143366004610aba565b6103a1565b6101506103d6565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610419565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b7f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e338260405161020f929190610bed565b60405180910390a150565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a19392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61028a6103d6565b6000610297600285610ccc565b9050806000036102d3576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102f573ffffffffffffffffffffffffffffffffffffffff8416338484610419565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610394959493929190610d07565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103949493929190610d91565b600260005403610412576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104ae9085906104b4565b50505050565b60006104d673ffffffffffffffffffffffffffffffffffffffff84168361054f565b905080516000141580156104fb5750808060200190518101906104f99190610e54565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061055d83836000610564565b9392505050565b6060814710156105a2576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610546565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105cb9190610e71565b60006040518083038185875af1925050503d8060008114610608576040519150601f19603f3d011682016040523d82523d6000602084013e61060d565b606091505b509150915061061d868383610627565b9695505050505050565b60608261063c57610637826106b6565b61055d565b8151158015610660575073ffffffffffffffffffffffffffffffffffffffff84163b155b156106af576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610546565b508061055d565b8051156106c65780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461071f57600080fd5b919050565b60008060006060848603121561073957600080fd5b83359250610749602085016106fb565b9150610757604085016106fb565b90509250925092565b60006020828403121561077257600080fd5b813567ffffffffffffffff81111561078957600080fd5b82016060818503121561055d57600080fd5b600080600083850360408112156107b157600080fd5b60208112156107bf57600080fd5b50839250602084013567ffffffffffffffff8111156107dd57600080fd5b8401601f810186136107ee57600080fd5b803567ffffffffffffffff81111561080557600080fd5b86602082840101111561081757600080fd5b939660209190910195509293505050565b60005b8381101561084357818101518382015260200161082b565b50506000910152565b60008151808452610864816020860160208601610828565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061055d602083018461084c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561091f5761091f6108a9565b604052919050565b600082601f83011261093857600080fd5b813567ffffffffffffffff811115610952576109526108a9565b61098360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108d8565b81815284602083860101111561099857600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106f857600080fd5b803561071f816109b5565b6000806000606084860312156109e357600080fd5b833567ffffffffffffffff8111156109fa57600080fd5b610a0686828701610927565b935050602084013591506040840135610a1e816109b5565b809150509250925092565b600067ffffffffffffffff821115610a4357610a436108a9565b5060051b60200190565b600082601f830112610a5e57600080fd5b8135610a71610a6c82610a29565b6108d8565b8082825260208201915060208360051b860101925085831115610a9357600080fd5b602085015b83811015610ab0578035835260209283019201610a98565b5095945050505050565b600080600060608486031215610acf57600080fd5b833567ffffffffffffffff811115610ae657600080fd5b8401601f81018613610af757600080fd5b8035610b05610a6c82610a29565b8082825260208201915060208360051b850101925088831115610b2757600080fd5b602084015b83811015610b6957803567ffffffffffffffff811115610b4b57600080fd5b610b5a8b602083890101610927565b84525060209283019201610b2c565b509550505050602084013567ffffffffffffffff811115610b8957600080fd5b610b9586828701610a4d565b925050610757604085016109c3565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2b836106fb565b1660408201526000602083013567ffffffffffffffff8116808214610c4f57600080fd5b6060840152506040830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610c8b57600080fd5b830160208101903567ffffffffffffffff811115610ca857600080fd5b803603821315610cb757600080fd5b6060608085015261061d60a085018284610ba4565b600082610d02577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d3c60a083018661084c565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610d87578151865260209586019590910190600101610d69565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e0f85835161084c565b94506020938401939190910190600101610dd5565b505050508281036040840152610e3a8186610d55565b915050610e4b606083018415159052565b95945050505050565b600060208284031215610e6657600080fd5b815161055d816109b5565b60008251610e83818460208701610828565b919091019291505056fea2646970667358221220d537f023478b5746f5f67760e722db6f4a51db89700ac69d6ba33759b8ac342f64736f6c634300081a0033a26469706673582212202ae40bba2840cd77ea3a08d624bc18c4c9c30c264ee29671e8fc48518796931b64736f6c634300081a0033", + 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\":\"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\":\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ed768061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c8063b0464fdc116100e3578063dcf7d0371161008c578063e63ab1e911610066578063e63ab1e9146102ce578063fa7626d4146102f5578063fe574f841461030257600080fd5b8063dcf7d037146102b6578063de1cb76c146102be578063e20c9f71146102c657600080fd5b8063c1909972116100bd578063c19099721461029e578063ccb0e3f2146102a6578063d509b16c146102ae57600080fd5b8063b0464fdc14610276578063b5508aa91461027e578063ba414fa61461028657600080fd5b8063493465581161014557806385226c811161011f57806385226c811461021757806385f438c11461022c578063916a17c61461026157600080fd5b806349346558146101f257806366d9a9a0146101fa578063828320141461020f57600080fd5b80633cba0107116101765780633cba0107146101da5780633e5e3c23146101e25780633f7286f4146101ea57600080fd5b80630a9254e41461019d5780631ed7831c146101a75780632ade3880146101c5575b600080fd5b6101a561030a565b005b6101af610b51565b6040516101bc9190618347565b60405180910390f35b6101cd610bb3565b6040516101bc91906183e3565b6101a5610cf5565b6101af6114af565b6101af61150f565b6101a561156f565b610202611bb2565b6040516101bc9190618549565b6101a5611d34565b61021f611f90565b6040516101bc91906185e7565b6102537f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101bc565b610269612060565b6040516101bc919061865e565b61026961215b565b61021f612256565b61028e612326565b60405190151581526020016101bc565b6101a56123fa565b6101a5612665565b6101a5613191565b6101a56131cd565b6101a5613874565b6101af613ecb565b6102537f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f5461028e9060ff1681565b6101a5613f2b565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805490911661567817905560405161035c9061825a565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103e0573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190861694810194909452604484019290925290921660648201526104d1919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052614149565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061055d90618267565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610599573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560205460245460275460255460405193851694928316939183169216906105f490618274565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610638573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161067d90618281565b604051809103906000f080158015610699573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561074557600080fd5b505af1158015610759573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156107cf57600080fd5b505af11580156107e3573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561084957600080fd5b505af115801561085d573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b1580156108c357600080fd5b505af11580156108d7573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561093957600080fd5b505af115801561094d573d6000803e3d6000fd5b5050602480546023546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152624c4b40938101939093521692506340c10f199150604401600060405180830381600087803b1580156109be57600080fd5b505af11580156109d2573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610a5657600080fd5b505af1158015610a6a573d6000803e3d6000fd5b5050604080516080810182526025546001600160a01b039081168252602454811660208084019182526001848601908152855191820190955260008152606084018190528351602880549185167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091178155915160298054965167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009097169190941617949094179091559093509150602a90610b4c90826187b8565b505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610ba957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b8b575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610cec57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610cd5578382906000526020600020018054610c4890618724565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7490618724565b8015610cc15780601f10610c9657610100808354040283529160200191610cc1565b820191906000526020600020905b815481529060010190602001808311610ca457829003601f168201915b505050505081526020019060010190610c29565b505050508152505081526020019060010190610bd7565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015610dd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df49190618877565b9050610e01816000614168565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015610e51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e759190618877565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391610f58916001600160a01b0391909116906000908690600401618890565b600060405180830381600087803b158015610f7257600080fd5b505af1158015610f86573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561101857600080fd5b505af115801561102c573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561111b57600080fd5b505af115801561112f573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d915061117490899088906188b8565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156111d557600080fd5b505af11580156111e9573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061124192909116908a9089908b906004016188d1565b600060405180830381600087803b15801561125b57600080fd5b505af115801561126f573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa1580156112c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e69190618877565b90506112f28188614168565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611342573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113669190618877565b905061137b816113768a87618939565b614168565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156113f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114159190618877565b9050611422816000614168565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611472573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114969190618877565b90506114a3816000614168565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610ba9576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610b8b575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610ba9576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610b8b575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a082319361161093921691016001600160a01b0391909116815260200190565b602060405180830381865afa15801561162d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116519190618877565b905061165e816000614168565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156116ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d29190618877565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916117b5916001600160a01b0391909116906000908690600401618890565b600060405180830381600087803b1580156117cf57600080fd5b505af11580156117e3573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561187557600080fd5b505af1158015611889573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561195b57600080fd5b505af115801561196f573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d91506119b490899088906188b8565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611a1557600080fd5b505af1158015611a29573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611a8192909116908a9089908b906004016188d1565b600060405180830381600087803b158015611a9b57600080fd5b505af1158015611aaf573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b259190618877565b9050611b32816000614168565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611b82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba69190618877565b905061137b8185614168565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610cec5783829060005260206000209060020201604051806040016040529081600082018054611c0990618724565b80601f0160208091040260200160405190810160405280929190818152602001828054611c3590618724565b8015611c825780601f10611c5757610100808354040283529160200191611c82565b820191906000526020600020905b815481529060010190602001808311611c6557829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611d1c57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611cc95790505b50505050508152505081526020019060010190611bd6565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611dd157600080fd5b505af1158015611de5573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611ed0919060040161894c565b600060405180830381600087803b158015611eea57600080fd5b505af1158015611efe573d6000803e3d6000fd5b50506023546021546040517f2ccb404d0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450632ccb404d9350611f599290911690879086908890602890600401618a47565b600060405180830381600087803b158015611f7357600080fd5b505af1158015611f87573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610cec578382906000526020600020018054611fd390618724565b80601f0160208091040260200160405190810160405280929190818152602001828054611fff90618724565b801561204c5780601f106120215761010080835404028352916020019161204c565b820191906000526020600020905b81548152906001019060200180831161202f57829003601f168201915b505050505081526020019060010190611fb4565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610cec5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561214357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116120f05790505b50505050508152505081526020019060010190612084565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610cec5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561223e57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116121eb5790505b5050505050815250508152602001906001019061217f565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610cec57838290600052602060002001805461229990618724565b80601f01602080910402602001604051908101604052809291908181526020018280546122c590618724565b80156123125780601f106122e757610100808354040283529160200191612312565b820191906000526020600020905b8154815290600101906020018083116122f557829003601f168201915b50505050508152602001906001019061227a565b60085460009060ff161561233e575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156123cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f39190618877565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156124e057600080fd5b505af11580156124f4573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506125df919060040161894c565b600060405180830381600087803b1580156125f957600080fd5b505af115801561260d573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611f5992909116908790869088906004016188d1565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156126c657600080fd5b505af11580156126da573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506127c5919060040161894c565b600060405180830381600087803b1580156127df57600080fd5b505af11580156127f3573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561284757600080fd5b505af115801561285b573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156128b857600080fd5b505af11580156128cc573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506129b7919060040161894c565b600060405180830381600087803b1580156129d157600080fd5b505af11580156129e5573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a3957600080fd5b505af1158015612a4d573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612aaa57600080fd5b505af1158015612abe573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612b1257600080fd5b505af1158015612b26573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612baf57600080fd5b505af1158015612bc3573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612c2057600080fd5b505af1158015612c34573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b158015612ca857600080fd5b505af1158015612cbc573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612d1957600080fd5b505af1158015612d2d573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d8157600080fd5b505af1158015612d95573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191015b602060405180830381865afa158015612de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e0c9190618877565b9050612e19816000614168565b6026546040516001600160a01b0390911660248201526044810184905260009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612ef9916001600160a01b0391909116906000908690600401618890565b600060405180830381600087803b158015612f1357600080fd5b505af1158015612f27573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612fb957600080fd5b505af1158015612fcd573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561306c57600080fd5b505af1158015613080573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e62909150606401600060405180830381600087803b1580156130f457600080fd5b505af1158015613108573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561315a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317e9190618877565b905061318a8186614168565b5050505050565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a093600093849316916370a082319101612dcb565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa1580156132a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132cc9190618877565b90506132d9816000614168565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334d9190618877565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613430916001600160a01b0391909116906000908690600401618890565b600060405180830381600087803b15801561344a57600080fd5b505af115801561345e573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156134f057600080fd5b505af1158015613504573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050613542600289618a93565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561360a57600080fd5b505af115801561361e573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d915061366390899088906188b8565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156136c457600080fd5b505af11580156136d8573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061373092909116908a9089908b906004016188d1565b600060405180830381600087803b15801561374a57600080fd5b505af115801561375e573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156137b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137d49190618877565b90506137e58161137660028a618a93565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613835573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138599190618877565b905061137b8161386a60028b618a93565b6113769087618939565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa158015613909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392d9190618877565b905061393a816000614168565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561398a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ae9190618877565b6020546040516001600160a01b0390911660248201526044810187905290915060009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613a91916001600160a01b0391909116906000908690600401618890565b600060405180830381600087803b158015613aab57600080fd5b505af1158015613abf573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613b5157600080fd5b505af1158015613b65573d6000803e3d6000fd5b50506020546040517f8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e2649350613ba992506001600160a01b0390911690602890618ace565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613c3f57600080fd5b505af1158015613c53573d6000803e3d6000fd5b50506024546021546040516001600160a01b039283169450911691507ff196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b90613ca1908a908990602890618af0565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613d3757600080fd5b505af1158015613d4b573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b8353780179150613d939089908890602890618af0565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613df457600080fd5b505af1158015613e08573d6000803e3d6000fd5b50506023546021546040517f2ccb404d0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450632ccb404d9350613e6392909116908a9089908b90602890600401618a47565b600060405180830381600087803b158015613e7d57600080fd5b505af1158015613e91573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a0823191016112a5565b60606015805480602002602001604051908101604052809291908181526020018280548015610ba9576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610b8b575050505050905090565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613f8c57600080fd5b505af1158015613fa0573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061408b919060040161894c565b600060405180830381600087803b1580156140a557600080fd5b505af11580156140b9573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561412d57600080fd5b505af1158015614141573d6000803e3d6000fd5b505050505050565b600061415361828e565b61415e8484836141e7565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156141d357600080fd5b505afa158015614141573d6000803e3d6000fd5b6000806141f48584614262565b90506142576040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614242929190618b1b565b6040516020818303038152906040528561426e565b9150505b9392505050565b600061425b838361429c565b60c081015151600090156142925761428b84848460c001516142b7565b905061425b565b61428b848461445d565b60006142a88383614548565b61425b8383602001518461426e565b6000806142c2614558565b905060006142d0868361462b565b905060006142e78260600151836020015185614ad1565b905060006142f783838989614ce3565b9050600061430482615b60565b602081015181519192509060030b156143775789826040015160405160200161432e929190618b3d565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261436e9160040161894c565b60405180910390fd5b60006143ba6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001615d2f565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061440d90849060040161894c565b602060405180830381865afa15801561442a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061444e9190618bbe565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906144b290879060040161894c565b600060405180830381865afa1580156144cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526144f79190810190618ca0565b905060006145258285604051602001614511929190618cd5565b604051602081830303815290604052615f2f565b90506001600160a01b03811661415e57848460405160200161432e929190618d04565b61455482826000615f42565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906145df908490600401618daf565b600060405180830381865afa1580156145fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526146249190810190618df6565b9250505090565b61465d6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506146a86040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6146b185616045565b602082015260006146c18661642a565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614703573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261472b9190810190618df6565b868385602001516040516020016147459493929190618e3f565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061479d90859060040161894c565b600060405180830381865afa1580156147ba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526147e29190810190618df6565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061482a908490600401618f43565b602060405180830381865afa158015614847573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061486b9190618f95565b614880578160405160200161432e9190618fb7565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906148c5908490600401619049565b600060405180830381865afa1580156148e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261490a9190810190618df6565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061495190849060040161909b565b602060405180830381865afa15801561496e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149929190618f95565b15614a27576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906149dc90849060040161909b565b600060405180830381865afa1580156149f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614a219190810190618df6565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001614a4c91906190ed565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614a78929190619159565b600060405180830381865afa158015614a95573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614abd9190810190618df6565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081614aed5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614b4d57614b4d61917e565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110614ba157614ba161917e565b602002602001018190525084604051602001614bbd91906191ad565b60405160208183030381529060405281600281518110614bdf57614bdf61917e565b602002602001018190525082604051602001614bfb9190619219565b60405160208183030381529060405281600381518110614c1d57614c1d61917e565b60200260200101819052506000614c3382615b60565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614cc490604080518082018252600080825260209182015281518083019092528451825280850190820152906166ad565b614cd9578560405160200161432e919061925a565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015614d33565b511590565b614ea757826020015115614def576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161436e565b8260c0015115614ea7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161436e565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081614ec057905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280614f1b906192eb565b935060ff1681518110614f3057614f3061917e565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001614f81919061930a565b604051602081830303815290604052828280614f9c906192eb565b935060ff1681518110614fb157614fb161917e565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280614ffe906192eb565b935060ff16815181106150135761501361917e565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615060906192eb565b935060ff16815181106150755761507561917e565b60200260200101819052508760200151828280615091906192eb565b935060ff16815181106150a6576150a661917e565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806150f3906192eb565b935060ff16815181106151085761510861917e565b602090810291909101015287518282615120816192eb565b935060ff16815181106151355761513561917e565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615182906192eb565b935060ff16815181106151975761519761917e565b60200260200101819052506151ab4661670e565b82826151b6816192eb565b935060ff16815181106151cb576151cb61917e565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615218906192eb565b935060ff168151811061522d5761522d61917e565b602002602001018190525086828280615245906192eb565b935060ff168151811061525a5761525a61917e565b60209081029190910101528551156153815760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826152ab816192eb565b935060ff16815181106152c0576152c061917e565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061531090899060040161894c565b600060405180830381865afa15801561532d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526153559190810190618df6565b8282615360816192eb565b935060ff16815181106153755761537561917e565b60200260200101819052505b8460200151156154515760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826153ca816192eb565b935060ff16815181106153df576153df61917e565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061542c906192eb565b935060ff16815181106154415761544161917e565b6020026020010181905250615618565b615489614d2e8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61551c5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826154cc816192eb565b935060ff16815181106154e1576154e161917e565b60200260200101819052508460a0015160405160200161550191906191ad565b60405160208183030381529060405282828061542c906192eb565b8460c0015115801561555f57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261555d90511590565b155b156156185760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826155a3816192eb565b935060ff16815181106155b8576155b861917e565b60200260200101819052506155cc886167ae565b6040516020016155dc91906191ad565b6040516020818303038152906040528282806155f7906192eb565b935060ff168151811061560c5761560c61917e565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261564c90511590565b6156e15760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261568f816192eb565b935060ff16815181106156a4576156a461917e565b602002602001018190525084604001518282806156c0906192eb565b935060ff16815181106156d5576156d561917e565b60200260200101819052505b6060850151156158025760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261572a816192eb565b935060ff168151811061573f5761573f61917e565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156157ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157d69190810190618df6565b82826157e1816192eb565b935060ff16815181106157f6576157f661917e565b60200260200101819052505b60e085015151156158a95760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261584c816192eb565b935060ff16815181106158615761586161917e565b602002602001018190525061587d8560e001516000015161670e565b8282615888816192eb565b935060ff168151811061589d5761589d61917e565b60200260200101819052505b60e085015160200151156159535760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826158f6816192eb565b935060ff168151811061590b5761590b61917e565b60200260200101819052506159278560e001516020015161670e565b8282615932816192eb565b935060ff16815181106159475761594761917e565b60200260200101819052505b60e085015160400151156159fd5760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826159a0816192eb565b935060ff16815181106159b5576159b561917e565b60200260200101819052506159d18560e001516040015161670e565b82826159dc816192eb565b935060ff16815181106159f1576159f161917e565b60200260200101819052505b60e08501516060015115615aa75760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615a4a816192eb565b935060ff1681518110615a5f57615a5f61917e565b6020026020010181905250615a7b8560e001516060015161670e565b8282615a86816192eb565b935060ff1681518110615a9b57615a9b61917e565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615ac557615ac56186f5565b604051908082528060200260200182016040528015615af857816020015b6060815260200190600190039081615ae35790505b50905060005b8260ff168160ff161015615b5157838160ff1681518110615b2157615b2161917e565b6020026020010151828260ff1681518110615b3e57615b3e61917e565b6020908102919091010152600101615afe565b5093505050505b949350505050565b615b876040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91615c0d91869101619375565b600060405180830381865afa158015615c2a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615c529190810190618df6565b90506000615c60868361729d565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615c9091906185e7565b6000604051808303816000875af1158015615caf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615cd791908101906193bc565b805190915060030b15801590615cf05750602081015151155b8015615cff5750604081015151155b15614cd95781600081518110615d1757615d1761917e565b602002602001015160405160200161432e9190619472565b60606000615d648560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150615d9b9082905b906173f2565b15615ef8576000615e1882615e1284615e0c615dde8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617419565b9061747b565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615e7c9082906173f2565b15615ee657604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ee3905b8290617500565b90505b615eef81617526565b9250505061425b565b8215615f1157848460405160200161432e92919061965e565b505060408051602081019091526000815261425b565b509392505050565b6000808251602084016000f09392505050565b8160a0015115615f5157505050565b6000615f5e84848461758f565b90506000615f6b82615b60565b602081015181519192509060030b1580156160075750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261600790604080518082018252600080825260209182015281518083019092528451825280850190820152615d95565b1561601457505050505050565b6040820151511561603457816040015160405160200161432e9190619705565b8060405160200161432e9190619763565b6060600061607a8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506160df905b82906166ad565b1561614e57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261425b90616149908390617b2a565b617526565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161b0905b8290617bb4565b60010361627d57604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261621690615edc565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261425b90616149905b8390617500565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162dc906160d8565b1561641357604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616344908390617c4e565b9050600081600183516163579190618939565b815181106163675761636761917e565b6020026020010151905061640a6161496163dd6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617b2a565b95945050505050565b8260405160200161432e91906197ce565b50919050565b6060600061645f8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506164c1906160d8565b156164cf5761425b81617526565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261652e906161a9565b60010361659857604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261425b9061614990616276565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165f7906160d8565b1561641357604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061665f908390617c4e565b905060018151111561669b57806002825161667a9190618939565b8151811061668a5761668a61917e565b602002602001015192505050919050565b508260405160200161432e91906197ce565b8051825160009111156166c257506000614162565b815183516020850151600092916166d8916198ac565b6166e29190618939565b9050826020015181036166f9576001915050614162565b82516020840151819020912014905092915050565b6060600061671b83617cf3565b600101905060008167ffffffffffffffff81111561673b5761673b6186f5565b6040519080825280601f01601f191660200182016040528015616765576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461676f57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161683a905b8290617dd5565b1561687a57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168d990616833565b1561691957505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261697890616833565b156169b857505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a1790616833565b80616a7c5750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a7c90616833565b15616abc57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b1b90616833565b80616b805750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b8090616833565b15616bc057505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c1f90616833565b80616c845750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c8490616833565b15616cc457505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d2390616833565b80616d885750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d8890616833565b15616dc857505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e2790616833565b15616e6757505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ec690616833565b15616f0657505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f6590616833565b15616fa557505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261700490616833565b1561704457505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170a390616833565b156170e357505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261714290616833565b806171a75750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171a790616833565b156171e757505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261724690616833565b1561728657505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161432e92906020016198bf565b60608060005b845181101561732857818582815181106172bf576172bf61917e565b60200260200101516040516020016172d8929190618cd5565b6040516020818303038152906040529150600185516172f79190618939565b8114617320578160405160200161730e9190619a28565b60405160208183030381529060405291505b6001016172a3565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617341579050509050838160008151811061736c5761736c61917e565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106173c0576173c061917e565b602002602001018190525081816002815181106173df576173df61917e565b6020908102919091010152949350505050565b60208083015183518351928401516000936174109291849190617de9565b14159392505050565b6040805180820190915260008082526020820152600061744b8460000151856020015185600001518660200151617efa565b905083602001518161745d9190618939565b8451859061746c908390618939565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156174a0575081614162565b60208083015190840151600191146174c75750815160208481015190840151829020919020145b80156174f8578251845185906174de908390618939565b90525082516020850180516174f49083906198ac565b9052505b509192915050565b604080518082019091526000808252602082015261751f83838361801a565b5092915050565b60606000826000015167ffffffffffffffff811115617547576175476186f5565b6040519080825280601f01601f191660200182016040528015617571576020820181803683370190505b509050600060208201905061751f81856020015186600001516180c5565b6060600061759b614558565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816175b857905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280617613906192eb565b935060ff16815181106176285761762861917e565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016176799190619a69565b604051602081830303815290604052828280617694906192eb565b935060ff16815181106176a9576176a961917e565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806176f6906192eb565b935060ff168151811061770b5761770b61917e565b6020026020010181905250826040516020016177279190619219565b604051602081830303815290604052828280617742906192eb565b935060ff16815181106177575761775761917e565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806177a4906192eb565b935060ff16815181106177b9576177b961917e565b60200260200101819052506177ce878461813f565b82826177d9816192eb565b935060ff16815181106177ee576177ee61917e565b60209081029190910101528551511561789a5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282617840816192eb565b935060ff16815181106178555761785561917e565b602002602001018190525061786e86600001518461813f565b8282617879816192eb565b935060ff168151811061788e5761788e61917e565b60200260200101819052505b8560800151156179085760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826178e3816192eb565b935060ff16815181106178f8576178f861917e565b602002602001018190525061796e565b841561796e5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261794d816192eb565b935060ff16815181106179625761796261917e565b60200260200101819052505b60408601515115617a0a5760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826179b8816192eb565b935060ff16815181106179cd576179cd61917e565b602002602001018190525085604001518282806179e9906192eb565b935060ff16815181106179fe576179fe61917e565b60200260200101819052505b856060015115617a745760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617a53816192eb565b935060ff1681518110617a6857617a6861917e565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617a9257617a926186f5565b604051908082528060200260200182016040528015617ac557816020015b6060815260200190600190039081617ab05790505b50905060005b8260ff168160ff161015617b1e57838160ff1681518110617aee57617aee61917e565b6020026020010151828260ff1681518110617b0b57617b0b61917e565b6020908102919091010152600101617acb565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617b4f575081614162565b81518351602085015160009291617b65916198ac565b617b6f9190618939565b60208401519091506001908214617b90575082516020840151819020908220145b8015617bab57835185518690617ba7908390618939565b9052505b50929392505050565b6000808260000151617bd88560000151866020015186600001518760200151617efa565b617be291906198ac565b90505b83516020850151617bf691906198ac565b811161751f5781617c0681619aae565b9250508260000151617c3d856020015183617c219190618939565b8651617c2d9190618939565b8386600001518760200151617efa565b617c4791906198ac565b9050617be5565b60606000617c5c8484617bb4565b617c679060016198ac565b67ffffffffffffffff811115617c7f57617c7f6186f5565b604051908082528060200260200182016040528015617cb257816020015b6060815260200190600190039081617c9d5790505b50905060005b8151811015615f2757617cce6161498686617500565b828281518110617ce057617ce061917e565b6020908102919091010152600101617cb8565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310617d3c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617d68576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310617d8657662386f26fc10000830492506010015b6305f5e1008310617d9e576305f5e100830492506008015b6127108310617db257612710830492506004015b60648310617dc4576064830492506002015b600a83106141625760010192915050565b6000617de1838361817f565b159392505050565b600080858411617ef05760208411617e9c5760008415617e34576001617e10866020618939565b617e1b906008619ac8565b617e26906002619bc6565b617e309190618939565b1990505b8351811685617e4389896198ac565b617e4d9190618939565b805190935082165b818114617e8757878411617e6f5787945050505050615b58565b83617e7981619bd2565b945050828451169050617e55565b617e9187856198ac565b945050505050615b58565b838320617ea98588618939565b617eb390876198ac565b91505b858210617eee57848220808203617edb57617ed186846198ac565b9350505050615b58565b617ee6600184618939565b925050617eb6565b505b5092949350505050565b600083818685116180055760208511617fb45760008515617f46576001617f22876020618939565b617f2d906008619ac8565b617f38906002619bc6565b617f429190618939565b1990505b84518116600087617f578b8b6198ac565b617f619190618939565b855190915083165b828114617fa657818610617f8e57617f818b8b6198ac565b9650505050505050615b58565b85617f9881619aae565b965050838651169050617f69565b859650505050505050615b58565b508383206000905b617fc68689618939565b821161800357858320808203617fe25783945050505050615b58565b617fed6001856198ac565b9350508180617ffb90619aae565b925050617fbc565b505b61800f87876198ac565b979650505050505050565b6040805180820190915260008082526020820152600061804c8560000151866020015186600001518760200151617efa565b6020808701805191860191909152519091506180689082618939565b83528451602086015161807b91906198ac565b810361808a57600085526180bc565b8351835161809891906198ac565b855186906180a7908390618939565b90525083516180b690826198ac565b60208601525b50909392505050565b602081106180fd57815183526180dc6020846198ac565b92506180e96020836198ac565b91506180f6602082618939565b90506180c5565b600019811561812c576001618113836020618939565b61811f90610100619bc6565b6181299190618939565b90505b9151835183169219169190911790915250565b6060600061814d848461462b565b805160208083015160405193945061816793909101619be9565b60405160208183030381529060405291505092915050565b8151815160009190811115618192575081515b6020808501519084015160005b8381101561824b578251825180821461821b5760001960208710156181fa576001846181cc896020618939565b6181d691906198ac565b6181e1906008619ac8565b6181ec906002619bc6565b6181f69190618939565b1990505b81811683821681810391146182185797506141629650505050505050565b50505b6182266020866198ac565b94506182336020856198ac565b9350505060208161824491906198ac565b905061819f565b5084518651614cd99190619c41565b610c9f80619c6283390190565b611c7f8061a90183390190565b6118b38061c58083390190565b610f0e8061de3383390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016182d16182d6565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016182d16040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156183885783516001600160a01b0316835260209384019390920191600101618361565b509095945050505050565b60005b838110156183ae578181015183820152602001618396565b50506000910152565b600081518084526183cf816020860160208601618393565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156184df577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156184c5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526184af8486516183b7565b6020958601959094509290920191600101618475565b50919750505060209485019492909201915060010161840b565b50929695505050505050565b600081518084526020840193506020830160005b8281101561853f5781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016184ff565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156184df577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526185b560408801826183b7565b90506020820151915086810360208801526185d081836184eb565b965050506020938401939190910190600101618571565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156184df577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526186498583516183b7565b9450602093840193919091019060010161860f565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156184df577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526186df60408701826184eb565b9550506020938401939190910190600101618686565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061873857607f821691505b602082108103616424577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610b4c57806000526020600020601f840160051c810160208510156187985750805b601f840160051c820191505b8181101561318a57600081556001016187a4565b815167ffffffffffffffff8111156187d2576187d26186f5565b6187e6816187e08454618724565b84618771565b6020601f82116001811461881a57600083156188025750848201515b600019600385901b1c1916600184901b17845561318a565b600084815260208120601f198516915b8281101561884a578785015182556020948501946001909201910161882a565b50848210156188685786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561888957600080fd5b5051919050565b6001600160a01b038416815282602082015260606040820152600061640a60608301846183b7565b828152604060208201526000615b5860408301846183b7565b6001600160a01b03851681528360208201526080604082015260006188f960808301856183b7565b905082606083015295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156141625761416261890a565b60208152600061425b60208301846183b7565b6001600160a01b038154168252600060018201546001600160a01b038116602085015267ffffffffffffffff8160a01c166040850152506002820160806060850152600081546189ae81618724565b80608088015260018216600081146189cd5760018114618a0757618a3b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660a089015260a082151560051b8901019350618a3b565b84600052602060002060005b83811015618a325781548a820160a00152600190910190602001618a13565b890160a0019450505b50919695505050505050565b6001600160a01b038616815284602082015260a060408201526000618a6f60a08301866183b7565b8460608401528281036080840152618a87818561895f565b98975050505050505050565b600082618ac9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b0383168152604060208201526000615b58604083018461895f565b838152606060208201526000618b0960608301856183b7565b8281036040840152614cd9818561895f565b6001600160a01b0383168152604060208201526000615b5860408301846183b7565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618b7581601a850160208801618393565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351618bb281601c840160208801618393565b01601c01949350505050565b600060208284031215618bd057600080fd5b81516001600160a01b038116811461425b57600080fd5b6040516060810167ffffffffffffffff81118282101715618c0a57618c0a6186f5565b60405290565b60008067ffffffffffffffff841115618c2b57618c2b6186f5565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715618c5a57618c5a6186f5565b604052838152905080828401851015618c7257600080fd5b615f27846020830185618393565b600082601f830112618c9157600080fd5b61425b83835160208501618c10565b600060208284031215618cb257600080fd5b815167ffffffffffffffff811115618cc957600080fd5b61415e84828501618c80565b60008351618ce7818460208801618393565b835190830190618cfb818360208801618393565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618d3c81601a850160208801618393565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351618d79816033840160208801618393565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061425b60808301846183b7565b600060208284031215618e0857600080fd5b815167ffffffffffffffff811115618e1f57600080fd5b8201601f81018413618e3057600080fd5b61415e84825160208401618c10565b60008551618e51818460208a01618393565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551618e8b816001840160208a01618393565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618ec9816002840160208901618393565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618f0b816002840160208801618393565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618f5660408301846183b7565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b600060208284031215618fa757600080fd5b8151801515811461425b57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618fef81601f850160208701618393565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061905c60408301846183b7565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b6040815260006190ae60408301846183b7565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619125816014850160208701618393565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061916c60408301856183b7565b828103602084015261425781856183b7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22000000000000000000000000000000000000000000000000000000000000008152600082516191e5816001850160208701618393565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161922b818460208701618393565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e7472616374200000000000000000000000000000000000000000006040820152600082516192de81604b850160208701618393565b91909101604b0192915050565b600060ff821660ff81036193015761930161890a565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251619368816029850160208701618393565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061425b60808301846183b7565b6000602082840312156193ce57600080fd5b815167ffffffffffffffff8111156193e557600080fd5b8201606081850312156193f757600080fd5b6193ff618be7565b81518060030b811461941057600080fd5b8152602082015167ffffffffffffffff81111561942c57600080fd5b61943886828501618c80565b602083015250604082015167ffffffffffffffff81111561945857600080fd5b61946486828501618c80565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f22000000000000000000000000000000000000000000000000000000000000006020820152600082516194d0816021850160208701618393565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516196bc816021850160208801618393565b7f2720696e206f75747075743a200000000000000000000000000000000000000060219184019182015283516196f981602e840160208801618393565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251619368816029850160208701618393565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a0000000000000000000000000000000000000000000000000000000000006020820152600082516197c1816022850160208701618393565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161980681600e850160208701618393565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b808201808211156141625761416261890a565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516198f7816018850160208801618393565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161993481601c840160208801618393565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619a3a818460208701618393565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251619aa181601c850160208701618393565b91909101601c0192915050565b60006000198203619ac157619ac161890a565b5060010190565b80820281158282048414176141625761416261890a565b6001815b6001841115619b1a57808504811115619afe57619afe61890a565b6001841615619b0c57908102905b60019390931c928002619ae3565b935093915050565b600082619b3157506001614162565b81619b3e57506000614162565b8160018114619b545760028114619b5e57619b7a565b6001915050614162565b60ff841115619b6f57619b6f61890a565b50506001821b614162565b5060208310610133831016604e8410600b8410161715619b9d575081810a614162565b619baa6000198484619adf565b8060001904821115619bbe57619bbe61890a565b029392505050565b600061425b8383619b22565b600081619be157619be161890a565b506000190190565b60008351619bfb818460208801618393565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619c35816001840160208801618393565b01600101949350505050565b818103600083128015838313168383128216171561751f5761751f61890a56fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a003360a060405234801561001057600080fd5b50604051611c7f380380611c7f83398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611c5f8339815191528261014c565b50610143600080516020611c5f8339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b6080516119e8610277600039600081816101ca01528181610556015281816105ab015281816107c8015261081d01526119e86000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638456cb59116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103d5578063e63ab1e9146103e8578063eab103df1461040f57600080fd5b8063d547741f1461038c578063d936547e1461039f578063d9caed12146103c257600080fd5b80639a590427116100bd5780639a5904271461035e5780639b19251a14610371578063a217fddf1461038457600080fd5b80638456cb59146102f657806385f438c1146102fe57806391d148541461032557600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102c55780635c975abb146102d85780635eb72e15146102e357600080fd5b806336568abe146102835780633f4ba83a14610296578063570618e11461029e57600080fd5b8063248a9ca311610176578063248a9ca314610219578063252f07bf1461024b5780632f2ff15d1461027057600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610204575b600080fd5b6101b06101ab3660046113c2565b610422565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bc565b610217610212366004611462565b6104bb565b005b61023d6102273660046114d5565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61021761027e3660046114ee565b61067b565b6102176102913660046114ee565b6106a7565b6102176106f8565b61023d7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec906001600160a01b031681565b60025460ff166101b0565b6102176102f136600461151e565b61072d565b6102176108f2565b61023d7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b06103333660046114ee565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61021761036c3660046115c1565b610924565b61021761037f3660046115c1565b6109d8565b61023d600081565b61021761039a3660046114ee565b610a8f565b6101b06103ad3660046115c1565b60036020526000908152604090205460ff1681565b6102176103d03660046115de565b610ab5565b6102176103e336600461161f565b610bad565b61023d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61021761041d3660046116be565b610dd9565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104b557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104c3610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104ed81610e72565b6104f5610e7c565b6001600160a01b03851660009081526003602052604090205460ff16610547576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61057b6001600160a01b0386167f000000000000000000000000000000000000000000000000000000000000000086610ebb565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906105e89088908a90899089908990600401611724565b600060405180830381600087803b15801561060257600080fd5b505af1158015610616573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161066193929190611767565b60405180910390a3506106746001600055565b5050505050565b6000828152600160208190526040909120015461069781610e72565b6106a18383610f2f565b50505050565b6001600160a01b03811633146106e9576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106f38282610fc2565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61072281610e72565b61072a611049565b50565b610735610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461075f81610e72565b610767610e7c565b6001600160a01b03861660009081526003602052604090205460ff166107b9576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107ed6001600160a01b0387167f000000000000000000000000000000000000000000000000000000000000000087610ebb565b6040517f36c99f3b0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b9061085c9089908b908a908a908a908a90600401611857565b600060405180830381600087803b15801561087657600080fd5b505af115801561088a573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37878787876040516108d794939291906118ae565b60405180910390a3506108ea6001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61091c81610e72565b61072a61109b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61094e81610e72565b6001600160a01b03821661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a0281610e72565b6001600160a01b038216610a42576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610aab81610e72565b6106a18383610fc2565b610abd610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ae781610e72565b610aef610e7c565b6001600160a01b03831660009081526003602052604090205460ff16610b41576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b556001600160a01b0384168584610ebb565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610b9a91815260200190565b60405180910390a3506106f36001600055565b610bb5610e2f565b610bbd610e7c565b60045474010000000000000000000000000000000000000000900460ff16610c11576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610c63576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce791906118da565b9050610cfe6001600160a01b0386163330876110d8565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610d85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da991906118da565b610db391906118f3565b8787604051610dc695949392919061192d565b60405180910390a2506108ea6001600055565b6000610de481610e72565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610e6b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61072a8133611111565b60025460ff1615610eb9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b038381166024830152604482018390526106f391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611188565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16610fba5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104b5565b5060006104b5565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1615610fba5760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104b5565b611051611204565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6110a3610e7c565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861107e3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106a19186918216906323b872dd90608401610ee8565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611184576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b600061119d6001600160a01b03841683611240565b905080516000141580156111c25750808060200190518101906111c09190611966565b155b156106f3576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161117b565b60025460ff16610eb9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061124e83836000611255565b9392505050565b606081471015611293576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161117b565b600080856001600160a01b031684866040516112af9190611983565b60006040518083038185875af1925050503d80600081146112ec576040519150601f19603f3d011682016040523d82523d6000602084013e6112f1565b606091505b509150915061130186838361130b565b9695505050505050565b6060826113205761131b82611380565b61124e565b815115801561133757506001600160a01b0384163b155b15611379576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161117b565b508061124e565b8051156113905780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156113d457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461124e57600080fd5b6001600160a01b038116811461072a57600080fd5b60008083601f84011261142b57600080fd5b50813567ffffffffffffffff81111561144357600080fd5b60208301915083602082850101111561145b57600080fd5b9250929050565b60008060008060006080868803121561147a57600080fd5b853561148581611404565b9450602086013561149581611404565b935060408601359250606086013567ffffffffffffffff8111156114b857600080fd5b6114c488828901611419565b969995985093965092949392505050565b6000602082840312156114e757600080fd5b5035919050565b6000806040838503121561150157600080fd5b82359150602083013561151381611404565b809150509250929050565b60008060008060008060a0878903121561153757600080fd5b863561154281611404565b9550602087013561155281611404565b945060408701359350606087013567ffffffffffffffff81111561157557600080fd5b61158189828a01611419565b909450925050608087013567ffffffffffffffff8111156115a157600080fd5b87016080818a0312156115b357600080fd5b809150509295509295509295565b6000602082840312156115d357600080fd5b813561124e81611404565b6000806000606084860312156115f357600080fd5b83356115fe81611404565b9250602084013561160e81611404565b929592945050506040919091013590565b6000806000806000806080878903121561163857600080fd5b863567ffffffffffffffff81111561164f57600080fd5b61165b89828a01611419565b909750955050602087013561166f81611404565b935060408701359250606087013567ffffffffffffffff81111561169257600080fd5b61169e89828a01611419565b979a9699509497509295939492505050565b801515811461072a57600080fd5b6000602082840312156116d057600080fd5b813561124e816116b0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061175c6080830184866116db565b979650505050505050565b8381526040602082015260006117816040830184866116db565b95945050505050565b6000813561179781611404565b6001600160a01b0316835260208201356117b081611404565b6001600160a01b03166020840152604082013567ffffffffffffffff81168082146117da57600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261181657600080fd5b820160208101903567ffffffffffffffff81111561183357600080fd5b80360382131561184257600080fd5b608060608601526117816080860182846116db565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061188f60a0830185876116db565b82810360808401526118a1818561178a565b9998505050505050505050565b8481526060602082015260006118c86060830185876116db565b828103604084015261175c818561178a565b6000602082840312156118ec57600080fd5b5051919050565b818103818111156104b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006119416060830187896116db565b856020840152828103604084015261195a8185876116db565b98975050505050505050565b60006020828403121561197857600080fd5b815161124e816116b0565b6000825160005b818110156119a4576020818601810151858301520161198a565b50600092019182525091905056fea2646970667358221220dc0b6596b7b61441087636724be59e8874b026b619128cbecb229a5609d1f02d64736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405234801561001057600080fd5b506040516118b33803806118b383398101604081905261002f9161021a565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf60008261014e565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014e565b506101157f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361014e565b506101407f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014e565b50505050505050505061026e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101f45760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ac3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101f8565b5060005b92915050565b80516001600160a01b038116811461021557600080fd5b919050565b6000806000806080858703121561023057600080fd5b610239856101fe565b9350610247602086016101fe565b9250610255604086016101fe565b9150610263606086016101fe565b905092959194509250565b60805160a0516115da6102d9600039600081816101e4015281816104740152818161054f01528181610600015281816107d801528181610889015261097101526000818161019801528181610571015281816105d3015281816107fa015261085c01526115da6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635c975abb116100cd57806391d1485411610081578063a783c78911610066578063a783c78914610326578063d547741f1461034d578063e63ab1e91461036057600080fd5b806391d14854146102d8578063a217fddf1461031e57600080fd5b8063743e0c9b116100b2578063743e0c9b146102965780638456cb59146102a957806385f438c1146102b157600080fd5b80635c975abb146102785780635e3e9fef1461028357600080fd5b8063248a9ca3116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b8063248a9ca3146102065780632ccb404d1461023757600080fd5b806301ffc9a714610156578063106e62901461017e578063116191b61461019357806321e093b1146101df575b600080fd5b6101696101643660046110e4565b610387565b60405190151581526020015b60405180910390f35b61019161018c36600461114f565b610420565b005b6101ba7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101ba7f000000000000000000000000000000000000000000000000000000000000000081565b610229610214366004611182565b60009081526002602052604090206001015490565b604051908152602001610175565b6101916102453660046111e4565b6104fb565b61019161025836600461127c565b6106cb565b61019161026b36600461127c565b6106f6565b61019161074f565b60015460ff16610169565b6101916102913660046112a8565b610784565b6101916102a4366004611182565b61094f565b610191610999565b6102297f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102e636600461127c565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610229600081565b6102297f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61019161035b36600461127c565b6109cb565b6102297f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104286109f0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461045281610a33565b61045a610a3d565b61049b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a7c565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5846040516104e391815260200190565b60405180910390a2506104f66001600055565b505050565b6105036109f0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461052d81610a33565b610535610a3d565b61059673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000088610a7c565b6040517f36c99f3b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b90610632907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161143f565b600060405180830381600087803b15801561064c57600080fd5b505af1158015610660573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167fa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017878787866040516106b094939291906114b0565b60405180910390a2506106c36001600055565b505050505050565b6000828152600260205260409020600101546106e681610a33565b6106f08383610afd565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610745576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104f68282610bfd565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077981610a33565b610781610cbc565b50565b61078c6109f0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107b681610a33565b6107be610a3d565b61081f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a7c565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108b9907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114e7565b600060405180830381600087803b1580156108d357600080fd5b505af11580156108e7573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d86868660405161093593929190611539565b60405180910390a2506109486001600055565b5050505050565b610957610a3d565b61078173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d39565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109c381610a33565b610781610d7f565b6000828152600260205260409020600101546109e681610a33565b6106f08383610bfd565b600260005403610a2c576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107818133610dd8565b60015460ff1615610a7a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526104f691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e69565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bf557600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b933390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161041a565b50600061041a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bf557600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161041a565b610cc4610eff565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106f09186918216906323b872dd90608401610ab6565b610d87610a3d565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610d0f565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e65576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e8b73ffffffffffffffffffffffffffffffffffffffff841683610f3b565b90508051600014158015610eb0575080806020019051810190610eae9190611553565b155b156104f6576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e5c565b60015460ff16610a7a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f4983836000610f50565b9392505050565b606081471015610f8e576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e5c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610fb79190611575565b60006040518083038185875af1925050503d8060008114610ff4576040519150601f19603f3d011682016040523d82523d6000602084013e610ff9565b606091505b5091509150611009868383611013565b9695505050505050565b60608261102857611023826110a2565b610f49565b815115801561104c575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561109b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e5c565b5080610f49565b8051156110b25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110f657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f4957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461114a57600080fd5b919050565b60008060006060848603121561116457600080fd5b61116d84611126565b95602085013595506040909401359392505050565b60006020828403121561119457600080fd5b5035919050565b60008083601f8401126111ad57600080fd5b50813567ffffffffffffffff8111156111c557600080fd5b6020830191508360208285010111156111dd57600080fd5b9250929050565b60008060008060008060a087890312156111fd57600080fd5b61120687611126565b955060208701359450604087013567ffffffffffffffff81111561122957600080fd5b61123589828a0161119b565b90955093505060608701359150608087013567ffffffffffffffff81111561125c57600080fd5b87016080818a03121561126e57600080fd5b809150509295509295509295565b6000806040838503121561128f57600080fd5b8235915061129f60208401611126565b90509250929050565b6000806000806000608086880312156112c057600080fd5b6112c986611126565b945060208601359350604086013567ffffffffffffffff8111156112ec57600080fd5b6112f88882890161119b565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff61137182611126565b16825273ffffffffffffffffffffffffffffffffffffffff61139560208301611126565b1660208301526000604082013567ffffffffffffffff81168082146113b957600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126113f557600080fd5b820160208101903567ffffffffffffffff81111561141257600080fd5b80360382131561142157600080fd5b6080606086015261143660808601828461130a565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061149160a08301858761130a565b82810360808401526114a38185611353565b9998505050505050505050565b8481526060602082015260006114ca60608301858761130a565b82810360408401526114dc8185611353565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114dc60808301848661130a565b83815260406020820152600061143660408301848661130a565b60006020828403121561156557600080fd5b81518015158114610f4957600080fd5b6000825160005b81811015611596576020818601810151858301520161157c565b50600092019182525091905056fea2646970667358221220dc0c07f30c80680d98675e920337998abbeaccddeb0e3323337c2c843c731cd164736f6c634300081a00336080604052348015600f57600080fd5b506001600055610eea806100246000396000f3fe60806040526004361061006e5760003560e01c80636ed701691161004b5780636ed70169146100e0578063c5131691146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a2146100775780635ac1e07014610097578063676cc054146100b757005b3661007557005b005b34801561008357600080fd5b50610075610092366004610724565b610148565b3480156100a357600080fd5b506100756100b2366004610760565b6101de565b6100ca6100c536600461079b565b61021a565b6040516100d79190610896565b60405180910390f35b3480156100ec57600080fd5b5061007561024d565b34801561010157600080fd5b50610075610110366004610724565b610282565b6100756101233660046109ce565b61035d565b34801561013457600080fd5b50610075610143366004610aba565b6103a1565b6101506103d6565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610419565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b7f8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264338260405161020f929190610bed565b60405180910390a150565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a19392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61028a6103d6565b6000610297600285610cf3565b9050806000036102d3576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102f573ffffffffffffffffffffffffffffffffffffffff8416338484610419565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610394959493929190610d2e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103949493929190610db8565b600260005403610412576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104ae9085906104b4565b50505050565b60006104d673ffffffffffffffffffffffffffffffffffffffff84168361054f565b905080516000141580156104fb5750808060200190518101906104f99190610e7b565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061055d83836000610564565b9392505050565b6060814710156105a2576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610546565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105cb9190610e98565b60006040518083038185875af1925050503d8060008114610608576040519150601f19603f3d011682016040523d82523d6000602084013e61060d565b606091505b509150915061061d868383610627565b9695505050505050565b60608261063c57610637826106b6565b61055d565b8151158015610660575073ffffffffffffffffffffffffffffffffffffffff84163b155b156106af576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610546565b508061055d565b8051156106c65780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461071f57600080fd5b919050565b60008060006060848603121561073957600080fd5b83359250610749602085016106fb565b9150610757604085016106fb565b90509250925092565b60006020828403121561077257600080fd5b813567ffffffffffffffff81111561078957600080fd5b82016080818503121561055d57600080fd5b600080600083850360408112156107b157600080fd5b60208112156107bf57600080fd5b50839250602084013567ffffffffffffffff8111156107dd57600080fd5b8401601f810186136107ee57600080fd5b803567ffffffffffffffff81111561080557600080fd5b86602082840101111561081757600080fd5b939660209190910195509293505050565b60005b8381101561084357818101518382015260200161082b565b50506000910152565b60008151808452610864816020860160208601610828565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061055d602083018461084c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561091f5761091f6108a9565b604052919050565b600082601f83011261093857600080fd5b813567ffffffffffffffff811115610952576109526108a9565b61098360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108d8565b81815284602083860101111561099857600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106f857600080fd5b803561071f816109b5565b6000806000606084860312156109e357600080fd5b833567ffffffffffffffff8111156109fa57600080fd5b610a0686828701610927565b935050602084013591506040840135610a1e816109b5565b809150509250925092565b600067ffffffffffffffff821115610a4357610a436108a9565b5060051b60200190565b600082601f830112610a5e57600080fd5b8135610a71610a6c82610a29565b6108d8565b8082825260208201915060208360051b860101925085831115610a9357600080fd5b602085015b83811015610ab0578035835260209283019201610a98565b5095945050505050565b600080600060608486031215610acf57600080fd5b833567ffffffffffffffff811115610ae657600080fd5b8401601f81018613610af757600080fd5b8035610b05610a6c82610a29565b8082825260208201915060208360051b850101925088831115610b2757600080fd5b602084015b83811015610b6957803567ffffffffffffffff811115610b4b57600080fd5b610b5a8b602083890101610927565b84525060209283019201610b2c565b509550505050602084013567ffffffffffffffff811115610b8957600080fd5b610b9586828701610a4d565b925050610757604085016109c3565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2b836106fb565b16604082015273ffffffffffffffffffffffffffffffffffffffff610c52602084016106fb565b1660608201526000604083013567ffffffffffffffff8116808214610c7657600080fd5b6080840152506060830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610cb257600080fd5b830160208101903567ffffffffffffffff811115610ccf57600080fd5b803603821315610cde57600080fd5b608060a085015261061d60c085018284610ba4565b600082610d29577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d6360a083018661084c565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610dae578151865260209586019590910190600101610d90565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e4b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e3685835161084c565b94506020938401939190910190600101610dfc565b505050508281036040840152610e618186610d7c565b915050610e72606083018415159052565b95945050505050565b600060208284031215610e8d57600080fd5b815161055d816109b5565b60008251610eaa818460208701610828565b919091019291505056fea264697066735822122075e241dc7d0b3cc5bb3ca3c583250993ad9bf6a64ef50849b87060df5ab2e8e364736f6c634300081a0033a26469706673582212201e74144ec4dff703e3619dd294d201a789b3e96609dba62b03ce2f29a0a8d63964736f6c634300081a0033", } // ZetaConnectorNativeTestABI is the input ABI used to generate the binding from. @@ -2246,9 +2247,9 @@ type ZetaConnectorNativeTestReceivedRevert struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) FilterReceivedRevert(opts *bind.FilterOpts) (*ZetaConnectorNativeTestReceivedRevertIterator, error) { logs, sub, err := _ZetaConnectorNativeTest.contract.FilterLogs(opts, "ReceivedRevert") @@ -2258,9 +2259,9 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) FilterReceivedR return &ZetaConnectorNativeTestReceivedRevertIterator{contract: _ZetaConnectorNativeTest.contract, event: "ReceivedRevert", logs: logs, sub: sub}, nil } -// WatchReceivedRevert is a free log subscription operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// WatchReceivedRevert is a free log subscription operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) WatchReceivedRevert(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeTestReceivedRevert) (event.Subscription, error) { logs, sub, err := _ZetaConnectorNativeTest.contract.WatchLogs(opts, "ReceivedRevert") @@ -2295,9 +2296,9 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) WatchReceivedRe }), nil } -// ParseReceivedRevert is a log parse operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// ParseReceivedRevert is a log parse operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) ParseReceivedRevert(log types.Log) (*ZetaConnectorNativeTestReceivedRevert, error) { event := new(ZetaConnectorNativeTestReceivedRevert) if err := _ZetaConnectorNativeTest.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { @@ -2384,9 +2385,9 @@ type ZetaConnectorNativeTestReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// FilterReverted is a free log retrieval operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*ZetaConnectorNativeTestRevertedIterator, error) { var toRule []interface{} @@ -2405,9 +2406,9 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) FilterReverted( return &ZetaConnectorNativeTestRevertedIterator{contract: _ZetaConnectorNativeTest.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// WatchReverted is a free log subscription operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeTestReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2451,9 +2452,9 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) WatchReverted(o }), nil } -// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// ParseReverted is a log parse operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) ParseReverted(log types.Log) (*ZetaConnectorNativeTestReverted, error) { event := new(ZetaConnectorNativeTestReverted) if err := _ZetaConnectorNativeTest.contract.UnpackLog(event, "Reverted", log); err != nil { @@ -2830,9 +2831,9 @@ type ZetaConnectorNativeTestWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0xa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorNativeTestWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -2847,9 +2848,9 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) FilterWithdrawn return &ZetaConnectorNativeTestWithdrawnAndRevertedIterator{contract: _ZetaConnectorNativeTest.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0xa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeTestWithdrawnAndReverted, to []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2889,9 +2890,9 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) WatchWithdrawnA }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0xa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) ParseWithdrawnAndReverted(log types.Log) (*ZetaConnectorNativeTestWithdrawnAndReverted, error) { event := new(ZetaConnectorNativeTestWithdrawnAndReverted) if err := _ZetaConnectorNativeTest.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { diff --git a/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go b/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go index a977ff50..92559964 100644 --- a/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go +++ b/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go @@ -31,6 +31,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -38,8 +39,8 @@ type RevertContext struct { // ZetaConnectorNonNativeMetaData contains all meta data concerning the ZetaConnectorNonNative contract. var ZetaConnectorNonNativeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"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\"}],\"stateMutability\":\"nonpayable\"},{\"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\":\"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\":\"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\":\"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\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60c060405260001960035534801561001657600080fd5b5060405161178338038061178383398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516114ab6102d86000396000818161021d01528181610531015281816108290152818161099a01528181610aef0152610c110152600081816101d1015281816104a1015281816105040152818161079901526107fc01526114ab6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c578063057e0f25146101a4575b600080fd5b61018f61018a366004610fd3565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b236600461108e565b610462565b005b6101b76101c7366004611126565b6105fc565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d366004611159565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611172565b6106a1565b6101b7610291366004611172565b6106cc565b6101b7610725565b60015460ff1661018f565b6101b76102b736600461119e565b61075a565b6101b76102ca366004611159565b6108ef565b6101b76102dd366004611159565b61095d565b6101b7610a07565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611172565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611172565b610a39565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610aa1565b61049c610aab565b6104c77f00000000000000000000000000000000000000000000000000000000000000008785610aea565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610563907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161130e565b600060405180830381600087803b15801561057d57600080fd5b505af1158015610591573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c878787866040516105e1949392919061137f565b60405180910390a2506105f46001600055565b505050505050565b610604610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062e81610aa1565b610636610aab565b610641848484610aea565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161068991815260200190565b60405180910390a25061069c6001600055565b505050565b6000828152600260205260409020600101546106bc81610aa1565b6106c68383610c72565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461071b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61069c8282610d72565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074f81610aa1565b610757610e31565b50565b610762610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078c81610aa1565b610794610aab565b6107bf7f00000000000000000000000000000000000000000000000000000000000000008684610aea565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610859907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016113b6565b600060405180830381600087803b15801561087357600080fd5b505af1158015610887573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d8686866040516108d593929190611408565b60405180910390a2506108e86001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61091981610aa1565b610921610aab565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610965610aab565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109f357600080fd5b505af11580156108e8573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3181610aa1565b610757610eae565b600082815260026020526040902060010154610a5481610aa1565b6106c68383610d72565b600260005403610a9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107578133610f07565b60015460ff1615610ae8576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7c9190611422565b610b86908461143b565b1115610bbe576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d083390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e39610f97565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610eb6610aab565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e84565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f93576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ae8576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fe557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461101557600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461104057600080fd5b919050565b60008083601f84011261105757600080fd5b50813567ffffffffffffffff81111561106f57600080fd5b60208301915083602082850101111561108757600080fd5b9250929050565b60008060008060008060a087890312156110a757600080fd5b6110b08761101c565b955060208701359450604087013567ffffffffffffffff8111156110d357600080fd5b6110df89828a01611045565b90955093505060608701359150608087013567ffffffffffffffff81111561110657600080fd5b87016060818a03121561111857600080fd5b809150509295509295509295565b60008060006060848603121561113b57600080fd5b6111448461101c565b95602085013595506040909401359392505050565b60006020828403121561116b57600080fd5b5035919050565b6000806040838503121561118557600080fd5b823591506111956020840161101c565b90509250929050565b6000806000806000608086880312156111b657600080fd5b6111bf8661101c565b945060208601359350604086013567ffffffffffffffff8111156111e257600080fd5b6111ee88828901611045565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff6112678261101c565b1682526000602082013567ffffffffffffffff811680821461128857600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126112c457600080fd5b820160208101903567ffffffffffffffff8111156112e157600080fd5b8036038213156112f057600080fd5b60606040860152611305606086018284611200565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061136060a083018587611200565b82810360808401526113728185611249565b9998505050505050505050565b848152606060208201526000611399606083018587611200565b82810360408401526113ab8185611249565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ab608083018486611200565b838152604060208201526000611305604083018486611200565b60006020828403121561143457600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212208052a0b07c987cb20e29d9c7c23109b8ff8b4b966ca2e18c207a88e5b4d79d4264736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"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\"}],\"stateMutability\":\"nonpayable\"},{\"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\":\"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\":\"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\":\"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\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60c060405260001960035534801561001657600080fd5b506040516117aa3803806117aa83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516114d26102d86000396000818161020a015281816105d6015281816108290152818161099a01528181610aef0152610c110152600081816101be01528181610546015281816105a90152818161079901526107fc01526114d26000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b80632ccb404d1161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b80632ccb404d1461025d5780632f2ff15d1461027057600080fd5b8063116191b611610160578063116191b6146101b957806321e093b114610205578063248a9ca31461022c57600080fd5b806301ffc9a71461017c578063106e6290146101a4575b600080fd5b61018f61018a366004610fd3565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611045565b610462565b005b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b61024f61023a366004611078565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761026b3660046110da565b610507565b6101b761027e366004611172565b6106a1565b6101b7610291366004611172565b6106cc565b6101b7610725565b60015460ff1661018f565b6101b76102b736600461119e565b61075a565b6101b76102ca366004611078565b6108ef565b6101b76102dd366004611078565b61095d565b6101b7610a07565b61024f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611172565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61024f600081565b61024f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611172565b610a39565b61024f60035481565b61024f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610aa1565b61049c610aab565b6104a7848484610aea565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5846040516104ef91815260200190565b60405180910390a2506105026001600055565b505050565b61050f610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461053981610aa1565b610541610aab565b61056c7f00000000000000000000000000000000000000000000000000000000000000008785610aea565b6040517f36c99f3b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b90610608907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a90600401611335565b600060405180830381600087803b15801561062257600080fd5b505af1158015610636573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167fa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b8353780178787878660405161068694939291906113a6565b60405180910390a2506106996001600055565b505050505050565b6000828152600260205260409020600101546106bc81610aa1565b6106c68383610c72565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461071b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105028282610d72565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074f81610aa1565b610757610e31565b50565b610762610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078c81610aa1565b610794610aab565b6107bf7f00000000000000000000000000000000000000000000000000000000000000008684610aea565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610859907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016113dd565b600060405180830381600087803b15801561087357600080fd5b505af1158015610887573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d8686866040516108d59392919061142f565b60405180910390a2506108e86001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61091981610aa1565b610921610aab565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610965610aab565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109f357600080fd5b505af11580156108e8573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3181610aa1565b610757610eae565b600082815260026020526040902060010154610a5481610aa1565b6106c68383610d72565b600260005403610a9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107578133610f07565b60015460ff1615610ae8576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7c9190611449565b610b869084611462565b1115610bbe576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d083390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e39610f97565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610eb6610aab565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e84565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f93576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ae8576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fe557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461101557600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461104057600080fd5b919050565b60008060006060848603121561105a57600080fd5b6110638461101c565b95602085013595506040909401359392505050565b60006020828403121561108a57600080fd5b5035919050565b60008083601f8401126110a357600080fd5b50813567ffffffffffffffff8111156110bb57600080fd5b6020830191508360208285010111156110d357600080fd5b9250929050565b60008060008060008060a087890312156110f357600080fd5b6110fc8761101c565b955060208701359450604087013567ffffffffffffffff81111561111f57600080fd5b61112b89828a01611091565b90955093505060608701359150608087013567ffffffffffffffff81111561115257600080fd5b87016080818a03121561116457600080fd5b809150509295509295509295565b6000806040838503121561118557600080fd5b823591506111956020840161101c565b90509250929050565b6000806000806000608086880312156111b657600080fd5b6111bf8661101c565b945060208601359350604086013567ffffffffffffffff8111156111e257600080fd5b6111ee88828901611091565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff6112678261101c565b16825273ffffffffffffffffffffffffffffffffffffffff61128b6020830161101c565b1660208301526000604082013567ffffffffffffffff81168082146112af57600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126112eb57600080fd5b820160208101903567ffffffffffffffff81111561130857600080fd5b80360382131561131757600080fd5b6080606086015261132c608086018284611200565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061138760a083018587611200565b82810360808401526113998185611249565b9998505050505050505050565b8481526060602082015260006113c0606083018587611200565b82810360408401526113d28185611249565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113d2608083018486611200565b83815260406020820152600061132c604083018486611200565b60006020828403121561145b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220276d75628e17e347d14c84f90b610fc13968efff6201b1233b79eeaa7cb742c964736f6c634300081a0033", } // ZetaConnectorNonNativeABI is the input ABI used to generate the binding from. @@ -739,23 +740,23 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactorSession) Withdraw return _ZetaConnectorNonNative.Contract.WithdrawAndCall(&_ZetaConnectorNonNative.TransactOpts, to, amount, data, internalSendHash) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x2ccb404d. // -// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,address,uint64,bytes) revertContext) returns() func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactor) WithdrawAndRevert(opts *bind.TransactOpts, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { return _ZetaConnectorNonNative.contract.Transact(opts, "withdrawAndRevert", to, amount, data, internalSendHash, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x2ccb404d. // -// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,address,uint64,bytes) revertContext) returns() func (_ZetaConnectorNonNative *ZetaConnectorNonNativeSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { return _ZetaConnectorNonNative.Contract.WithdrawAndRevert(&_ZetaConnectorNonNative.TransactOpts, to, amount, data, internalSendHash, revertContext) } -// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x057e0f25. +// WithdrawAndRevert is a paid mutator transaction binding the contract method 0x2ccb404d. // -// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,uint64,bytes) revertContext) returns() +// Solidity: function withdrawAndRevert(address to, uint256 amount, bytes data, bytes32 internalSendHash, (address,address,uint64,bytes) revertContext) returns() func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactorSession) WithdrawAndRevert(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte, revertContext RevertContext) (*types.Transaction, error) { return _ZetaConnectorNonNative.Contract.WithdrawAndRevert(&_ZetaConnectorNonNative.TransactOpts, to, amount, data, internalSendHash, revertContext) } @@ -2015,9 +2016,9 @@ type ZetaConnectorNonNativeWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0xa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorNonNativeWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -2032,9 +2033,9 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) FilterWithdrawnAn return &ZetaConnectorNonNativeWithdrawnAndRevertedIterator{contract: _ZetaConnectorNonNative.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0xa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeWithdrawnAndReverted, to []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2074,9 +2075,9 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) WatchWithdrawnAnd }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0xa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNonNative *ZetaConnectorNonNativeFilterer) ParseWithdrawnAndReverted(log types.Log) (*ZetaConnectorNonNativeWithdrawnAndReverted, error) { event := new(ZetaConnectorNonNativeWithdrawnAndReverted) if err := _ZetaConnectorNonNative.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { diff --git a/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go b/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go index 30b30fa4..abece18c 100644 --- a/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go +++ b/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go @@ -31,6 +31,7 @@ var ( // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { + Sender common.Address Asset common.Address Amount uint64 RevertMessage []byte @@ -65,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\":\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"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\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b506201012e806200003e6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063a783c78911610104578063d509b16c116100a2578063e63ab1e911610071578063e63ab1e914610344578063fa7626d41461036b578063fdca905214610378578063fe574f841461038057600080fd5b8063d509b16c14610324578063dcf7d0371461032c578063de1cb76c14610334578063e20c9f711461033c57600080fd5b8063b5508aa9116100de578063b5508aa9146102f4578063ba414fa6146102fc578063c190997214610314578063ccb0e3f21461031c57600080fd5b8063a783c789146102bd578063aaf74192146102e4578063b0464fdc146102ec57600080fd5b80634934655811610171578063828320141161014b578063828320141461025657806385226c811461025e57806385f438c114610273578063916a17c6146102a857600080fd5b8063493465581461023157806366d9a9a0146102395780637db20efb1461024e57600080fd5b80632ade3880116101ad5780632ade3880146102045780633cba0107146102195780633e5e3c23146102215780633f7286f41461022957600080fd5b80630a9254e4146101d45780631ed7831c146101de5780632506ef03146101fc575b600080fd5b6101dc610388565b005b6101e6610b0b565b6040516101f39190618fae565b60405180910390f35b6101dc610b6d565b61020c610e21565b6040516101f3919061904a565b6101dc610f63565b6101e6611725565b6101e6611785565b6101dc6117e5565b610241611db9565b6040516101f391906191b0565b6101dc611f3b565b6101dc6121da565b610266612436565b6040516101f3919061924e565b61029a7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101f3565b6102b0612506565b6040516101f391906192c5565b61029a7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101dc612601565b6102b061287c565b610266612977565b610304612a47565b60405190151581526020016101f3565b6101dc612b1b565b6101dc612d86565b6101dc6138b2565b6101dc613c07565b6101dc614235565b6101e661495b565b61029a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f546103049060ff1681565b6101dc6149bb565b6101dc614bbf565b60258054307fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155602680546112349083161790556027805461567892168217905560405181906103dd90618ebd565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610410573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260275460255492519086169481019490945260448401929092529092166064820152610501919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052614dac565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061058d90618ecb565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156105c9573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602454602754602554604051938516949283169391831692169061062490618ed9565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610668573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560275460405163ca669fa760e01b815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156106ed57600080fd5b505af1158015610701573d6000803e3d6000fd5b5050602480546027546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b15801561077457600080fd5b505af1158015610788573d6000803e3d6000fd5b5050505060405161079890618ee7565b604051809103906000f0801580156107b4573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561086057600080fd5b505af1158015610874573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156108ea57600080fd5b505af11580156108fe573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561096457600080fd5b505af1158015610978573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b1580156109de57600080fd5b505af11580156109f2573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a5457600080fd5b505af1158015610a68573d6000803e3d6000fd5b5050604080516060810182526024546001600160a01b039081168252600160208084019182528451908101855260008152938301849052825160288054925167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090931691909316171781559093509150602990610b06908261941f565b505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610b6357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b45575b5050505050905090565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610c0857600080fd5b505af1158015610c1c573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015610cf057600080fd5b505af1158015610d04573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015610d8d57600080fd5b505af1158015610da1573d6000803e3d6000fd5b50506023546021546001600160a01b03918216935063057e0f25925016610dc985600161950d565b8460286040518563ffffffff1660e01b8152600401610deb94939291906195f5565b600060405180830381600087803b158015610e0557600080fd5b505af1158015610e19573d6000803e3d6000fd5b505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610f5a57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610f43578382906000526020600020018054610eb69061938b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee29061938b565b8015610f2f5780601f10610f0457610100808354040283529160200191610f2f565b820191906000526020600020905b815481529060010190602001808311610f1257829003601f168201915b505050505081526020019060010190610e97565b505050508152505081526020019060010190610e45565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa15801561103e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110629190619636565b905061106f816000614dcb565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156110bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e39190619636565b90506110f0816000614dcb565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916111d7916001600160a01b039190911690600090869060040161964f565b600060405180830381600087803b1580156111f157600080fd5b505af1158015611205573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561129757600080fd5b505af11580156112ab573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561139a57600080fd5b505af11580156113ae573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d91506113f39089908890619677565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561145457600080fd5b505af1158015611468573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506114c092909116908a9089908b90600401619690565b600060405180830381600087803b1580156114da57600080fd5b505af11580156114ee573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611540573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115649190619636565b90506115708188614dcb565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156115c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e49190619636565b90506115f1816000614dcb565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa158015611667573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168b9190619636565b9050611698816000614dcb565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa1580156116e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170c9190619636565b9050611719816000614dcb565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610b63576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610b45575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610b63576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610b45575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a082319361188693921691016001600160a01b0391909116815260200190565b602060405180830381865afa1580156118a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c79190619636565b90506118d4816000614dcb565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611924573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119489190619636565b9050611955816000614dcb565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611a3c916001600160a01b039190911690600090869060040161964f565b600060405180830381600087803b158015611a5657600080fd5b505af1158015611a6a573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611afc57600080fd5b505af1158015611b10573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611be257600080fd5b505af1158015611bf6573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d9150611c3b9089908890619677565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611c9c57600080fd5b505af1158015611cb0573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611d0892909116908a9089908b90600401619690565b600060405180830381600087803b158015611d2257600080fd5b505af1158015611d36573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611d88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dac9190619636565b9050611570816000614dcb565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610f5a5783829060005260206000209060020201604051806040016040529081600082018054611e109061938b565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3c9061938b565b8015611e895780601f10611e5e57610100808354040283529160200191611e89565b820191906000526020600020905b815481529060010190602001808311611e6c57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611f2357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611ed05790505b50505050508152505081526020019060010190611ddd565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611f9957600080fd5b505af1158015611fad573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b15801561201057600080fd5b505af1158015612024573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561208157600080fd5b505af1158015612095573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561211e57600080fd5b505af1158015612132573d6000803e3d6000fd5b50506023546021546001600160a01b03918216935063106e629092501661215a84600161950d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039092166004830152602482015260006044820152606401600060405180830381600087803b1580156121bf57600080fd5b505af11580156121d3573d6000803e3d6000fd5b5050505050565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561227757600080fd5b505af115801561228b573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061237691906004016196c9565b600060405180830381600087803b15801561239057600080fd5b505af11580156123a4573d6000803e3d6000fd5b50506023546021546040517f057e0f250000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063057e0f2593506123ff92909116908790869088906028906004016196dc565b600060405180830381600087803b15801561241957600080fd5b505af115801561242d573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610f5a5783829060005260206000200180546124799061938b565b80601f01602080910402602001604051908101604052809291908181526020018280546124a59061938b565b80156124f25780601f106124c7576101008083540402835291602001916124f2565b820191906000526020600020905b8154815290600101906020018083116124d557829003601f168201915b50505050508152602001906001019061245a565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610f5a5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156125e957602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116125965790505b5050505050815250508152602001906001019061252a565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561269c57600080fd5b505af11580156126b0573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b15801561271357600080fd5b505af1158015612727573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561278457600080fd5b505af1158015612798573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561282157600080fd5b505af1158015612835573d6000803e3d6000fd5b50506023546021546001600160a01b039182169350635e3e9fef92501661285d85600161950d565b846040518463ffffffff1660e01b8152600401610deb93929190619728565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610f5a5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561295f57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161290c5790505b505050505081525050815260200190600101906128a0565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610f5a5783829060005260206000200180546129ba9061938b565b80601f01602080910402602001604051908101604052809291908181526020018280546129e69061938b565b8015612a335780601f10612a0857610100808354040283529160200191612a33565b820191906000526020600020905b815481529060010190602001808311612a1657829003601f168201915b50505050508152602001906001019061299b565b60085460009060ff1615612a5f575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b149190619636565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612c0157600080fd5b505af1158015612c15573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612d0091906004016196c9565b600060405180830381600087803b158015612d1a57600080fd5b505af1158015612d2e573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506123ff9290911690879086908890600401619690565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612de757600080fd5b505af1158015612dfb573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612ee691906004016196c9565b600060405180830381600087803b158015612f0057600080fd5b505af1158015612f14573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612f6857600080fd5b505af1158015612f7c573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612fd957600080fd5b505af1158015612fed573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506130d891906004016196c9565b600060405180830381600087803b1580156130f257600080fd5b505af1158015613106573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561315a57600080fd5b505af115801561316e573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156131cb57600080fd5b505af11580156131df573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561323357600080fd5b505af1158015613247573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156132d057600080fd5b505af11580156132e4573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561334157600080fd5b505af1158015613355573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b1580156133c957600080fd5b505af11580156133dd573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561343a57600080fd5b505af115801561344e573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156134a257600080fd5b505af11580156134b6573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613508573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061352c9190619636565b9050613539816000614dcb565b6026546040516001600160a01b039091166024820152604481018490526064810183905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613620916001600160a01b039190911690600090869060040161964f565b600060405180830381600087803b15801561363a57600080fd5b505af115801561364e573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156136e057600080fd5b505af11580156136f4573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561379357600080fd5b505af11580156137a7573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e629091506064015b600060405180830381600087803b15801561381c57600080fd5b505af1158015613830573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015613882573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138a69190619636565b90506121d38186614dcb565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa158015613907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392b9190619636565b9050613938816000614dcb565b6026546040516001600160a01b0390911660248201526044810183905260006064820181905290819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613a21916001600160a01b039190911690600090869060040161964f565b600060405180830381600087803b158015613a3b57600080fd5b505af1158015613a4f573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613ae157600080fd5b505af1158015613af5573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613b9457600080fd5b505af1158015613ba8573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018790529116925063106e62909150606401613802565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015613ce2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d069190619636565b9050613d13816000614dcb565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d879190619636565b9050613d94816000614dcb565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613e7b916001600160a01b039190911690600090869060040161964f565b600060405180830381600087803b158015613e9557600080fd5b505af1158015613ea9573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613f3b57600080fd5b505af1158015613f4f573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050613f8d600289619761565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561405557600080fd5b505af1158015614069573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d91506140ae9089908890619677565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561410f57600080fd5b505af1158015614123573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061417b92909116908a9089908b90600401619690565b600060405180830381600087803b15801561419557600080fd5b505af11580156141a9573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156141fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061421f9190619636565b90506115708161423060028a619761565b614dcb565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa1580156142ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ee9190619636565b90506142fb816000614dcb565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561434b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061436f9190619636565b6020546040516001600160a01b039091166024820152604481018790526064810186905290915060009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614459916001600160a01b039190911690600090869060040161964f565b600060405180830381600087803b15801561447357600080fd5b505af1158015614487573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561451957600080fd5b505af115801561452d573d6000803e3d6000fd5b50506020546040517f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e935061457192506001600160a01b039091169060289061979c565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561460757600080fd5b505af115801561461b573d6000803e3d6000fd5b50506024546021546040516001600160a01b039283169450911691507f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143690614669908a9089906028906197be565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156146ff57600080fd5b505af1158015614713573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c915061475b90899088906028906197be565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156147bc57600080fd5b505af11580156147d0573d6000803e3d6000fd5b50506023546021546040517f057e0f250000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063057e0f25935061482b92909116908a9089908b906028906004016196dc565b600060405180830381600087803b15801561484557600080fd5b505af1158015614859573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156148ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148cf9190619636565b90506148db8188614dcb565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561492b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061494f9190619636565b90506115f18185614dcb565b60606015805480602002602001604051908101604052809291908181526020018280548015610b63576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610b45575050505050905090565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614a1457600080fd5b505af1158015614a28573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614b1391906004016196c9565b600060405180830381600087803b158015614b2d57600080fd5b505af1158015614b41573d6000803e3d6000fd5b50506023546040517f6f8b44b000000000000000000000000000000000000000000000000000000000815261271060048201526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015614ba557600080fd5b505af1158015614bb9573d6000803e3d6000fd5b50505050565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614c2057600080fd5b505af1158015614c34573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614d1f91906004016196c9565b600060405180830381600087803b158015614d3957600080fd5b505af1158015614d4d573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401610deb565b6000614db6618ef5565b614dc1848483614e4a565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614e3657600080fd5b505afa158015610e19573d6000803e3d6000fd5b600080614e578584614ec5565b9050614eba6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614ea59291906197e9565b60405160208183030381529060405285614ed1565b9150505b9392505050565b6000614ebe8383614eff565b60c08101515160009015614ef557614eee84848460c00151614f1a565b9050614ebe565b614eee84846150c0565b6000614f0b83836151ab565b614ebe83836020015184614ed1565b600080614f256151bb565b90506000614f33868361528e565b90506000614f4a8260600151836020015185615734565b90506000614f5a83838989615946565b90506000614f67826167c3565b602081015181519192509060030b15614fda57898260400151604051602001614f9192919061980b565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252614fd1916004016196c9565b60405180910390fd5b600061501d6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001616992565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906150709084906004016196c9565b602060405180830381865afa15801561508d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150b1919061988c565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906151159087906004016196c9565b600060405180830381865afa158015615132573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261515a919081019061996e565b9050600061518882856040516020016151749291906199a3565b604051602081830303815290604052616b92565b90506001600160a01b038116614dc1578484604051602001614f919291906199d2565b6151b782826000616ba5565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90615242908490600401619a7d565b600060405180830381865afa15801561525f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152879190810190619ac4565b9250505090565b6152c06040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d905061530b6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61531485616ca8565b602082015260006153248661708d565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615366573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261538e9190810190619ac4565b868385602001516040516020016153a89493929190619b0d565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906154009085906004016196c9565b600060405180830381865afa15801561541d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154459190810190619ac4565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061548d908490600401619c11565b602060405180830381865afa1580156154aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906154ce9190619c63565b6154e35781604051602001614f919190619c85565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615528908490600401619d17565b600060405180830381865afa158015615545573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261556d9190810190619ac4565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906155b4908490600401619d69565b602060405180830381865afa1580156155d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906155f59190619c63565b1561568a576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061563f908490600401619d69565b600060405180830381865afa15801561565c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156849190810190619ac4565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016156af9190619dbb565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016156db929190619e27565b600060405180830381865afa1580156156f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157209190810190619ac4565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816157505790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106157b0576157b0619e4c565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061580457615804619e4c565b6020026020010181905250846040516020016158209190619e7b565b6040516020818303038152906040528160028151811061584257615842619e4c565b60200260200101819052508260405160200161585e9190619ee7565b6040516020818303038152906040528160038151811061588057615880619e4c565b60200260200101819052506000615896826167c3565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506159279060408051808201825260008082526020918201528151808301909252845182528085019082015290617310565b61593c5785604051602001614f919190619f28565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015615996565b511590565b615b0a57826020015115615a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401614fd1565b8260c0015115615b0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401614fd1565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615b2357905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615b7e90619fb9565b935060ff1681518110615b9357615b93619e4c565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615be49190619fd8565b604051602081830303815290604052828280615bff90619fb9565b935060ff1681518110615c1457615c14619e4c565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615c6190619fb9565b935060ff1681518110615c7657615c76619e4c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615cc390619fb9565b935060ff1681518110615cd857615cd8619e4c565b60200260200101819052508760200151828280615cf490619fb9565b935060ff1681518110615d0957615d09619e4c565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615d5690619fb9565b935060ff1681518110615d6b57615d6b619e4c565b602090810291909101015287518282615d8381619fb9565b935060ff1681518110615d9857615d98619e4c565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615de590619fb9565b935060ff1681518110615dfa57615dfa619e4c565b6020026020010181905250615e0e46617371565b8282615e1981619fb9565b935060ff1681518110615e2e57615e2e619e4c565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615e7b90619fb9565b935060ff1681518110615e9057615e90619e4c565b602002602001018190525086828280615ea890619fb9565b935060ff1681518110615ebd57615ebd619e4c565b6020908102919091010152855115615fe45760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615f0e81619fb9565b935060ff1681518110615f2357615f23619e4c565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615f739089906004016196c9565b600060405180830381865afa158015615f90573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615fb89190810190619ac4565b8282615fc381619fb9565b935060ff1681518110615fd857615fd8619e4c565b60200260200101819052505b8460200151156160b45760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261602d81619fb9565b935060ff168151811061604257616042619e4c565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061608f90619fb9565b935060ff16815181106160a4576160a4619e4c565b602002602001018190525061627b565b6160ec6159918660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61617f5760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261612f81619fb9565b935060ff168151811061614457616144619e4c565b60200260200101819052508460a001516040516020016161649190619e7b565b60405160208183030381529060405282828061608f90619fb9565b8460c001511580156161c25750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526161c090511590565b155b1561627b5760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261620681619fb9565b935060ff168151811061621b5761621b619e4c565b602002602001018190525061622f88617411565b60405160200161623f9190619e7b565b60405160208183030381529060405282828061625a90619fb9565b935060ff168151811061626f5761626f619e4c565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526162af90511590565b6163445760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826162f281619fb9565b935060ff168151811061630757616307619e4c565b6020026020010181905250846040015182828061632390619fb9565b935060ff168151811061633857616338619e4c565b60200260200101819052505b6060850151156164655760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261638d81619fb9565b935060ff16815181106163a2576163a2619e4c565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616411573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164399190810190619ac4565b828261644481619fb9565b935060ff168151811061645957616459619e4c565b60200260200101819052505b60e0850151511561650c5760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826164af81619fb9565b935060ff16815181106164c4576164c4619e4c565b60200260200101819052506164e08560e0015160000151617371565b82826164eb81619fb9565b935060ff168151811061650057616500619e4c565b60200260200101819052505b60e085015160200151156165b65760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261655981619fb9565b935060ff168151811061656e5761656e619e4c565b602002602001018190525061658a8560e0015160200151617371565b828261659581619fb9565b935060ff16815181106165aa576165aa619e4c565b60200260200101819052505b60e085015160400151156166605760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261660381619fb9565b935060ff168151811061661857616618619e4c565b60200260200101819052506166348560e0015160400151617371565b828261663f81619fb9565b935060ff168151811061665457616654619e4c565b60200260200101819052505b60e0850151606001511561670a5760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826166ad81619fb9565b935060ff16815181106166c2576166c2619e4c565b60200260200101819052506166de8560e0015160600151617371565b82826166e981619fb9565b935060ff16815181106166fe576166fe619e4c565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156167285761672861935c565b60405190808252806020026020018201604052801561675b57816020015b60608152602001906001900390816167465790505b50905060005b8260ff168160ff1610156167b457838160ff168151811061678457616784619e4c565b6020026020010151828260ff16815181106167a1576167a1619e4c565b6020908102919091010152600101616761565b5093505050505b949350505050565b6167ea6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916168709186910161a043565b600060405180830381865afa15801561688d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168b59190810190619ac4565b905060006168c38683617f00565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016168f3919061924e565b6000604051808303816000875af1158015616912573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261693a919081019061a08a565b805190915060030b158015906169535750602081015151155b80156169625750604081015151155b1561593c578160008151811061697a5761697a619e4c565b6020026020010151604051602001614f91919061a140565b606060006169c78560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506169fe9082905b90618055565b15616b5b576000616a7b82616a7584616a6f616a418a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061807c565b906180de565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616adf908290618055565b15616b4957604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b46905b8290618163565b90505b616b5281618189565b92505050614ebe565b8215616b74578484604051602001614f9192919061a32c565b5050604080516020810190915260008152614ebe565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616bb457505050565b6000616bc18484846181f2565b90506000616bce826167c3565b602081015181519192509060030b158015616c6a5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c6a906040805180820182526000808252602091820152815180830190925284518252808501908201526169f8565b15616c7757505050505050565b60408201515115616c97578160400151604051602001614f91919061a3d3565b80604051602001614f91919061a431565b60606000616cdd8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616d42905b8290617310565b15616db157604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614ebe90616dac90839061878d565b618189565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e13905b8290618817565b600103616ee057604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e7990616b3f565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614ebe90616dac905b8390618163565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f3f90616d3b565b1561707657604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616fa79083906188b1565b905060008160018351616fba919061a49c565b81518110616fca57616fca619e4c565b6020026020010151905061706d616dac6170406040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061878d565b95945050505050565b82604051602001614f91919061a4af565b50919050565b606060006170c28360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061712490616d3b565b1561713257614ebe81618189565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261719190616e0c565b6001036171fb57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614ebe90616dac90616ed9565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261725a90616d3b565b1561707657604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906172c29083906188b1565b90506001815111156172fe5780600282516172dd919061a49c565b815181106172ed576172ed619e4c565b602002602001015192505050919050565b5082604051602001614f91919061a4af565b80518251600091111561732557506000614dc5565b8151835160208501516000929161733b9161950d565b617345919061a49c565b90508260200151810361735c576001915050614dc5565b82516020840151819020912014905092915050565b6060600061737e83618956565b600101905060008167ffffffffffffffff81111561739e5761739e61935c565b6040519080825280601f01601f1916602001820160405280156173c8576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846173d257509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161749d905b8290618a38565b156174dd57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261753c90617496565b1561757c57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175db90617496565b1561761b57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261767a90617496565b806176df5750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176df90617496565b1561771f57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261777e90617496565b806177e35750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177e390617496565b1561782357505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261788290617496565b806178e75750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178e790617496565b1561792757505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261798690617496565b806179eb5750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179eb90617496565b15617a2b57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a8a90617496565b15617aca57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b2990617496565b15617b6957505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617bc890617496565b15617c0857505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c6790617496565b15617ca757505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d0690617496565b15617d4657505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617da590617496565b80617e0a5750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e0a90617496565b15617e4a57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ea990617496565b15617ee957505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614f91929060200161a58d565b60608060005b8451811015617f8b5781858281518110617f2257617f22619e4c565b6020026020010151604051602001617f3b9291906199a3565b604051602081830303815290604052915060018551617f5a919061a49c565b8114617f835781604051602001617f71919061a6f6565b60405160208183030381529060405291505b600101617f06565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617fa45790505090508381600081518110617fcf57617fcf619e4c565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061802357618023619e4c565b6020026020010181905250818160028151811061804257618042619e4c565b6020908102919091010152949350505050565b60208083015183518351928401516000936180739291849190618a4c565b14159392505050565b604080518082019091526000808252602082015260006180ae8460000151856020015185600001518660200151618b5d565b90508360200151816180c0919061a49c565b845185906180cf90839061a49c565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015618103575081614dc5565b602080830151908401516001911461812a5750815160208481015190840151829020919020145b801561815b5782518451859061814190839061a49c565b905250825160208501805161815790839061950d565b9052505b509192915050565b6040805180820190915260008082526020820152618182838383618c7d565b5092915050565b60606000826000015167ffffffffffffffff8111156181aa576181aa61935c565b6040519080825280601f01601f1916602001820160405280156181d4576020820181803683370190505b50905060006020820190506181828185602001518660000151618d28565b606060006181fe6151bb565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161821b57905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061827690619fb9565b935060ff168151811061828b5761828b619e4c565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016182dc919061a737565b6040516020818303038152906040528282806182f790619fb9565b935060ff168151811061830c5761830c619e4c565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061835990619fb9565b935060ff168151811061836e5761836e619e4c565b60200260200101819052508260405160200161838a9190619ee7565b6040516020818303038152906040528282806183a590619fb9565b935060ff16815181106183ba576183ba619e4c565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061840790619fb9565b935060ff168151811061841c5761841c619e4c565b60200260200101819052506184318784618da2565b828261843c81619fb9565b935060ff168151811061845157618451619e4c565b6020908102919091010152855151156184fd5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826184a381619fb9565b935060ff16815181106184b8576184b8619e4c565b60200260200101819052506184d1866000015184618da2565b82826184dc81619fb9565b935060ff16815181106184f1576184f1619e4c565b60200260200101819052505b85608001511561856b5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261854681619fb9565b935060ff168151811061855b5761855b619e4c565b60200260200101819052506185d1565b84156185d15760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826185b081619fb9565b935060ff16815181106185c5576185c5619e4c565b60200260200101819052505b6040860151511561866d5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261861b81619fb9565b935060ff168151811061863057618630619e4c565b6020026020010181905250856040015182828061864c90619fb9565b935060ff168151811061866157618661619e4c565b60200260200101819052505b8560600151156186d75760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826186b681619fb9565b935060ff16815181106186cb576186cb619e4c565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156186f5576186f561935c565b60405190808252806020026020018201604052801561872857816020015b60608152602001906001900390816187135790505b50905060005b8260ff168160ff16101561878157838160ff168151811061875157618751619e4c565b6020026020010151828260ff168151811061876e5761876e619e4c565b602090810291909101015260010161872e565b50979650505050505050565b60408051808201909152600080825260208201528151835110156187b2575081614dc5565b815183516020850151600092916187c89161950d565b6187d2919061a49c565b602084015190915060019082146187f3575082516020840151819020908220145b801561880e5783518551869061880a90839061a49c565b9052505b50929392505050565b600080826000015161883b8560000151866020015186600001518760200151618b5d565b618845919061950d565b90505b83516020850151618859919061950d565b811161818257816188698161a77c565b92505082600001516188a0856020015183618884919061a49c565b8651618890919061a49c565b8386600001518760200151618b5d565b6188aa919061950d565b9050618848565b606060006188bf8484618817565b6188ca90600161950d565b67ffffffffffffffff8111156188e2576188e261935c565b60405190808252806020026020018201604052801561891557816020015b60608152602001906001900390816189005790505b50905060005b8151811015616b8a57618931616dac8686618163565b82828151811061894357618943619e4c565b602090810291909101015260010161891b565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061899f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106189cb576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106189e957662386f26fc10000830492506010015b6305f5e1008310618a01576305f5e100830492506008015b6127108310618a1557612710830492506004015b60648310618a27576064830492506002015b600a8310614dc55760010192915050565b6000618a448383618de2565b159392505050565b600080858411618b535760208411618aff5760008415618a97576001618a7386602061a49c565b618a7e90600861a796565b618a8990600261a894565b618a93919061a49c565b1990505b8351811685618aa6898961950d565b618ab0919061a49c565b805190935082165b818114618aea57878411618ad257879450505050506167bb565b83618adc8161a8a0565b945050828451169050618ab8565b618af4878561950d565b9450505050506167bb565b838320618b0c858861a49c565b618b16908761950d565b91505b858210618b5157848220808203618b3e57618b34868461950d565b93505050506167bb565b618b4960018461a49c565b925050618b19565b505b5092949350505050565b60008381868511618c685760208511618c175760008515618ba9576001618b8587602061a49c565b618b9090600861a796565b618b9b90600261a894565b618ba5919061a49c565b1990505b84518116600087618bba8b8b61950d565b618bc4919061a49c565b855190915083165b828114618c0957818610618bf157618be48b8b61950d565b96505050505050506167bb565b85618bfb8161a77c565b965050838651169050618bcc565b8596505050505050506167bb565b508383206000905b618c29868961a49c565b8211618c6657858320808203618c4557839450505050506167bb565b618c5060018561950d565b9350508180618c5e9061a77c565b925050618c1f565b505b618c72878761950d565b979650505050505050565b60408051808201909152600080825260208201526000618caf8560000151866020015186600001518760200151618b5d565b602080870180519186019190915251909150618ccb908261a49c565b835284516020860151618cde919061950d565b8103618ced5760008552618d1f565b83518351618cfb919061950d565b85518690618d0a90839061a49c565b9052508351618d19908261950d565b60208601525b50909392505050565b60208110618d605781518352618d3f60208461950d565b9250618d4c60208361950d565b9150618d5960208261a49c565b9050618d28565b6000198115618d8f576001618d7683602061a49c565b618d829061010061a894565b618d8c919061a49c565b90505b9151835183169219169190911790915250565b60606000618db0848461528e565b8051602080830151604051939450618dca9390910161a8b7565b60405160208183030381529060405291505092915050565b8151815160009190811115618df5575081515b6020808501519084015160005b83811015618eae5782518251808214618e7e576000196020871015618e5d57600184618e2f89602061a49c565b618e39919061950d565b618e4490600861a796565b618e4f90600261a894565b618e59919061a49c565b1990505b8181168382168181039114618e7b579750614dc59650505050505050565b50505b618e8960208661950d565b9450618e9660208561950d565b93505050602081618ea7919061950d565b9050618e02565b508451865161593c919061a90f565b6112a6806200a93083390190565b611eb9806200bbd683390190565b611783806200da8f83390190565b610ee7806200f21283390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618f38618f3d565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618f386040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015618fef5783516001600160a01b0316835260209384019390920191600101618fc8565b509095945050505050565b60005b83811015619015578181015183820152602001618ffd565b50506000910152565b60008151808452619036816020860160208601618ffa565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619146577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561912c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261911684865161901e565b60209586019590945092909201916001016190dc565b509197505050602094850194929092019150600101619072565b50929695505050505050565b600081518084526020840193506020830160005b828110156191a65781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101619166565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619146577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261921c604088018261901e565b90506020820151915086810360208801526192378183619152565b9650505060209384019391909101906001016191d8565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619146577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526192b085835161901e565b94506020938401939190910190600101619276565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619146577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526193466040870182619152565b95505060209384019391909101906001016192ed565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061939f57607f821691505b602082108103617087577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610b0657806000526020600020601f840160051c810160208510156193ff5750805b601f840160051c820191505b818110156121d3576000815560010161940b565b815167ffffffffffffffff8111156194395761943961935c565b61944d81619447845461938b565b846193d8565b6020601f82116001811461948157600083156194695750848201515b600019600385901b1c1916600184901b1784556121d3565b600084815260208120601f198516915b828110156194b15787850151825560209485019460019092019101619491565b50848210156194cf5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115614dc557614dc56194de565b600081546001600160a01b038116845267ffffffffffffffff8160a01c1660208501525060018201606060408501526000815461955c8161938b565b806060880152600182166000811461957b57600181146195b5576195e9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166080890152608082151560051b89010193506195e9565b84600052602060002060005b838110156195e05781548a8201608001526001909101906020016195c1565b89016080019450505b50919695505050505050565b6001600160a01b038516815283602082015260a06040820152600061961d60a083018561901e565b600060608401528281036080840152618c728185619520565b60006020828403121561964857600080fd5b5051919050565b6001600160a01b038416815282602082015260606040820152600061706d606083018461901e565b8281526040602082015260006167bb604083018461901e565b6001600160a01b03851681528360208201526080604082015260006196b8608083018561901e565b905082606083015295945050505050565b602081526000614ebe602083018461901e565b6001600160a01b038616815284602082015260a06040820152600061970460a083018661901e565b846060840152828103608084015261971c8185619520565b98975050505050505050565b6001600160a01b0384168152826020820152608060408201526000619750608083018461901e565b905060006060830152949350505050565b600082619797577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006167bb6040830184619520565b8381526060602082015260006197d7606083018561901e565b828103604084015261593c8185619520565b6001600160a01b03831681526040602082015260006167bb604083018461901e565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161984381601a850160208801618ffa565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161988081601c840160208801618ffa565b01601c01949350505050565b60006020828403121561989e57600080fd5b81516001600160a01b0381168114614ebe57600080fd5b6040516060810167ffffffffffffffff811182821017156198d8576198d861935c565b60405290565b60008067ffffffffffffffff8411156198f9576198f961935c565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156199285761992861935c565b60405283815290508082840185101561994057600080fd5b616b8a846020830185618ffa565b600082601f83011261995f57600080fd5b614ebe838351602085016198de565b60006020828403121561998057600080fd5b815167ffffffffffffffff81111561999757600080fd5b614dc18482850161994e565b600083516199b5818460208801618ffa565b8351908301906199c9818360208801618ffa565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351619a0a81601a850160208801618ffa565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351619a47816033840160208801618ffa565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614ebe608083018461901e565b600060208284031215619ad657600080fd5b815167ffffffffffffffff811115619aed57600080fd5b8201601f81018413619afe57600080fd5b614dc1848251602084016198de565b60008551619b1f818460208a01618ffa565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619b59816001840160208a01618ffa565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451619b97816002840160208901618ffa565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619bd9816002840160208801618ffa565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000619c24604083018461901e565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b600060208284031215619c7557600080fd5b81518015158114614ebe57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251619cbd81601f850160208701618ffa565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000619d2a604083018461901e565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000619d7c604083018461901e565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619df3816014850160208701618ffa565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000619e3a604083018561901e565b8281036020840152614eba818561901e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619eb3816001850160208701618ffa565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619ef9818460208701618ffa565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619fac81604b850160208701618ffa565b91909101604b0192915050565b600060ff821660ff8103619fcf57619fcf6194de565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161a036816029850160208701618ffa565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614ebe608083018461901e565b60006020828403121561a09c57600080fd5b815167ffffffffffffffff81111561a0b357600080fd5b82016060818503121561a0c557600080fd5b61a0cd6198b5565b81518060030b811461a0de57600080fd5b8152602082015167ffffffffffffffff81111561a0fa57600080fd5b61a1068682850161994e565b602083015250604082015167ffffffffffffffff81111561a12657600080fd5b61a1328682850161994e565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a19e816021850160208701618ffa565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a38a816021850160208801618ffa565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a3c781602e840160208801618ffa565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161a036816029850160208701618ffa565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a48f816022850160208701618ffa565b9190910160220192915050565b81810381811115614dc557614dc56194de565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a4e781600e850160208701618ffa565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a5c5816018850160208801618ffa565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a60281601c840160208801618ffa565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a708818460208701618ffa565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a76f81601c850160208701618ffa565b91909101601c0192915050565b6000600019820361a78f5761a78f6194de565b5060010190565b8082028115828204841417614dc557614dc56194de565b6001815b600184111561a7e85780850481111561a7cc5761a7cc6194de565b600184161561a7da57908102905b60019390931c92800261a7b1565b935093915050565b60008261a7ff57506001614dc5565b8161a80c57506000614dc5565b816001811461a822576002811461a82c5761a848565b6001915050614dc5565b60ff84111561a83d5761a83d6194de565b50506001821b614dc5565b5060208310610133831016604e8410600b841016171561a86b575081810a614dc5565b61a878600019848461a7ad565b806000190482111561a88c5761a88c6194de565b029392505050565b6000614ebe838361a7f0565b60008161a8af5761a8af6194de565b506000190190565b6000835161a8c9818460208801618ffa565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a903816001840160208801618ffa565b01600101949350505050565b8181036000831280158383131683831282161715618182576181826194de56fe608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122001ec0ce060384773f3d3389fab7bed652c6b8ee389a7471cce10d00d87a75a0c64736f6c634300081a003360a060405234801561001057600080fd5b50604051611eb9380380611eb983398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611e998339815191528261014c565b50610143600080516020611e998339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b608051611c22610277600039600081816101ca01528181610597015281816105f901528181610a280152610a8a0152611c226000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806385f438c1116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103fc578063e63ab1e91461040f578063eab103df1461043657600080fd5b8063d547741f146103b3578063d936547e146103c6578063d9caed12146103e957600080fd5b80639b19251a116100bd5780639b19251a14610385578063a217fddf14610398578063c709ab6e146103a057600080fd5b806385f438c11461030557806391d148541461032c5780639a5904271461037257600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102d25780635c975abb146102f25780638456cb59146102fd57600080fd5b806336568abe146102905780633f4ba83a146102a3578063570618e1146102ab57600080fd5b8063248a9ca311610176578063248a9ca314610226578063252f07bf146102585780632f2ff15d1461027d57600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610211575b600080fd5b6101b06101ab3660046115ca565b610449565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b61022461021f366004611677565b6104e2565b005b61024a6102343660046116ea565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61022461028b366004611703565b6106e3565b61022461029e366004611703565b61070f565b61022461076d565b61024a7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff166101b0565b6102246107a2565b61024a7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b061033a366004611703565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610224610380366004611733565b6107d4565b610224610393366004611733565b6108a2565b61024a600081565b6102246103ae366004611750565b610973565b6102246103c1366004611703565b610b79565b6101b06103d4366004611733565b60036020526000908152604090205460ff1681565b6102246103f73660046117f3565b610b9f565b61022461040a366004611834565b610ccb565b61024a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102246104443660046118d3565b610f2b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104dc57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104ea610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461051481610fc4565b61051c610fce565b73ffffffffffffffffffffffffffffffffffffffff851660009081526003602052604090205460ff1661057b576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bc73ffffffffffffffffffffffffffffffffffffffff86167f00000000000000000000000000000000000000000000000000000000000000008661100d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106369088908a90899089908990600401611939565b600060405180830381600087803b15801561065057600080fd5b505af1158015610664573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d58686866040516106c993929190611996565b60405180910390a3506106dc6001600055565b5050505050565b600082815260016020819052604090912001546106ff81610fc4565b610709838361108e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461075e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610768828261113b565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61079781610fc4565b61079f6111dc565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107cc81610fc4565b61079f61123b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107fe81610fc4565b73ffffffffffffffffffffffffffffffffffffffff821661084b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6108cc81610fc4565b73ffffffffffffffffffffffffffffffffffffffff8216610919576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61097b610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109a581610fc4565b6109ad610fce565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610a0c576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a4d73ffffffffffffffffffffffffffffffffffffffff87167f00000000000000000000000000000000000000000000000000000000000000008761100d565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610ac99089908b908a908a908a908a90600401611a77565b600060405180830381600087803b158015610ae357600080fd5b505af1158015610af7573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b87878787604051610b5e9493929190611ae8565b60405180910390a350610b716001600055565b505050505050565b60008281526001602081905260409091200154610b9581610fc4565b610709838361113b565b610ba7610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610bd181610fc4565b610bd9610fce565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205460ff16610c38576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5973ffffffffffffffffffffffffffffffffffffffff8416858461100d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610cb891815260200190565b60405180910390a3506107686001600055565b610cd3610f81565b610cdb610fce565b60045474010000000000000000000000000000000000000000900460ff16610d2f576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610d8e576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8616906370a0823190602401602060405180830381865afa158015610dfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1f9190611b14565b9050610e4373ffffffffffffffffffffffffffffffffffffffff8616333087611278565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efb9190611b14565b610f059190611b2d565b8787604051610f18959493929190611b67565b60405180910390a250610b716001600055565b6000610f3681610fc4565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610fbd576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61079f81336112be565b60025460ff161561100b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261076891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061134f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661113357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104dc565b5060006104dc565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561113357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104dc565b6111e46113e5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611243610fce565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112113390565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526107099186918216906323b872dd90608401611047565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661134b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b600061137173ffffffffffffffffffffffffffffffffffffffff841683611421565b905080516000141580156113965750808060200190518101906113949190611ba0565b155b15610768576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401611342565b60025460ff1661100b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061142f83836000611436565b9392505050565b606081471015611474576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611342565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161149d9190611bbd565b60006040518083038185875af1925050503d80600081146114da576040519150601f19603f3d011682016040523d82523d6000602084013e6114df565b606091505b50915091506114ef8683836114f9565b9695505050505050565b60608261150e5761150982611588565b61142f565b8151158015611532575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611581576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401611342565b508061142f565b8051156115985780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156115dc57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461142f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461079f57600080fd5b60008083601f84011261164057600080fd5b50813567ffffffffffffffff81111561165857600080fd5b60208301915083602082850101111561167057600080fd5b9250929050565b60008060008060006080868803121561168f57600080fd5b853561169a8161160c565b945060208601356116aa8161160c565b935060408601359250606086013567ffffffffffffffff8111156116cd57600080fd5b6116d98882890161162e565b969995985093965092949392505050565b6000602082840312156116fc57600080fd5b5035919050565b6000806040838503121561171657600080fd5b8235915060208301356117288161160c565b809150509250929050565b60006020828403121561174557600080fd5b813561142f8161160c565b60008060008060008060a0878903121561176957600080fd5b86356117748161160c565b955060208701356117848161160c565b945060408701359350606087013567ffffffffffffffff8111156117a757600080fd5b6117b389828a0161162e565b909450925050608087013567ffffffffffffffff8111156117d357600080fd5b87016060818a0312156117e557600080fd5b809150509295509295509295565b60008060006060848603121561180857600080fd5b83356118138161160c565b925060208401356118238161160c565b929592945050506040919091013590565b6000806000806000806080878903121561184d57600080fd5b863567ffffffffffffffff81111561186457600080fd5b61187089828a0161162e565b90975095505060208701356118848161160c565b935060408701359250606087013567ffffffffffffffff8111156118a757600080fd5b6118b389828a0161162e565b979a9699509497509295939492505050565b801515811461079f57600080fd5b6000602082840312156118e557600080fd5b813561142f816118c5565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061198b6080830184866118f0565b979650505050505050565b8381526040602082015260006119b06040830184866118f0565b95945050505050565b600081356119c68161160c565b73ffffffffffffffffffffffffffffffffffffffff168352602082013567ffffffffffffffff81168082146119fa57600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112611a3657600080fd5b820160208101903567ffffffffffffffff811115611a5357600080fd5b803603821315611a6257600080fd5b606060408601526119b06060860182846118f0565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a060608201526000611ac960a0830185876118f0565b8281036080840152611adb81856119b9565b9998505050505050505050565b848152606060208201526000611b026060830185876118f0565b828103604084015261198b81856119b9565b600060208284031215611b2657600080fd5b5051919050565b818103818111156104dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606081526000611b7b6060830187896118f0565b8560208401528281036040840152611b948185876118f0565b98975050505050505050565b600060208284031215611bb257600080fd5b815161142f816118c5565b6000825160005b81811015611bde5760208186018101518583015201611bc4565b50600092019182525091905056fea264697066735822122029d8a02c5c60bae7d404d08786de2b2dd6b37e11d10fa76c968c7809ff06f3b864736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b5060405161178338038061178383398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516114ab6102d86000396000818161021d01528181610531015281816108290152818161099a01528181610aef0152610c110152600081816101d1015281816104a1015281816105040152818161079901526107fc01526114ab6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c578063057e0f25146101a4575b600080fd5b61018f61018a366004610fd3565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b236600461108e565b610462565b005b6101b76101c7366004611126565b6105fc565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d366004611159565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611172565b6106a1565b6101b7610291366004611172565b6106cc565b6101b7610725565b60015460ff1661018f565b6101b76102b736600461119e565b61075a565b6101b76102ca366004611159565b6108ef565b6101b76102dd366004611159565b61095d565b6101b7610a07565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611172565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611172565b610a39565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610aa1565b61049c610aab565b6104c77f00000000000000000000000000000000000000000000000000000000000000008785610aea565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610563907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161130e565b600060405180830381600087803b15801561057d57600080fd5b505af1158015610591573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c878787866040516105e1949392919061137f565b60405180910390a2506105f46001600055565b505050505050565b610604610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062e81610aa1565b610636610aab565b610641848484610aea565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161068991815260200190565b60405180910390a25061069c6001600055565b505050565b6000828152600260205260409020600101546106bc81610aa1565b6106c68383610c72565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461071b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61069c8282610d72565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074f81610aa1565b610757610e31565b50565b610762610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078c81610aa1565b610794610aab565b6107bf7f00000000000000000000000000000000000000000000000000000000000000008684610aea565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610859907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016113b6565b600060405180830381600087803b15801561087357600080fd5b505af1158015610887573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d8686866040516108d593929190611408565b60405180910390a2506108e86001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61091981610aa1565b610921610aab565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610965610aab565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109f357600080fd5b505af11580156108e8573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3181610aa1565b610757610eae565b600082815260026020526040902060010154610a5481610aa1565b6106c68383610d72565b600260005403610a9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107578133610f07565b60015460ff1615610ae8576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7c9190611422565b610b86908461143b565b1115610bbe576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d083390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e39610f97565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610eb6610aab565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e84565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f93576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ae8576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fe557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461101557600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461104057600080fd5b919050565b60008083601f84011261105757600080fd5b50813567ffffffffffffffff81111561106f57600080fd5b60208301915083602082850101111561108757600080fd5b9250929050565b60008060008060008060a087890312156110a757600080fd5b6110b08761101c565b955060208701359450604087013567ffffffffffffffff8111156110d357600080fd5b6110df89828a01611045565b90955093505060608701359150608087013567ffffffffffffffff81111561110657600080fd5b87016060818a03121561111857600080fd5b809150509295509295509295565b60008060006060848603121561113b57600080fd5b6111448461101c565b95602085013595506040909401359392505050565b60006020828403121561116b57600080fd5b5035919050565b6000806040838503121561118557600080fd5b823591506111956020840161101c565b90509250929050565b6000806000806000608086880312156111b657600080fd5b6111bf8661101c565b945060208601359350604086013567ffffffffffffffff8111156111e257600080fd5b6111ee88828901611045565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff6112678261101c565b1682526000602082013567ffffffffffffffff811680821461128857600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126112c457600080fd5b820160208101903567ffffffffffffffff8111156112e157600080fd5b8036038213156112f057600080fd5b60606040860152611305606086018284611200565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061136060a083018587611200565b82810360808401526113728185611249565b9998505050505050505050565b848152606060208201526000611399606083018587611200565b82810360408401526113ab8185611249565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ab608083018486611200565b838152604060208201526000611305604083018486611200565b60006020828403121561143457600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212208052a0b07c987cb20e29d9c7c23109b8ff8b4b966ca2e18c207a88e5b4d79d4264736f6c634300081a00336080604052348015600f57600080fd5b506001600055610ec3806100246000396000f3fe60806040526004361061006e5760003560e01c80636ed701691161004b5780636ed70169146100e0578063c5131691146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063660b9de014610097578063676cc054146100b757005b3661007557005b005b34801561008357600080fd5b50610075610092366004610724565b610148565b3480156100a357600080fd5b506100756100b2366004610760565b6101de565b6100ca6100c536600461079b565b61021a565b6040516100d79190610896565b60405180910390f35b3480156100ec57600080fd5b5061007561024d565b34801561010157600080fd5b50610075610110366004610724565b610282565b6100756101233660046109ce565b61035d565b34801561013457600080fd5b50610075610143366004610aba565b6103a1565b6101506103d6565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610419565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b7f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e338260405161020f929190610bed565b60405180910390a150565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a19392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61028a6103d6565b6000610297600285610ccc565b9050806000036102d3576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102f573ffffffffffffffffffffffffffffffffffffffff8416338484610419565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610394959493929190610d07565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103949493929190610d91565b600260005403610412576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104ae9085906104b4565b50505050565b60006104d673ffffffffffffffffffffffffffffffffffffffff84168361054f565b905080516000141580156104fb5750808060200190518101906104f99190610e54565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061055d83836000610564565b9392505050565b6060814710156105a2576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610546565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105cb9190610e71565b60006040518083038185875af1925050503d8060008114610608576040519150601f19603f3d011682016040523d82523d6000602084013e61060d565b606091505b509150915061061d868383610627565b9695505050505050565b60608261063c57610637826106b6565b61055d565b8151158015610660575073ffffffffffffffffffffffffffffffffffffffff84163b155b156106af576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610546565b508061055d565b8051156106c65780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461071f57600080fd5b919050565b60008060006060848603121561073957600080fd5b83359250610749602085016106fb565b9150610757604085016106fb565b90509250925092565b60006020828403121561077257600080fd5b813567ffffffffffffffff81111561078957600080fd5b82016060818503121561055d57600080fd5b600080600083850360408112156107b157600080fd5b60208112156107bf57600080fd5b50839250602084013567ffffffffffffffff8111156107dd57600080fd5b8401601f810186136107ee57600080fd5b803567ffffffffffffffff81111561080557600080fd5b86602082840101111561081757600080fd5b939660209190910195509293505050565b60005b8381101561084357818101518382015260200161082b565b50506000910152565b60008151808452610864816020860160208601610828565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061055d602083018461084c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561091f5761091f6108a9565b604052919050565b600082601f83011261093857600080fd5b813567ffffffffffffffff811115610952576109526108a9565b61098360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108d8565b81815284602083860101111561099857600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106f857600080fd5b803561071f816109b5565b6000806000606084860312156109e357600080fd5b833567ffffffffffffffff8111156109fa57600080fd5b610a0686828701610927565b935050602084013591506040840135610a1e816109b5565b809150509250925092565b600067ffffffffffffffff821115610a4357610a436108a9565b5060051b60200190565b600082601f830112610a5e57600080fd5b8135610a71610a6c82610a29565b6108d8565b8082825260208201915060208360051b860101925085831115610a9357600080fd5b602085015b83811015610ab0578035835260209283019201610a98565b5095945050505050565b600080600060608486031215610acf57600080fd5b833567ffffffffffffffff811115610ae657600080fd5b8401601f81018613610af757600080fd5b8035610b05610a6c82610a29565b8082825260208201915060208360051b850101925088831115610b2757600080fd5b602084015b83811015610b6957803567ffffffffffffffff811115610b4b57600080fd5b610b5a8b602083890101610927565b84525060209283019201610b2c565b509550505050602084013567ffffffffffffffff811115610b8957600080fd5b610b9586828701610a4d565b925050610757604085016109c3565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2b836106fb565b1660408201526000602083013567ffffffffffffffff8116808214610c4f57600080fd5b6060840152506040830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610c8b57600080fd5b830160208101903567ffffffffffffffff811115610ca857600080fd5b803603821315610cb757600080fd5b6060608085015261061d60a085018284610ba4565b600082610d02577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d3c60a083018661084c565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610d87578151865260209586019590910190600101610d69565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e0f85835161084c565b94506020938401939190910190600101610dd5565b505050508281036040840152610e3a8186610d55565b915050610e4b606083018415159052565b95945050505050565b600060208284031215610e6657600080fd5b815161055d816109b5565b60008251610e83818460208701610828565b919091019291505056fea2646970667358221220d537f023478b5746f5f67760e722db6f4a51db89700ac69d6ba33759b8ac342f64736f6c634300081a0033a26469706673582212204e1c77be0656512479a7234077bd41901cef7a59b144f43bd3e6f592895c802864736f6c634300081a0033", + 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\":\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"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\":\"uint64\",\"internalType\":\"uint64\"},{\"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\":\"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\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ff958061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063a783c78911610104578063d509b16c116100a2578063e63ab1e911610071578063e63ab1e914610344578063fa7626d41461036b578063fdca905214610378578063fe574f841461038057600080fd5b8063d509b16c14610324578063dcf7d0371461032c578063de1cb76c14610334578063e20c9f711461033c57600080fd5b8063b5508aa9116100de578063b5508aa9146102f4578063ba414fa6146102fc578063c190997214610314578063ccb0e3f21461031c57600080fd5b8063a783c789146102bd578063aaf74192146102e4578063b0464fdc146102ec57600080fd5b80634934655811610171578063828320141161014b578063828320141461025657806385226c811461025e57806385f438c114610273578063916a17c6146102a857600080fd5b8063493465581461023157806366d9a9a0146102395780637db20efb1461024e57600080fd5b80632ade3880116101ad5780632ade3880146102045780633cba0107146102195780633e5e3c23146102215780633f7286f41461022957600080fd5b80630a9254e4146101d45780631ed7831c146101de5780632506ef03146101fc575b600080fd5b6101dc610388565b005b6101e6610b4f565b6040516101f39190618fee565b60405180910390f35b6101dc610bb1565b61020c610e65565b6040516101f3919061908a565b6101dc610fa7565b6101e6611769565b6101e66117c9565b6101dc611829565b610241611dfd565b6040516101f391906191f0565b6101dc611f7f565b6101dc61221e565b61026661247a565b6040516101f3919061928e565b61029a7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101f3565b6102b061254a565b6040516101f39190619305565b61029a7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101dc612645565b6102b06128c0565b6102666129bb565b610304612a8b565b60405190151581526020016101f3565b6101dc612b5f565b6101dc612dca565b6101dc6138f6565b6101dc613c4b565b6101dc614279565b6101e661499f565b61029a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f546103049060ff1681565b6101dc6149ff565b6101dc614c03565b60258054307fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155602680546112349083161790556027805461567892168217905560405181906103dd90618f01565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610410573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260275460255492519086169481019490945260448401929092529092166064820152610501919060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052614df0565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560275460255460405192939182169291169061058d90618f0e565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f0801580156105c9573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602054602454602754602554604051938516949283169391831692169061062490618f1b565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610668573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392831617905560275460405163ca669fa760e01b815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156106ed57600080fd5b505af1158015610701573d6000803e3d6000fd5b5050602480546027546023546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b15801561077457600080fd5b505af1158015610788573d6000803e3d6000fd5b5050505060405161079890618f28565b604051809103906000f0801580156107b4573d6000803e3d6000fd5b50602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561086057600080fd5b505af1158015610874573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b1580156108ea57600080fd5b505af11580156108fe573d6000803e3d6000fd5b50506020546022546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b15801561096457600080fd5b505af1158015610978573d6000803e3d6000fd5b50506020546023546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b1580156109de57600080fd5b505af11580156109f2573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a5457600080fd5b505af1158015610a68573d6000803e3d6000fd5b5050604080516080810182526025546001600160a01b039081168252602454811660208084019182526001848601908152855191820190955260008152606084018190528351602880549185167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091178155915160298054965167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009097169190941617949094179091559093509150602a90610b4a908261945f565b505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610ba757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b89575b5050505050905090565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610c4c57600080fd5b505af1158015610c60573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015610cc357600080fd5b505af1158015610cd7573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015610d3457600080fd5b505af1158015610d48573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015610dd157600080fd5b505af1158015610de5573d6000803e3d6000fd5b50506023546021546001600160a01b039182169350632ccb404d925016610e0d85600161954d565b8460286040518563ffffffff1660e01b8152600401610e2f9493929190619648565b600060405180830381600087803b158015610e4957600080fd5b505af1158015610e5d573d6000803e3d6000fd5b505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610f9e57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610f87578382906000526020600020018054610efa906193cb565b80601f0160208091040260200160405190810160405280929190818152602001828054610f26906193cb565b8015610f735780601f10610f4857610100808354040283529160200191610f73565b820191906000526020600020905b815481529060010190602001808311610f5657829003601f168201915b505050505081526020019060010190610edb565b505050508152505081526020019060010190610e89565b50505050905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a2000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015611082573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a69190619689565b90506110b3816000614e0f565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111279190619689565b9050611134816000614e0f565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161121b916001600160a01b03919091169060009086906004016196a2565b600060405180830381600087803b15801561123557600080fd5b505af1158015611249573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156112db57600080fd5b505af11580156112ef573d6000803e3d6000fd5b505060208054602454602654604080516001600160a01b0394851681529485018d905291831684830152919091166060830152517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609350908190036080019150a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156113de57600080fd5b505af11580156113f2573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d915061143790899088906196ca565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561149857600080fd5b505af11580156114ac573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061150492909116908a9089908b906004016196e3565b600060405180830381600087803b15801561151e57600080fd5b505af1158015611532573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611584573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a89190619689565b90506115b48188614e0f565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611604573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116289190619689565b9050611635816000614e0f565b602480546020546021546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169381019390935260009291169063dd62ed3e90604401602060405180830381865afa1580156116ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cf9190619689565b90506116dc816000614e0f565b602480546020546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561172c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117509190619689565b905061175d816000614e0f565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610ba7576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610b89575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610ba7576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610b89575050505050905090565b604080516004808252602480830184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed70169000000000000000000000000000000000000000000000000000000001790525460265493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a08231936118ca93921691016001600160a01b0391909116815260200190565b602060405180830381865afa1580156118e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190b9190619689565b9050611918816000614e0f565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015611968573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198c9190619689565b9050611999816000614e0f565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611a80916001600160a01b03919091169060009086906004016196a2565b600060405180830381600087803b158015611a9a57600080fd5b505af1158015611aae573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611b4057600080fd5b505af1158015611b54573d6000803e3d6000fd5b5050602080546040516001600160a01b0390911681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0935001905060405180910390a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611c2657600080fd5b505af1158015611c3a573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d9150611c7f90899088906196ca565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611ce057600080fd5b505af1158015611cf4573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611d4c92909116908a9089908b906004016196e3565b600060405180830381600087803b158015611d6657600080fd5b505af1158015611d7a573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa158015611dcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df09190619689565b90506115b4816000614e0f565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610f9e5783829060005260206000209060020201604051806040016040529081600082018054611e54906193cb565b80601f0160208091040260200160405190810160405280929190818152602001828054611e80906193cb565b8015611ecd5780601f10611ea257610100808354040283529160200191611ecd565b820191906000526020600020905b815481529060010190602001808311611eb057829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611f6757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f145790505b50505050508152505081526020019060010190611e21565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611fdd57600080fd5b505af1158015611ff1573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b15801561205457600080fd5b505af1158015612068573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156120c557600080fd5b505af11580156120d9573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561216257600080fd5b505af1158015612176573d6000803e3d6000fd5b50506023546021546001600160a01b03918216935063106e629092501661219e84600161954d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039092166004830152602482015260006044820152606401600060405180830381600087803b15801561220357600080fd5b505af1158015612217573d6000803e3d6000fd5b5050505050565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156122bb57600080fd5b505af11580156122cf573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506123ba919060040161971c565b600060405180830381600087803b1580156123d457600080fd5b505af11580156123e8573d6000803e3d6000fd5b50506023546021546040517f2ccb404d0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450632ccb404d9350612443929091169087908690889060289060040161972f565b600060405180830381600087803b15801561245d57600080fd5b505af1158015612471573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610f9e5783829060005260206000200180546124bd906193cb565b80601f01602080910402602001604051908101604052809291908181526020018280546124e9906193cb565b80156125365780601f1061250b57610100808354040283529160200191612536565b820191906000526020600020905b81548152906001019060200180831161251957829003601f168201915b50505050508152602001906001019061249e565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610f9e5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561262d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116125da5790505b5050505050815250508152602001906001019061256e565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156126e057600080fd5b505af11580156126f4573d6000803e3d6000fd5b50506023546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b15801561275757600080fd5b505af115801561276b573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156127c857600080fd5b505af11580156127dc573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561286557600080fd5b505af1158015612879573d6000803e3d6000fd5b50506023546021546001600160a01b039182169350635e3e9fef9250166128a185600161954d565b846040518463ffffffff1660e01b8152600401610e2f9392919061977b565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610f9e5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156129a357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116129505790505b505050505081525050815260200190600101906128e4565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610f9e5783829060005260206000200180546129fe906193cb565b80601f0160208091040260200160405190810160405280929190818152602001828054612a2a906193cb565b8015612a775780601f10612a4c57610100808354040283529160200191612a77565b820191906000526020600020905b815481529060010190602001808311612a5a57829003601f168201915b5050505050815260200190600101906129df565b60085460009060ff1615612aa3575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b589190619689565b1415905090565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612c4557600080fd5b505af1158015612c59573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612d44919060040161971c565b600060405180830381600087803b158015612d5e57600080fd5b505af1158015612d72573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061244392909116908790869088906004016196e3565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e2b57600080fd5b505af1158015612e3f573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612f2a919060040161971c565b600060405180830381600087803b158015612f4457600080fd5b505af1158015612f58573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612fac57600080fd5b505af1158015612fc0573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561301d57600080fd5b505af1158015613031573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061311c919060040161971c565b600060405180830381600087803b15801561313657600080fd5b505af115801561314a573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561319e57600080fd5b505af11580156131b2573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561320f57600080fd5b505af1158015613223573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561327757600080fd5b505af115801561328b573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561331457600080fd5b505af1158015613328573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561338557600080fd5b505af1158015613399573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561340d57600080fd5b505af1158015613421573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561347e57600080fd5b505af1158015613492573d6000803e3d6000fd5b50505050602360009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156134e657600080fd5b505af11580156134fa573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561354c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135709190619689565b905061357d816000614e0f565b6026546040516001600160a01b039091166024820152604481018490526064810183905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613664916001600160a01b03919091169060009086906004016196a2565b600060405180830381600087803b15801561367e57600080fd5b505af1158015613692573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561372457600080fd5b505af1158015613738573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156137d757600080fd5b505af11580156137eb573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e629091506064015b600060405180830381600087803b15801561386057600080fd5b505af1158015613874573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156138c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ea9190619689565b90506122178186614e0f565b602480546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a09360009392909216916370a082319101602060405180830381865afa15801561394b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061396f9190619689565b905061397c816000614e0f565b6026546040516001600160a01b0390911660248201526044810183905260006064820181905290819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613a65916001600160a01b03919091169060009086906004016196a2565b600060405180830381600087803b158015613a7f57600080fd5b505af1158015613a93573d6000803e3d6000fd5b50506023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613b2557600080fd5b505af1158015613b39573d6000803e3d6000fd5b50506026546040518781526001600160a01b0390911692507f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5915060200160405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613bd857600080fd5b505af1158015613bec573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018790529116925063106e62909150606401613846565b60248054602654604051620186a09381018490526001600160a01b03928316604482015291166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc5131691000000000000000000000000000000000000000000000000000000001790526024805460265492516370a0823160e01b81526001600160a01b0393841660048201529394506000939216916370a082319101602060405180830381865afa158015613d26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d4a9190619689565b9050613d57816000614e0f565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa158015613da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dcb9190619689565b9050613dd8816000614e0f565b6020546040516001600160a01b039091166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613ebf916001600160a01b03919091169060009086906004016196a2565b600060405180830381600087803b158015613ed957600080fd5b505af1158015613eed573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613f7f57600080fd5b505af1158015613f93573d6000803e3d6000fd5b50506020547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af6092506001600160a01b03169050613fd16002896197b4565b602454602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561409957600080fd5b505af11580156140ad573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d91506140f290899088906196ca565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561415357600080fd5b505af1158015614167573d6000803e3d6000fd5b50506023546021546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506141bf92909116908a9089908b906004016196e3565b600060405180830381600087803b1580156141d957600080fd5b505af11580156141ed573d6000803e3d6000fd5b5050602480546026546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa15801561423f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142639190619689565b90506115b48161427460028a6197b4565b614e0f565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f1901815290829052602480546021546370a0823160e01b85526001600160a01b0390811660048601529294506000939216916370a082319101602060405180830381865afa15801561430e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143329190619689565b905061433f816000614e0f565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561438f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143b39190619689565b6020546040516001600160a01b039091166024820152604481018790526064810186905290915060009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260245490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161449d916001600160a01b03919091169060009086906004016196a2565b600060405180830381600087803b1580156144b757600080fd5b505af11580156144cb573d6000803e3d6000fd5b50506021546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561455d57600080fd5b505af1158015614571573d6000803e3d6000fd5b50506020546040517f8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e26493506145b592506001600160a01b03909116906028906197ef565b60405180910390a16020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561464b57600080fd5b505af115801561465f573d6000803e3d6000fd5b50506024546021546040516001600160a01b039283169450911691507ff196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b906146ad908a908990602890619811565b60405180910390a36023546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561474357600080fd5b505af1158015614757573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017915061479f9089908890602890619811565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561480057600080fd5b505af1158015614814573d6000803e3d6000fd5b50506023546021546040517f2ccb404d0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450632ccb404d935061486f92909116908a9089908b9060289060040161972f565b600060405180830381600087803b15801561488957600080fd5b505af115801561489d573d6000803e3d6000fd5b5050602480546021546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319101602060405180830381865afa1580156148ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149139190619689565b905061491f8188614e0f565b602480546023546040516370a0823160e01b81526001600160a01b03918216600482015260009391909216916370a082319101602060405180830381865afa15801561496f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149939190619689565b90506116358185614e0f565b60606015805480602002602001604051908101604052809291908181526020018280548015610ba7576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610b89575050505050905090565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614a5857600080fd5b505af1158015614a6c573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614b57919060040161971c565b600060405180830381600087803b158015614b7157600080fd5b505af1158015614b85573d6000803e3d6000fd5b50506023546040517f6f8b44b000000000000000000000000000000000000000000000000000000000815261271060048201526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015614be957600080fd5b505af1158015614bfd573d6000803e3d6000fd5b50505050565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614c6457600080fd5b505af1158015614c78573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614d63919060040161971c565b600060405180830381600087803b158015614d7d57600080fd5b505af1158015614d91573d6000803e3d6000fd5b50506023546026546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401610e2f565b6000614dfa618f35565b614e05848483614e8e565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015614e7a57600080fd5b505afa158015610e5d573d6000803e3d6000fd5b600080614e9b8584614f09565b9050614efe6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001614ee992919061983c565b60405160208183030381529060405285614f15565b9150505b9392505050565b6000614f028383614f43565b60c08101515160009015614f3957614f3284848460c00151614f5e565b9050614f02565b614f328484615104565b6000614f4f83836151ef565b614f0283836020015184614f15565b600080614f696151ff565b90506000614f7786836152d2565b90506000614f8e8260600151836020015185615778565b90506000614f9e8383898961598a565b90506000614fab82616807565b602081015181519192509060030b1561501e57898260400151604051602001614fd592919061985e565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526150159160040161971c565b60405180910390fd5b60006150616040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016169d6565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906150b490849060040161971c565b602060405180830381865afa1580156150d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150f591906198df565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061515990879060040161971c565b600060405180830381865afa158015615176573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261519e91908101906199c1565b905060006151cc82856040516020016151b89291906199f6565b604051602081830303815290604052616bd6565b90506001600160a01b038116614e05578484604051602001614fd5929190619a25565b6151fb82826000616be9565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90615286908490600401619ad0565b600060405180830381865afa1580156152a3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526152cb9190810190619b17565b9250505090565b6153046040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d905061534f6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61535885616cec565b60208201526000615368866170d1565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156153aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526153d29190810190619b17565b868385602001516040516020016153ec9493929190619b60565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061544490859060040161971c565b600060405180830381865afa158015615461573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154899190810190619b17565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906154d1908490600401619c64565b602060405180830381865afa1580156154ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906155129190619cb6565b6155275781604051602001614fd59190619cd8565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061556c908490600401619d6a565b600060405180830381865afa158015615589573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526155b19190810190619b17565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906155f8908490600401619dbc565b602060405180830381865afa158015615615573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156399190619cb6565b156156ce576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615683908490600401619dbc565b600060405180830381865afa1580156156a0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156c89190810190619b17565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016156f39190619e0e565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161571f929190619e7a565b600060405180830381865afa15801561573c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526157649190810190619b17565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816157945790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106157f4576157f4619e9f565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061584857615848619e9f565b6020026020010181905250846040516020016158649190619ece565b6040516020818303038152906040528160028151811061588657615886619e9f565b6020026020010181905250826040516020016158a29190619f3a565b604051602081830303815290604052816003815181106158c4576158c4619e9f565b602002602001018190525060006158da82616807565b602080820151604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000818501908152825180840184526000808252908601528251808401909352905182529281019290925291925061596b9060408051808201825260008082526020918201528151808301909252845182528085019082015290617354565b6159805785604051602001614fd59190619f7b565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156159da565b511590565b615b4e57826020015115615a96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401615015565b8260c0015115615b4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401615015565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081615b6757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280615bc29061a00c565b935060ff1681518110615bd757615bd7619e9f565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001615c28919061a02b565b604051602081830303815290604052828280615c439061a00c565b935060ff1681518110615c5857615c58619e9f565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280615ca59061a00c565b935060ff1681518110615cba57615cba619e9f565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280615d079061a00c565b935060ff1681518110615d1c57615d1c619e9f565b60200260200101819052508760200151828280615d389061a00c565b935060ff1681518110615d4d57615d4d619e9f565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280615d9a9061a00c565b935060ff1681518110615daf57615daf619e9f565b602090810291909101015287518282615dc78161a00c565b935060ff1681518110615ddc57615ddc619e9f565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280615e299061a00c565b935060ff1681518110615e3e57615e3e619e9f565b6020026020010181905250615e52466173b5565b8282615e5d8161a00c565b935060ff1681518110615e7257615e72619e9f565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280615ebf9061a00c565b935060ff1681518110615ed457615ed4619e9f565b602002602001018190525086828280615eec9061a00c565b935060ff1681518110615f0157615f01619e9f565b60209081029190910101528551156160285760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282615f528161a00c565b935060ff1681518110615f6757615f67619e9f565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90615fb790899060040161971c565b600060405180830381865afa158015615fd4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ffc9190810190619b17565b82826160078161a00c565b935060ff168151811061601c5761601c619e9f565b60200260200101819052505b8460200151156160f85760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826160718161a00c565b935060ff168151811061608657616086619e9f565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806160d39061a00c565b935060ff16815181106160e8576160e8619e9f565b60200260200101819052506162bf565b6161306159d58660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6161c35760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826161738161a00c565b935060ff168151811061618857616188619e9f565b60200260200101819052508460a001516040516020016161a89190619ece565b6040516020818303038152906040528282806160d39061a00c565b8460c0015115801561620657506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261620490511590565b155b156162bf5760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261624a8161a00c565b935060ff168151811061625f5761625f619e9f565b602002602001018190525061627388617455565b6040516020016162839190619ece565b60405160208183030381529060405282828061629e9061a00c565b935060ff16815181106162b3576162b3619e9f565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526162f390511590565b6163885760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826163368161a00c565b935060ff168151811061634b5761634b619e9f565b602002602001018190525084604001518282806163679061a00c565b935060ff168151811061637c5761637c619e9f565b60200260200101819052505b6060850151156164a95760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826163d18161a00c565b935060ff16815181106163e6576163e6619e9f565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616455573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261647d9190810190619b17565b82826164888161a00c565b935060ff168151811061649d5761649d619e9f565b60200260200101819052505b60e085015151156165505760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826164f38161a00c565b935060ff168151811061650857616508619e9f565b60200260200101819052506165248560e00151600001516173b5565b828261652f8161a00c565b935060ff168151811061654457616544619e9f565b60200260200101819052505b60e085015160200151156165fa5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261659d8161a00c565b935060ff16815181106165b2576165b2619e9f565b60200260200101819052506165ce8560e00151602001516173b5565b82826165d98161a00c565b935060ff16815181106165ee576165ee619e9f565b60200260200101819052505b60e085015160400151156166a45760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826166478161a00c565b935060ff168151811061665c5761665c619e9f565b60200260200101819052506166788560e00151604001516173b5565b82826166838161a00c565b935060ff168151811061669857616698619e9f565b60200260200101819052505b60e0850151606001511561674e5760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826166f18161a00c565b935060ff168151811061670657616706619e9f565b60200260200101819052506167228560e00151606001516173b5565b828261672d8161a00c565b935060ff168151811061674257616742619e9f565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561676c5761676c61939c565b60405190808252806020026020018201604052801561679f57816020015b606081526020019060019003908161678a5790505b50905060005b8260ff168160ff1610156167f857838160ff16815181106167c8576167c8619e9f565b6020026020010151828260ff16815181106167e5576167e5619e9f565b60209081029190910101526001016167a5565b5093505050505b949350505050565b61682e6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916168b49186910161a096565b600060405180830381865afa1580156168d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168f99190810190619b17565b905060006169078683617f44565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401616937919061928e565b6000604051808303816000875af1158015616956573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261697e919081019061a0dd565b805190915060030b158015906169975750602081015151155b80156169a65750604081015151155b1561598057816000815181106169be576169be619e9f565b6020026020010151604051602001614fd5919061a193565b60606000616a0b8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150616a429082905b90618099565b15616b9f576000616abf82616ab984616ab3616a858a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906180c0565b90618122565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616b23908290618099565b15616b8d57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616b8a905b82906181a7565b90505b616b96816181cd565b92505050614f02565b8215616bb8578484604051602001614fd592919061a37f565b5050604080516020810190915260008152614f02565b509392505050565b6000808251602084016000f09392505050565b8160a0015115616bf857505050565b6000616c05848484618236565b90506000616c1282616807565b602081015181519192509060030b158015616cae5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616cae90604080518082018252600080825260209182015281518083019092528451825280850190820152616a3c565b15616cbb57505050505050565b60408201515115616cdb578160400151604051602001614fd5919061a426565b80604051602001614fd5919061a484565b60606000616d218360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616d86905b8290617354565b15616df557604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f0290616df09083906187d1565b6181cd565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e57905b829061885b565b600103616f2457604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ebd90616b83565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f0290616df0905b83906181a7565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f8390616d7f565b156170ba57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616feb9083906188f5565b905060008160018351616ffe919061a4ef565b8151811061700e5761700e619e9f565b602002602001015190506170b1616df06170846040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906187d1565b95945050505050565b82604051602001614fd5919061a502565b50919050565b606060006171068360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061716890616d7f565b1561717657614f02816181cd565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171d590616e50565b60010361723f57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152614f0290616df090616f1d565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261729e90616d7f565b156170ba57604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906173069083906188f5565b9050600181511115617342578060028251617321919061a4ef565b8151811061733157617331619e9f565b602002602001015192505050919050565b5082604051602001614fd5919061a502565b80518251600091111561736957506000614e09565b8151835160208501516000929161737f9161954d565b617389919061a4ef565b9050826020015181036173a0576001915050614e09565b82516020840151819020912014905092915050565b606060006173c28361899a565b600101905060008167ffffffffffffffff8111156173e2576173e261939c565b6040519080825280601f01601f19166020018201604052801561740c576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461741657509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916174e1905b8290618a7c565b1561752157505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617580906174da565b156175c057505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261761f906174da565b1561765f57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176be906174da565b806177235750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617723906174da565b1561776357505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526177c2906174da565b806178275750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617827906174da565b1561786757505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526178c6906174da565b8061792b5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261792b906174da565b1561796b57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179ca906174da565b80617a2f5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a2f906174da565b15617a6f57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ace906174da565b15617b0e57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b6d906174da565b15617bad57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617c0c906174da565b15617c4c57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cab906174da565b15617ceb57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d4a906174da565b15617d8a57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617de9906174da565b80617e4e5750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e4e906174da565b15617e8e57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617eed906174da565b15617f2d57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151614fd5929060200161a5e0565b60608060005b8451811015617fcf5781858281518110617f6657617f66619e9f565b6020026020010151604051602001617f7f9291906199f6565b604051602081830303815290604052915060018551617f9e919061a4ef565b8114617fc75781604051602001617fb5919061a749565b60405160208183030381529060405291505b600101617f4a565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081617fe8579050509050838160008151811061801357618013619e9f565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061806757618067619e9f565b6020026020010181905250818160028151811061808657618086619e9f565b6020908102919091010152949350505050565b60208083015183518351928401516000936180b79291849190618a90565b14159392505050565b604080518082019091526000808252602082015260006180f28460000151856020015185600001518660200151618ba1565b9050836020015181618104919061a4ef565b8451859061811390839061a4ef565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015618147575081614e09565b602080830151908401516001911461816e5750815160208481015190840151829020919020145b801561819f5782518451859061818590839061a4ef565b905250825160208501805161819b90839061954d565b9052505b509192915050565b60408051808201909152600080825260208201526181c6838383618cc1565b5092915050565b60606000826000015167ffffffffffffffff8111156181ee576181ee61939c565b6040519080825280601f01601f191660200182016040528015618218576020820181803683370190505b50905060006020820190506181c68185602001518660000151618d6c565b606060006182426151ff565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161825f57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806182ba9061a00c565b935060ff16815181106182cf576182cf619e9f565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618320919061a78a565b60405160208183030381529060405282828061833b9061a00c565b935060ff168151811061835057618350619e9f565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061839d9061a00c565b935060ff16815181106183b2576183b2619e9f565b6020026020010181905250826040516020016183ce9190619f3a565b6040516020818303038152906040528282806183e99061a00c565b935060ff16815181106183fe576183fe619e9f565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061844b9061a00c565b935060ff168151811061846057618460619e9f565b60200260200101819052506184758784618de6565b82826184808161a00c565b935060ff168151811061849557618495619e9f565b6020908102919091010152855151156185415760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826184e78161a00c565b935060ff16815181106184fc576184fc619e9f565b6020026020010181905250618515866000015184618de6565b82826185208161a00c565b935060ff168151811061853557618535619e9f565b60200260200101819052505b8560800151156185af5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261858a8161a00c565b935060ff168151811061859f5761859f619e9f565b6020026020010181905250618615565b84156186155760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826185f48161a00c565b935060ff168151811061860957618609619e9f565b60200260200101819052505b604086015151156186b15760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261865f8161a00c565b935060ff168151811061867457618674619e9f565b602002602001018190525085604001518282806186909061a00c565b935060ff16815181106186a5576186a5619e9f565b60200260200101819052505b85606001511561871b5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826186fa8161a00c565b935060ff168151811061870f5761870f619e9f565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156187395761873961939c565b60405190808252806020026020018201604052801561876c57816020015b60608152602001906001900390816187575790505b50905060005b8260ff168160ff1610156187c557838160ff168151811061879557618795619e9f565b6020026020010151828260ff16815181106187b2576187b2619e9f565b6020908102919091010152600101618772565b50979650505050505050565b60408051808201909152600080825260208201528151835110156187f6575081614e09565b8151835160208501516000929161880c9161954d565b618816919061a4ef565b60208401519091506001908214618837575082516020840151819020908220145b80156188525783518551869061884e90839061a4ef565b9052505b50929392505050565b600080826000015161887f8560000151866020015186600001518760200151618ba1565b618889919061954d565b90505b8351602085015161889d919061954d565b81116181c657816188ad8161a7cf565b92505082600001516188e48560200151836188c8919061a4ef565b86516188d4919061a4ef565b8386600001518760200151618ba1565b6188ee919061954d565b905061888c565b60606000618903848461885b565b61890e90600161954d565b67ffffffffffffffff8111156189265761892661939c565b60405190808252806020026020018201604052801561895957816020015b60608152602001906001900390816189445790505b50905060005b8151811015616bce57618975616df086866181a7565b82828151811061898757618987619e9f565b602090810291909101015260010161895f565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106189e3577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618a0f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310618a2d57662386f26fc10000830492506010015b6305f5e1008310618a45576305f5e100830492506008015b6127108310618a5957612710830492506004015b60648310618a6b576064830492506002015b600a8310614e095760010192915050565b6000618a888383618e26565b159392505050565b600080858411618b975760208411618b435760008415618adb576001618ab786602061a4ef565b618ac290600861a7e9565b618acd90600261a8e7565b618ad7919061a4ef565b1990505b8351811685618aea898961954d565b618af4919061a4ef565b805190935082165b818114618b2e57878411618b1657879450505050506167ff565b83618b208161a8f3565b945050828451169050618afc565b618b38878561954d565b9450505050506167ff565b838320618b50858861a4ef565b618b5a908761954d565b91505b858210618b9557848220808203618b8257618b78868461954d565b93505050506167ff565b618b8d60018461a4ef565b925050618b5d565b505b5092949350505050565b60008381868511618cac5760208511618c5b5760008515618bed576001618bc987602061a4ef565b618bd490600861a7e9565b618bdf90600261a8e7565b618be9919061a4ef565b1990505b84518116600087618bfe8b8b61954d565b618c08919061a4ef565b855190915083165b828114618c4d57818610618c3557618c288b8b61954d565b96505050505050506167ff565b85618c3f8161a7cf565b965050838651169050618c10565b8596505050505050506167ff565b508383206000905b618c6d868961a4ef565b8211618caa57858320808203618c8957839450505050506167ff565b618c9460018561954d565b9350508180618ca29061a7cf565b925050618c63565b505b618cb6878761954d565b979650505050505050565b60408051808201909152600080825260208201526000618cf38560000151866020015186600001518760200151618ba1565b602080870180519186019190915251909150618d0f908261a4ef565b835284516020860151618d22919061954d565b8103618d315760008552618d63565b83518351618d3f919061954d565b85518690618d4e90839061a4ef565b9052508351618d5d908261954d565b60208601525b50909392505050565b60208110618da45781518352618d8360208461954d565b9250618d9060208361954d565b9150618d9d60208261a4ef565b9050618d6c565b6000198115618dd3576001618dba83602061a4ef565b618dc69061010061a8e7565b618dd0919061a4ef565b90505b9151835183169219169190911790915250565b60606000618df484846152d2565b8051602080830151604051939450618e0e9390910161a90a565b60405160208183030381529060405291505092915050565b8151815160009190811115618e39575081515b6020808501519084015160005b83811015618ef25782518251808214618ec2576000196020871015618ea157600184618e7389602061a4ef565b618e7d919061954d565b618e8890600861a7e9565b618e9390600261a8e7565b618e9d919061a4ef565b1990505b8181168382168181039114618ebf579750614e099650505050505050565b50505b618ecd60208661954d565b9450618eda60208561954d565b93505050602081618eeb919061954d565b9050618e46565b5084518651615980919061a962565b6112a68061a98383390190565b611c7f8061bc2983390190565b6117aa8061d8a883390190565b610f0e8061f05283390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001618f78618f7d565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001618f786040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561902f5783516001600160a01b0316835260209384019390920191600101619008565b509095945050505050565b60005b8381101561905557818101518382015260200161903d565b50506000910152565b6000815180845261907681602086016020860161903a565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619186577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561916c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261915684865161905e565b602095860195909450929092019160010161911c565b5091975050506020948501949290920191506001016190b2565b50929695505050505050565b600081518084526020840193506020830160005b828110156191e65781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016191a6565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619186577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261925c604088018261905e565b90506020820151915086810360208801526192778183619192565b965050506020938401939190910190600101619218565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619186577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184526192f085835161905e565b945060209384019391909101906001016192b6565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619186577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526193866040870182619192565b955050602093840193919091019060010161932d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c908216806193df57607f821691505b6020821081036170cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610b4a57806000526020600020601f840160051c8101602085101561943f5750805b601f840160051c820191505b81811015612217576000815560010161944b565b815167ffffffffffffffff8111156194795761947961939c565b61948d8161948784546193cb565b84619418565b6020601f8211600181146194c157600083156194a95750848201515b600019600385901b1c1916600184901b178455612217565b600084815260208120601f198516915b828110156194f157878501518255602094850194600190920191016194d1565b508482101561950f5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115614e0957614e0961951e565b6001600160a01b038154168252600060018201546001600160a01b038116602085015267ffffffffffffffff8160a01c166040850152506002820160806060850152600081546195af816193cb565b80608088015260018216600081146195ce57600181146196085761963c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660a089015260a082151560051b890101935061963c565b84600052602060002060005b838110156196335781548a820160a00152600190910190602001619614565b890160a0019450505b50919695505050505050565b6001600160a01b038516815283602082015260a06040820152600061967060a083018561905e565b600060608401528281036080840152618cb68185619560565b60006020828403121561969b57600080fd5b5051919050565b6001600160a01b03841681528260208201526060604082015260006170b1606083018461905e565b8281526040602082015260006167ff604083018461905e565b6001600160a01b038516815283602082015260806040820152600061970b608083018561905e565b905082606083015295945050505050565b602081526000614f02602083018461905e565b6001600160a01b038616815284602082015260a06040820152600061975760a083018661905e565b846060840152828103608084015261976f8185619560565b98975050505050505050565b6001600160a01b03841681528260208201526080604082015260006197a3608083018461905e565b905060006060830152949350505050565b6000826197ea577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006167ff6040830184619560565b83815260606020820152600061982a606083018561905e565b82810360408401526159808185619560565b6001600160a01b03831681526040602082015260006167ff604083018461905e565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161989681601a85016020880161903a565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516198d381601c84016020880161903a565b01601c01949350505050565b6000602082840312156198f157600080fd5b81516001600160a01b0381168114614f0257600080fd5b6040516060810167ffffffffffffffff8111828210171561992b5761992b61939c565b60405290565b60008067ffffffffffffffff84111561994c5761994c61939c565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561997b5761997b61939c565b60405283815290508082840185101561999357600080fd5b616bce84602083018561903a565b600082601f8301126199b257600080fd5b614f0283835160208501619931565b6000602082840312156199d357600080fd5b815167ffffffffffffffff8111156199ea57600080fd5b614e05848285016199a1565b60008351619a0881846020880161903a565b835190830190619a1c81836020880161903a565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351619a5d81601a85016020880161903a565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351619a9a81603384016020880161903a565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000614f02608083018461905e565b600060208284031215619b2957600080fd5b815167ffffffffffffffff811115619b4057600080fd5b8201601f81018413619b5157600080fd5b614e0584825160208401619931565b60008551619b72818460208a0161903a565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551619bac816001840160208a0161903a565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451619bea81600284016020890161903a565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351619c2c81600284016020880161903a565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000619c77604083018461905e565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b600060208284031215619cc857600080fd5b81518015158114614f0257600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251619d1081601f85016020870161903a565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000619d7d604083018461905e565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000619dcf604083018461905e565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251619e4681601485016020870161903a565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000619e8d604083018561905e565b8281036020840152614efe818561905e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619f0681600185016020870161903a565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251619f4c81846020870161903a565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251619fff81604b85016020870161903a565b91909101604b0192915050565b600060ff821660ff810361a0225761a02261951e565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161a08981602985016020870161903a565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000614f02608083018461905e565b60006020828403121561a0ef57600080fd5b815167ffffffffffffffff81111561a10657600080fd5b82016060818503121561a11857600080fd5b61a120619908565b81518060030b811461a13157600080fd5b8152602082015167ffffffffffffffff81111561a14d57600080fd5b61a159868285016199a1565b602083015250604082015167ffffffffffffffff81111561a17957600080fd5b61a185868285016199a1565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a1f181602185016020870161903a565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a3dd81602185016020880161903a565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a41a81602e84016020880161903a565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161a08981602985016020870161903a565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a4e281602285016020870161903a565b9190910160220192915050565b81810381811115614e0957614e0961951e565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161a53a81600e85016020870161903a565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161a61881601885016020880161903a565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161a65581601c84016020880161903a565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161a75b81846020870161903a565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161a7c281601c85016020870161903a565b91909101601c0192915050565b6000600019820361a7e25761a7e261951e565b5060010190565b8082028115828204841417614e0957614e0961951e565b6001815b600184111561a83b5780850481111561a81f5761a81f61951e565b600184161561a82d57908102905b60019390931c92800261a804565b935093915050565b60008261a85257506001614e09565b8161a85f57506000614e09565b816001811461a875576002811461a87f5761a89b565b6001915050614e09565b60ff84111561a8905761a89061951e565b50506001821b614e09565b5060208310610133831016604e8410600b841016171561a8be575081810a614e09565b61a8cb600019848461a800565b806000190482111561a8df5761a8df61951e565b029392505050565b6000614f02838361a843565b60008161a9025761a90261951e565b506000190190565b6000835161a91c81846020880161903a565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161a95681600184016020880161903a565b01600101949350505050565b81810360008312801583831316838312821617156181c6576181c661951e56fe608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122001ec0ce060384773f3d3389fab7bed652c6b8ee389a7471cce10d00d87a75a0c64736f6c634300081a003360a060405234801561001057600080fd5b50604051611c7f380380611c7f83398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611c5f8339815191528261014c565b50610143600080516020611c5f8339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b6080516119e8610277600039600081816101ca01528181610556015281816105ab015281816107c8015261081d01526119e86000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638456cb59116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103d5578063e63ab1e9146103e8578063eab103df1461040f57600080fd5b8063d547741f1461038c578063d936547e1461039f578063d9caed12146103c257600080fd5b80639a590427116100bd5780639a5904271461035e5780639b19251a14610371578063a217fddf1461038457600080fd5b80638456cb59146102f657806385f438c1146102fe57806391d148541461032557600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102c55780635c975abb146102d85780635eb72e15146102e357600080fd5b806336568abe146102835780633f4ba83a14610296578063570618e11461029e57600080fd5b8063248a9ca311610176578063248a9ca314610219578063252f07bf1461024b5780632f2ff15d1461027057600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610204575b600080fd5b6101b06101ab3660046113c2565b610422565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bc565b610217610212366004611462565b6104bb565b005b61023d6102273660046114d5565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61021761027e3660046114ee565b61067b565b6102176102913660046114ee565b6106a7565b6102176106f8565b61023d7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec906001600160a01b031681565b60025460ff166101b0565b6102176102f136600461151e565b61072d565b6102176108f2565b61023d7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b06103333660046114ee565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61021761036c3660046115c1565b610924565b61021761037f3660046115c1565b6109d8565b61023d600081565b61021761039a3660046114ee565b610a8f565b6101b06103ad3660046115c1565b60036020526000908152604090205460ff1681565b6102176103d03660046115de565b610ab5565b6102176103e336600461161f565b610bad565b61023d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61021761041d3660046116be565b610dd9565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104b557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104c3610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104ed81610e72565b6104f5610e7c565b6001600160a01b03851660009081526003602052604090205460ff16610547576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61057b6001600160a01b0386167f000000000000000000000000000000000000000000000000000000000000000086610ebb565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906105e89088908a90899089908990600401611724565b600060405180830381600087803b15801561060257600080fd5b505af1158015610616573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161066193929190611767565b60405180910390a3506106746001600055565b5050505050565b6000828152600160208190526040909120015461069781610e72565b6106a18383610f2f565b50505050565b6001600160a01b03811633146106e9576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106f38282610fc2565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61072281610e72565b61072a611049565b50565b610735610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461075f81610e72565b610767610e7c565b6001600160a01b03861660009081526003602052604090205460ff166107b9576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107ed6001600160a01b0387167f000000000000000000000000000000000000000000000000000000000000000087610ebb565b6040517f36c99f3b0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b9061085c9089908b908a908a908a908a90600401611857565b600060405180830381600087803b15801561087657600080fd5b505af115801561088a573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37878787876040516108d794939291906118ae565b60405180910390a3506108ea6001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61091c81610e72565b61072a61109b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61094e81610e72565b6001600160a01b03821661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a0281610e72565b6001600160a01b038216610a42576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610aab81610e72565b6106a18383610fc2565b610abd610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ae781610e72565b610aef610e7c565b6001600160a01b03831660009081526003602052604090205460ff16610b41576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b556001600160a01b0384168584610ebb565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610b9a91815260200190565b60405180910390a3506106f36001600055565b610bb5610e2f565b610bbd610e7c565b60045474010000000000000000000000000000000000000000900460ff16610c11576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610c63576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce791906118da565b9050610cfe6001600160a01b0386163330876110d8565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610d85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da991906118da565b610db391906118f3565b8787604051610dc695949392919061192d565b60405180910390a2506108ea6001600055565b6000610de481610e72565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610e6b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61072a8133611111565b60025460ff1615610eb9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b038381166024830152604482018390526106f391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611188565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16610fba5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104b5565b5060006104b5565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1615610fba5760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104b5565b611051611204565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6110a3610e7c565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861107e3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106a19186918216906323b872dd90608401610ee8565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611184576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b600061119d6001600160a01b03841683611240565b905080516000141580156111c25750808060200190518101906111c09190611966565b155b156106f3576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161117b565b60025460ff16610eb9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061124e83836000611255565b9392505050565b606081471015611293576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161117b565b600080856001600160a01b031684866040516112af9190611983565b60006040518083038185875af1925050503d80600081146112ec576040519150601f19603f3d011682016040523d82523d6000602084013e6112f1565b606091505b509150915061130186838361130b565b9695505050505050565b6060826113205761131b82611380565b61124e565b815115801561133757506001600160a01b0384163b155b15611379576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161117b565b508061124e565b8051156113905780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156113d457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461124e57600080fd5b6001600160a01b038116811461072a57600080fd5b60008083601f84011261142b57600080fd5b50813567ffffffffffffffff81111561144357600080fd5b60208301915083602082850101111561145b57600080fd5b9250929050565b60008060008060006080868803121561147a57600080fd5b853561148581611404565b9450602086013561149581611404565b935060408601359250606086013567ffffffffffffffff8111156114b857600080fd5b6114c488828901611419565b969995985093965092949392505050565b6000602082840312156114e757600080fd5b5035919050565b6000806040838503121561150157600080fd5b82359150602083013561151381611404565b809150509250929050565b60008060008060008060a0878903121561153757600080fd5b863561154281611404565b9550602087013561155281611404565b945060408701359350606087013567ffffffffffffffff81111561157557600080fd5b61158189828a01611419565b909450925050608087013567ffffffffffffffff8111156115a157600080fd5b87016080818a0312156115b357600080fd5b809150509295509295509295565b6000602082840312156115d357600080fd5b813561124e81611404565b6000806000606084860312156115f357600080fd5b83356115fe81611404565b9250602084013561160e81611404565b929592945050506040919091013590565b6000806000806000806080878903121561163857600080fd5b863567ffffffffffffffff81111561164f57600080fd5b61165b89828a01611419565b909750955050602087013561166f81611404565b935060408701359250606087013567ffffffffffffffff81111561169257600080fd5b61169e89828a01611419565b979a9699509497509295939492505050565b801515811461072a57600080fd5b6000602082840312156116d057600080fd5b813561124e816116b0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061175c6080830184866116db565b979650505050505050565b8381526040602082015260006117816040830184866116db565b95945050505050565b6000813561179781611404565b6001600160a01b0316835260208201356117b081611404565b6001600160a01b03166020840152604082013567ffffffffffffffff81168082146117da57600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261181657600080fd5b820160208101903567ffffffffffffffff81111561183357600080fd5b80360382131561184257600080fd5b608060608601526117816080860182846116db565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061188f60a0830185876116db565b82810360808401526118a1818561178a565b9998505050505050505050565b8481526060602082015260006118c86060830185876116db565b828103604084015261175c818561178a565b6000602082840312156118ec57600080fd5b5051919050565b818103818111156104b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006119416060830187896116db565b856020840152828103604084015261195a8185876116db565b98975050505050505050565b60006020828403121561197857600080fd5b815161124e816116b0565b6000825160005b818110156119a4576020818601810151858301520161198a565b50600092019182525091905056fea2646970667358221220dc0b6596b7b61441087636724be59e8874b026b619128cbecb229a5609d1f02d64736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60c060405260001960035534801561001657600080fd5b506040516117aa3803806117aa83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516114d26102d86000396000818161020a015281816105d6015281816108290152818161099a01528181610aef0152610c110152600081816101be01528181610546015281816105a90152818161079901526107fc01526114d26000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b80632ccb404d1161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b80632ccb404d1461025d5780632f2ff15d1461027057600080fd5b8063116191b611610160578063116191b6146101b957806321e093b114610205578063248a9ca31461022c57600080fd5b806301ffc9a71461017c578063106e6290146101a4575b600080fd5b61018f61018a366004610fd3565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611045565b610462565b005b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b61024f61023a366004611078565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761026b3660046110da565b610507565b6101b761027e366004611172565b6106a1565b6101b7610291366004611172565b6106cc565b6101b7610725565b60015460ff1661018f565b6101b76102b736600461119e565b61075a565b6101b76102ca366004611078565b6108ef565b6101b76102dd366004611078565b61095d565b6101b7610a07565b61024f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611172565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61024f600081565b61024f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611172565b610a39565b61024f60035481565b61024f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610aa1565b61049c610aab565b6104a7848484610aea565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5846040516104ef91815260200190565b60405180910390a2506105026001600055565b505050565b61050f610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461053981610aa1565b610541610aab565b61056c7f00000000000000000000000000000000000000000000000000000000000000008785610aea565b6040517f36c99f3b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b90610608907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a90600401611335565b600060405180830381600087803b15801561062257600080fd5b505af1158015610636573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167fa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b8353780178787878660405161068694939291906113a6565b60405180910390a2506106996001600055565b505050505050565b6000828152600260205260409020600101546106bc81610aa1565b6106c68383610c72565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461071b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105028282610d72565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074f81610aa1565b610757610e31565b50565b610762610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078c81610aa1565b610794610aab565b6107bf7f00000000000000000000000000000000000000000000000000000000000000008684610aea565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610859907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016113dd565b600060405180830381600087803b15801561087357600080fd5b505af1158015610887573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d8686866040516108d59392919061142f565b60405180910390a2506108e86001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61091981610aa1565b610921610aab565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610965610aab565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109f357600080fd5b505af11580156108e8573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3181610aa1565b610757610eae565b600082815260026020526040902060010154610a5481610aa1565b6106c68383610d72565b600260005403610a9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107578133610f07565b60015460ff1615610ae8576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7c9190611449565b610b869084611462565b1115610bbe576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d083390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e39610f97565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610eb6610aab565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e84565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f93576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ae8576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fe557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461101557600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461104057600080fd5b919050565b60008060006060848603121561105a57600080fd5b6110638461101c565b95602085013595506040909401359392505050565b60006020828403121561108a57600080fd5b5035919050565b60008083601f8401126110a357600080fd5b50813567ffffffffffffffff8111156110bb57600080fd5b6020830191508360208285010111156110d357600080fd5b9250929050565b60008060008060008060a087890312156110f357600080fd5b6110fc8761101c565b955060208701359450604087013567ffffffffffffffff81111561111f57600080fd5b61112b89828a01611091565b90955093505060608701359150608087013567ffffffffffffffff81111561115257600080fd5b87016080818a03121561116457600080fd5b809150509295509295509295565b6000806040838503121561118557600080fd5b823591506111956020840161101c565b90509250929050565b6000806000806000608086880312156111b657600080fd5b6111bf8661101c565b945060208601359350604086013567ffffffffffffffff8111156111e257600080fd5b6111ee88828901611091565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff6112678261101c565b16825273ffffffffffffffffffffffffffffffffffffffff61128b6020830161101c565b1660208301526000604082013567ffffffffffffffff81168082146112af57600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126112eb57600080fd5b820160208101903567ffffffffffffffff81111561130857600080fd5b80360382131561131757600080fd5b6080606086015261132c608086018284611200565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061138760a083018587611200565b82810360808401526113998185611249565b9998505050505050505050565b8481526060602082015260006113c0606083018587611200565b82810360408401526113d28185611249565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113d2608083018486611200565b83815260406020820152600061132c604083018486611200565b60006020828403121561145b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220276d75628e17e347d14c84f90b610fc13968efff6201b1233b79eeaa7cb742c964736f6c634300081a00336080604052348015600f57600080fd5b506001600055610eea806100246000396000f3fe60806040526004361061006e5760003560e01c80636ed701691161004b5780636ed70169146100e0578063c5131691146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a2146100775780635ac1e07014610097578063676cc054146100b757005b3661007557005b005b34801561008357600080fd5b50610075610092366004610724565b610148565b3480156100a357600080fd5b506100756100b2366004610760565b6101de565b6100ca6100c536600461079b565b61021a565b6040516100d79190610896565b60405180910390f35b3480156100ec57600080fd5b5061007561024d565b34801561010157600080fd5b50610075610110366004610724565b610282565b6100756101233660046109ce565b61035d565b34801561013457600080fd5b50610075610143366004610aba565b6103a1565b6101506103d6565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610419565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b7f8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264338260405161020f929190610bed565b60405180910390a150565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a19392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61028a6103d6565b6000610297600285610cf3565b9050806000036102d3576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102f573ffffffffffffffffffffffffffffffffffffffff8416338484610419565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610394959493929190610d2e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103949493929190610db8565b600260005403610412576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104ae9085906104b4565b50505050565b60006104d673ffffffffffffffffffffffffffffffffffffffff84168361054f565b905080516000141580156104fb5750808060200190518101906104f99190610e7b565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061055d83836000610564565b9392505050565b6060814710156105a2576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610546565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105cb9190610e98565b60006040518083038185875af1925050503d8060008114610608576040519150601f19603f3d011682016040523d82523d6000602084013e61060d565b606091505b509150915061061d868383610627565b9695505050505050565b60608261063c57610637826106b6565b61055d565b8151158015610660575073ffffffffffffffffffffffffffffffffffffffff84163b155b156106af576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610546565b508061055d565b8051156106c65780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461071f57600080fd5b919050565b60008060006060848603121561073957600080fd5b83359250610749602085016106fb565b9150610757604085016106fb565b90509250925092565b60006020828403121561077257600080fd5b813567ffffffffffffffff81111561078957600080fd5b82016080818503121561055d57600080fd5b600080600083850360408112156107b157600080fd5b60208112156107bf57600080fd5b50839250602084013567ffffffffffffffff8111156107dd57600080fd5b8401601f810186136107ee57600080fd5b803567ffffffffffffffff81111561080557600080fd5b86602082840101111561081757600080fd5b939660209190910195509293505050565b60005b8381101561084357818101518382015260200161082b565b50506000910152565b60008151808452610864816020860160208601610828565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061055d602083018461084c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561091f5761091f6108a9565b604052919050565b600082601f83011261093857600080fd5b813567ffffffffffffffff811115610952576109526108a9565b61098360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108d8565b81815284602083860101111561099857600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106f857600080fd5b803561071f816109b5565b6000806000606084860312156109e357600080fd5b833567ffffffffffffffff8111156109fa57600080fd5b610a0686828701610927565b935050602084013591506040840135610a1e816109b5565b809150509250925092565b600067ffffffffffffffff821115610a4357610a436108a9565b5060051b60200190565b600082601f830112610a5e57600080fd5b8135610a71610a6c82610a29565b6108d8565b8082825260208201915060208360051b860101925085831115610a9357600080fd5b602085015b83811015610ab0578035835260209283019201610a98565b5095945050505050565b600080600060608486031215610acf57600080fd5b833567ffffffffffffffff811115610ae657600080fd5b8401601f81018613610af757600080fd5b8035610b05610a6c82610a29565b8082825260208201915060208360051b850101925088831115610b2757600080fd5b602084015b83811015610b6957803567ffffffffffffffff811115610b4b57600080fd5b610b5a8b602083890101610927565b84525060209283019201610b2c565b509550505050602084013567ffffffffffffffff811115610b8957600080fd5b610b9586828701610a4d565b925050610757604085016109c3565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2b836106fb565b16604082015273ffffffffffffffffffffffffffffffffffffffff610c52602084016106fb565b1660608201526000604083013567ffffffffffffffff8116808214610c7657600080fd5b6080840152506060830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610cb257600080fd5b830160208101903567ffffffffffffffff811115610ccf57600080fd5b803603821315610cde57600080fd5b608060a085015261061d60c085018284610ba4565b600082610d29577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d6360a083018661084c565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610dae578151865260209586019590910190600101610d90565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e4b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e3685835161084c565b94506020938401939190910190600101610dfc565b505050508281036040840152610e618186610d7c565b915050610e72606083018415159052565b95945050505050565b600060208284031215610e8d57600080fd5b815161055d816109b5565b60008251610eaa818460208701610828565b919091019291505056fea264697066735822122075e241dc7d0b3cc5bb3ca3c583250993ad9bf6a64ef50849b87060df5ab2e8e364736f6c634300081a0033a264697066735822122062bf665d76e4be4b8d6d56a64426bbb3cdc84da0e3d27ec25defcb6183436efe64736f6c634300081a0033", } // ZetaConnectorNonNativeTestABI is the input ABI used to generate the binding from. @@ -2361,9 +2362,9 @@ type ZetaConnectorNonNativeTestReceivedRevert struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// FilterReceivedRevert is a free log retrieval operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) FilterReceivedRevert(opts *bind.FilterOpts) (*ZetaConnectorNonNativeTestReceivedRevertIterator, error) { logs, sub, err := _ZetaConnectorNonNativeTest.contract.FilterLogs(opts, "ReceivedRevert") @@ -2373,9 +2374,9 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) FilterRec return &ZetaConnectorNonNativeTestReceivedRevertIterator{contract: _ZetaConnectorNonNativeTest.contract, event: "ReceivedRevert", logs: logs, sub: sub}, nil } -// WatchReceivedRevert is a free log subscription operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// WatchReceivedRevert is a free log subscription operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) WatchReceivedRevert(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeTestReceivedRevert) (event.Subscription, error) { logs, sub, err := _ZetaConnectorNonNativeTest.contract.WatchLogs(opts, "ReceivedRevert") @@ -2410,9 +2411,9 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) WatchRece }), nil } -// ParseReceivedRevert is a log parse operation binding the contract event 0x024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e. +// ParseReceivedRevert is a log parse operation binding the contract event 0x8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264. // -// Solidity: event ReceivedRevert(address sender, (address,uint64,bytes) revertContext) +// Solidity: event ReceivedRevert(address sender, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) ParseReceivedRevert(log types.Log) (*ZetaConnectorNonNativeTestReceivedRevert, error) { event := new(ZetaConnectorNonNativeTestReceivedRevert) if err := _ZetaConnectorNonNativeTest.contract.UnpackLog(event, "ReceivedRevert", log); err != nil { @@ -2499,9 +2500,9 @@ type ZetaConnectorNonNativeTestReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterReverted is a free log retrieval operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// FilterReverted is a free log retrieval operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) FilterReverted(opts *bind.FilterOpts, to []common.Address, token []common.Address) (*ZetaConnectorNonNativeTestRevertedIterator, error) { var toRule []interface{} @@ -2520,9 +2521,9 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) FilterRev return &ZetaConnectorNonNativeTestRevertedIterator{contract: _ZetaConnectorNonNativeTest.contract, event: "Reverted", logs: logs, sub: sub}, nil } -// WatchReverted is a free log subscription operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// WatchReverted is a free log subscription operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) WatchReverted(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeTestReverted, to []common.Address, token []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -2566,9 +2567,9 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) WatchReve }), nil } -// ParseReverted is a log parse operation binding the contract event 0x1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b1436. +// ParseReverted is a log parse operation binding the contract event 0xf196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b. // -// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) ParseReverted(log types.Log) (*ZetaConnectorNonNativeTestReverted, error) { event := new(ZetaConnectorNonNativeTestReverted) if err := _ZetaConnectorNonNativeTest.contract.UnpackLog(event, "Reverted", log); err != nil { @@ -2945,9 +2946,9 @@ type ZetaConnectorNonNativeTestWithdrawnAndReverted struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// FilterWithdrawnAndReverted is a free log retrieval operation binding the contract event 0xa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) FilterWithdrawnAndReverted(opts *bind.FilterOpts, to []common.Address) (*ZetaConnectorNonNativeTestWithdrawnAndRevertedIterator, error) { var toRule []interface{} @@ -2962,9 +2963,9 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) FilterWit return &ZetaConnectorNonNativeTestWithdrawnAndRevertedIterator{contract: _ZetaConnectorNonNativeTest.contract, event: "WithdrawnAndReverted", logs: logs, sub: sub}, nil } -// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// WatchWithdrawnAndReverted is a free log subscription operation binding the contract event 0xa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) WatchWithdrawnAndReverted(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeTestWithdrawnAndReverted, to []common.Address) (event.Subscription, error) { var toRule []interface{} @@ -3004,9 +3005,9 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) WatchWith }), nil } -// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0x52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c. +// ParseWithdrawnAndReverted is a log parse operation binding the contract event 0xa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017. // -// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,uint64,bytes) revertContext) +// Solidity: event WithdrawnAndReverted(address indexed to, uint256 amount, bytes data, (address,address,uint64,bytes) revertContext) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) ParseWithdrawnAndReverted(log types.Log) (*ZetaConnectorNonNativeTestWithdrawnAndReverted, error) { event := new(ZetaConnectorNonNativeTestWithdrawnAndReverted) if err := _ZetaConnectorNonNativeTest.contract.UnpackLog(event, "WithdrawnAndReverted", log); err != nil { diff --git a/v2/pkg/zrc20.t.sol/zrc20test.go b/v2/pkg/zrc20.t.sol/zrc20test.go index a855a4d1..4d24f62d 100644 --- a/v2/pkg/zrc20.t.sol/zrc20test.go +++ b/v2/pkg/zrc20.t.sol/zrc20test.go @@ -50,7 +50,7 @@ type StdInvariantFuzzSelector struct { // ZRC20TestMetaData contains all meta data concerning the ZRC20Test contract. var ZRC20TestMetaData = &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\":\"testApproveFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testBurn\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testBurnFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDeposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositFailsIfSenderIsNotGateway\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransfer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFrom\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfRecipientIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTransferFromFailsIfSenderIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGasLimitFailsIfSenderIsNotProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddressFailsIfSenderIsNotProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateGatewayAddressFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateNameAndSymbol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateNameAndSymbolFailsIfSenderIsNotProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateProtocolFlatFeeFailsIfSenderIsNotProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddressFailsIfSenderIsNotProtocol\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpdateSystemContractAddressFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfNoAllowance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfNoBalance\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFee\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasCoinNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawGasFeeFailsIfGasPriceNotSetForChainId\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testZRC20BasicInfo\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"CallerIsNotFungibleModule\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowAllowance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LowBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasCoin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroGasPrice\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061eb078061003c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c80638ce7ef051161019c578063d1fd3291116100ee578063dfbdf60011610097578063f1f87f4011610071578063f1f87f40146104c3578063f2413096146104cb578063fa7626d4146104d357600080fd5b8063dfbdf600146104ab578063e13aba48146104b3578063e20c9f71146104bb57600080fd5b8063d591221f116100c8578063d591221f14610493578063d97136a21461049b578063dcba486a146104a357600080fd5b8063d1fd32911461047b578063d27b042714610483578063d509b16c1461048b57600080fd5b8063b0464fdc11610150578063ba414fa61161012a578063ba414fa614610453578063c35f9d1d1461046b578063d04cda981461047357600080fd5b8063b0464fdc1461043b578063b5508aa914610443578063b79cad091461044b57600080fd5b806392a68b8d1161018157806392a68b8d14610423578063a4aa6c7c1461042b578063ae9687dc1461043357600080fd5b80638ce7ef0514610406578063916a17c61461040e57600080fd5b80633f7286f4116102605780636ff45850116102095780637f924c4e116101e35780637f924c4e146103e157806380326680146103e957806385226c81146103f157600080fd5b80636ff45850146103c957806370557298146103d15780637ee68316146103d957600080fd5b80635539d92e1161023a5780635539d92e146103a45780635f01db7e146103ac57806366d9a9a0146103b457600080fd5b80633f7286f41461038c5780634cfc0aaa14610394578063513999621461039c57600080fd5b806328438826116102c2578063367e31231161029c578063367e3123146103745780633be9ec801461037c5780633e5e3c231461038457600080fd5b8063284388261461034f5780632ade3880146103575780632f6254fc1461036c57600080fd5b80630ea7e563116102f35780630ea7e563146103215780631142744e146103295780631ed7831c1461033157600080fd5b80630809dfef1461030f5780630a9254e414610319575b600080fd5b6103176104e0565b005b61031761066e565b610317610d6a565b610317610e53565b610339610f37565b6040516103469190619737565b60405180910390f35b610317610f99565b61035f6111e4565b60405161034691906197d3565b610317611326565b610317611497565b610317611569565b610339611756565b6103396117b6565b610317611816565b6103176118ef565b610317611c6c565b610317611e99565b6103bc612006565b6040516103469190619939565b610317612188565b610317612398565b6103176125e8565b610317612a79565b610317612c9d565b6103f9612d71565b60405161034691906199d7565b610317612e41565b610416613041565b6040516103469190619a4e565b61031761313c565b61031761320f565b6103176133c4565b610416613651565b6103f961374c565b61031761381c565b61045b613bae565b6040519015158152602001610346565b610317613c82565b610317613d54565b610317613e98565b610317613fdb565b61031761411e565b6103176147b2565b610317614896565b610317614a1c565b610317614c9f565b610317614de2565b61033961508c565b6103176150ec565b610317615232565b601f5461045b9060ff1681565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561053957600080fd5b505af115801561054d573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156105bd57600080fd5b505af11580156105d1573d6000803e3d6000fd5b5050601f546040517f47e7ef2400000000000000000000000000000000000000000000000000000000815260006004820152620186a060248201526101009091046001600160a01b031692506347e7ef2491506044015b6020604051808303816000875af1158015610647573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066b9190619ae5565b50565b602480547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602580549091166112341790556040516106b490619657565b604051809103906000f0801580156106d0573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054925190810193909352921660448201526107b4919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc9550000000000000000000000000000000000000000000000000000000017905261548e565b602280546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602180549092168117909155604080517f2722feee0000000000000000000000000000000000000000000000000000000081529051632722feee916004808201926020929091908290030181865afa15801561084d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108719190619b23565b602680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f06447d560000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561090f57600080fd5b505af1158015610923573d6000803e3d6000fd5b50505050600080600060405161093890619664565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610974573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556021546040516012936001938493600093919216906109ca90619671565b6109d996959493929190619b3e565b604051809103906000f0801580156109f5573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03938416810291909117918290556020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152919092048316602482015291169063ee2815ba90604401600060405180830381600087803b158015610a9557600080fd5b505af1158015610aa9573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610b1357600080fd5b505af1158015610b27573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610ba757600080fd5b505af1158015610bbb573d6000803e3d6000fd5b50506022546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610c3b57600080fd5b505af1158015610c4f573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015610ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf19190619ae5565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610d5057600080fd5b505af1158015610d64573d6000803e3d6000fd5b50505050565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610dd657600080fd5b505af1158015610dea573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc91506024015b600060405180830381600087803b158015610d5057600080fd5b604051630618f58760e51b81527fddb5de5e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610ebf57600080fd5b505af1158015610ed3573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef249150604401610628565b60606016805480602002602001604051908101604052809291908181526020018280548015610f8f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f71575b5050505050905090565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015610fee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110129190619c33565b905061101f6000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611097573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bb9190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561112857600080fd5b505af115801561113c573d6000803e3d6000fd5b5050601f546025546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039182166024820152604481018690526101009092041692506323b872dd91506064015b6020604051808303816000875af11580156111bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111df9190619ae5565b505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561131d57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561130657838290600052602060002001805461127990619c4c565b80601f01602080910402602001604051908101604052809291908181526020018280546112a590619c4c565b80156112f25780601f106112c7576101008083540402835291602001916112f2565b820191906000526020600020905b8154815290600101906020018083116112d557829003601f168201915b50505050508152602001906001019061125a565b505050508152505081526020019060010190611208565b50505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561137f57600080fd5b505af1158015611393573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401600060405180830381600087803b1580156113fb57600080fd5b505af115801561140f573d6000803e3d6000fd5b50505050611495601f60019054906101000a90046001600160a01b03166001600160a01b031663f2441b326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611469573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148d9190619b23565b613211615535565b565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561150357600080fd5b505af1158015611517573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401610e39565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156115c257600080fd5b505af11580156115d6573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561164057600080fd5b505af1158015611654573d6000803e3d6000fd5b5050604051630618f58760e51b81527fe661aed0000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611732573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d649190619c99565b60606018805480602002602001604051908101604052809291908181526020018280548015610f8f576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f71575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610f8f576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f71575050505050905090565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b5050601f546040517f095ea7b300000000000000000000000000000000000000000000000000000000815260006004820152600a60248201526101009091046001600160a01b0316925063095ea7b39150604401610628565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561194d57600080fd5b505af1158015611961573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156119c857600080fd5b505af11580156119dc573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a3957600080fd5b505af1158015611a4d573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015611ab457600080fd5b505af1158015611ac8573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905260006024830152925063095ea7b391506044016020604051808303816000875af1158015611b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5f9190619ae5565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611bbe57600080fd5b505af1158015611bd2573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061119c9190600190603801619cc5565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611cd857600080fd5b505af1158015611cec573d6000803e3d6000fd5b5050601f546040517fc47f002700000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f544f4b454e32000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063c47f00279150606401600060405180830381600087803b158015611d8057600080fd5b505af1158015611d94573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015611e0457600080fd5b505af1158015611e18573d6000803e3d6000fd5b5050601f546040517fb84c8246000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f544b4e320000000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063b84c82469150606401610e39565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611ef257600080fd5b505af1158015611f06573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015611f6d57600080fd5b505af1158015611f81573d6000803e3d6000fd5b50505050611495600a601f60019054906101000a90046001600160a01b03166001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fdd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120019190619c33565b6154ad565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561131d578382906000526020600020906002020160405180604001604052908160008201805461205d90619c4c565b80601f016020809104026020016040519081016040528092919081815260200182805461208990619c4c565b80156120d65780601f106120ab576101008083540402835291602001916120d6565b820191906000526020600020905b8154815290600101906020018083116120b957829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561217057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161211d5790505b5050505050815250508152602001906001019061202a565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa1580156121dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122019190619c33565b905061220e6000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa9190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561231757600080fd5b505af115801561232b573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd915060640161119c565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa1580156123ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124119190619c33565b905061241e6000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c35092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b99190619ae5565b50601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201849052610100909204909116906323b872dd906064015b6020604051808303816000875af115801561253e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125629190619ae5565b50601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa1580156125b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125dc9190619c33565b90506111df82826154ad565b6126a16040518060400160405280600581526020017f544f4b454e000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612674573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261269c9190810190619daf565b615596565b61272d6040518060400160405280600381526020017f544b4e0000000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612674573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561278657600080fd5b505af115801561279a573d6000803e3d6000fd5b5050601f546040517fc47f002700000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f544f4b454e32000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063c47f00279150606401600060405180830381600087803b15801561282e57600080fd5b505af1158015612842573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561289f57600080fd5b505af11580156128b3573d6000803e3d6000fd5b5050601f546040517fb84c8246000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f544b4e320000000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063b84c82469150606401600060405180830381600087803b15801561294957600080fd5b505af115801561295d573d6000803e3d6000fd5b505050506129ed6040518060400160405280600681526020017f544f4b454e320000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612674573d6000803e3d6000fd5b6114956040518060400160405280600481526020017f544b4e3200000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612674573d6000803e3d6000fd5b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ace573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af29190619c33565b9050612b01620186a0826154ad565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612b5a57600080fd5b505af1158015612b6e573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015612bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c109190619ae5565b506000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8a9190619c33565b9050612c9962030d40826154ad565b5050565b604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612d0957600080fd5b505af1158015612d1d573d6000803e3d6000fd5b5050601f546040517f42966c68000000000000000000000000000000000000000000000000000000008152620249f060048201526101009091046001600160a01b031692506342966c689150602401610628565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561131d578382906000526020600020018054612db490619c4c565b80601f0160208091040260200160405190810160405280929190818152602001828054612de090619c4c565b8015612e2d5780601f10612e0257610100808354040283529160200191612e2d565b820191906000526020600020905b815481529060010190602001808311612e1057829003601f168201915b505050505081526020019060010190612d95565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612e96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eba9190619c33565b9050612ec76000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f639190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612fd057600080fd5b505af1158015612fe4573d6000803e3d6000fd5b5050601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810186905261010090920416925063a9059cbb915060440161119c565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561131d5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561312457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116130d15790505b50505050508152505081526020019060010190613065565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156131a857600080fd5b505af11580156131bc573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401610e39565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015613287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ab9190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561331857600080fd5b505af115801561332c573d6000803e3d6000fd5b5050601f546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815260006004820152602481018590526101009091046001600160a01b0316925063a9059cbb91506044015b6020604051808303816000875af11580156133a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c999190619ae5565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015613419573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134419190810190619daf565b90506134826040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525082615596565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156134d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134ff9190810190619daf565b90506135406040518060400160405280600381526020017f544b4e000000000000000000000000000000000000000000000000000000000081525082615596565b6000601f60019054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613595573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b99190619df8565b90506135c960128260ff166154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561361e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136429190619c33565b9050610d64620186a0826154ad565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561131d5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561373457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116136e15790505b50505050508152505081526020019060010190613675565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561131d57838290600052602060002001805461378f90619c4c565b80601f01602080910402602001604051908101604052809291908181526020018280546137bb90619c4c565b80156138085780601f106137dd57610100808354040283529160200191613808565b820191906000526020600020905b8154815290600101906020018083116137eb57829003601f168201915b505050505081526020019060010190613770565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a906305f5e10090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561387e57600080fd5b505af1158015613892573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156138f957600080fd5b505af115801561390d573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561396a57600080fd5b505af115801561397e573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156139e557600080fd5b505af11580156139f9573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b031660048201819052630bebc2006024830152925063095ea7b391506044016020604051808303816000875af1158015613a6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a939190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613b0057600080fd5b505af1158015613b14573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061119c9190606490603801619cc5565b60085460009060ff1615613bc6575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c7b9190619c33565b1415905090565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613cee57600080fd5b505af1158015613d02573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401610e39565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613dad57600080fd5b505af1158015613dc1573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015613e2857600080fd5b505af1158015613e3c573d6000803e3d6000fd5b50505050611495600a601f60019054906101000a90046001600160a01b03166001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fdd573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613ef157600080fd5b505af1158015613f05573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613f7557600080fd5b505af1158015613f89573d6000803e3d6000fd5b5050601f546040517fccc77599000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063ccc775999150602401610e39565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561403457600080fd5b505af1158015614048573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156140b857600080fd5b505af11580156140cc573d6000803e3d6000fd5b5050601f546040517fc835d7cc000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063c835d7cc9150602401610e39565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561417c57600080fd5b505af1158015614190573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156141f757600080fd5b505af115801561420b573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561426857600080fd5b505af115801561427c573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156142e357600080fd5b505af11580156142f7573d6000803e3d6000fd5b5050601f54602480546040516370a0823160e01b81526001600160a01b039182166004820152600095506101009093041692506370a082319101602060405180830381865afa15801561434e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143729190619c33565b9050614381620186a0826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156143d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143fa9190619c33565b9050614409620186a0826154ad565b601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561445e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144829190619c33565b601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905261c350602483015291925063095ea7b3906044016020604051808303816000875af11580156144f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145189190619ae5565b50601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b03610100909304929092169163c7012626916145b0919061c35090603801619cc5565b6020604051808303816000875af11580156145cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145f39190619ae5565b50601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061466d9190619c33565b905061468d8561467d8885619e4a565b6146879190619e4a565b826154ad565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa1580156146e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147059190619c33565b9050614721866147178961c350619e5d565b6146879190619e5d565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614776573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061479a9190619c33565b90506147a861c350826154ad565b5050505050505050565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614807573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061482b9190619c33565b90506148386000826154ad565b601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c350602482018190529261010090049091169063a9059cbb9060440161251f565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561490e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149329190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561499f57600080fd5b505af11580156149b3573d6000803e3d6000fd5b5050601f54602480546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928101929092526044820186905261010090920490911692506323b872dd9150606401613381565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614a7557600080fd5b505af1158015614a89573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a6004820181905293508392506101009091046001600160a01b03169063f687d12a90602401600060405180830381600087803b158015614af557600080fd5b505af1158015614b09573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614b6657600080fd5b505af1158015614b7a573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015614be157600080fd5b505af1158015614bf5573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015614c4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c729190619c99565b601f549193509150614c929061010090046001600160a01b031683615535565b610d646146878486619e4a565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614cf857600080fd5b505af1158015614d0c573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401600060405180830381600087803b158015614d7457600080fd5b505af1158015614d88573d6000803e3d6000fd5b50505050611495601f60019054906101000a90046001600160a01b03166001600160a01b0316638b851b956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611469573d6000803e3d6000fd5b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e5a9190619c33565b9050614e69620186a0826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ee29190619c33565b9050614ef1620186a0826154ad565b601f546040517f42966c6800000000000000000000000000000000000000000000000000000000815261c35060048201526101009091046001600160a01b0316906342966c68906024016020604051808303816000875af1158015614f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f7e9190619ae5565b50601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614fd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ff79190619c33565b905061500561c350826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561505a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061507e9190619c33565b9050610d6461c350826154ad565b60606015805480602002602001604051908101604052809291908181526020018280548015610f8f576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f71575050505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561514557600080fd5b505af1158015615159573d6000803e3d6000fd5b50506020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063ee2815ba9150604401600060405180830381600087803b1580156151c357600080fd5b505af11580156151d7573d6000803e3d6000fd5b5050604051630618f58760e51b81527f78fff396000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016116ab565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015615287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906152ab9190619c33565b90506152b86000826154ad565b601f54602480546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201819052928101929092526000926101009004169063dd62ed3e90604401602060405180830381865afa15801561532e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906153529190619c33565b905061535f6000826154ad565b604051630618f58760e51b81527f10bad14700000000000000000000000000000000000000000000000000000000600482015261c35090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156153cf57600080fd5b505af11580156153e3573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd91506064016020604051808303816000875af115801561546a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d649190619ae5565b600061549861967e565b6154a38484836155e8565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b15801561551957600080fd5b505afa15801561552d573d6000803e3d6000fd5b505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401615501565b6040517ff320d963000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f320d963906155019085908590600401619e70565b6000806155f58584615663565b90506156586040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001615643929190619e95565b6040516020818303038152906040528561566f565b9150505b9392505050565b600061565c838361569d565b60c081015151600090156156935761568c84848460c001516156b8565b905061565c565b61568c848461585e565b60006156a98383615949565b61565c8383602001518461566f565b6000806156c3615955565b905060006156d18683615a28565b905060006156e88260600151836020015185615ece565b905060006156f8838389896160e0565b9050600061570582616f5d565b602081015181519192509060030b156157785789826040015160405160200161572f929190619eb7565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261576f91600401619f38565b60405180910390fd5b60006157bb6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161712c565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061580e908490600401619f38565b602060405180830381865afa15801561582b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061584f9190619b23565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906158b3908790600401619f38565b600060405180830381865afa1580156158d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526158f89190810190619f6b565b905060006159268285604051602001615912929190619fa0565b60405160208183030381529060405261732c565b90506001600160a01b0381166154a357848460405160200161572f929190619fcf565b612c998282600061733f565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906159dc90849060040161a07a565b600060405180830381865afa1580156159f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615a219190810190619daf565b9250505090565b615a5a6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050615aa56040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b615aae85617442565b60208201526000615abe86617827565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615b00573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b289190810190619daf565b86838560200151604051602001615b42949392919061a0c1565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190615b9a908590600401619f38565b600060405180830381865afa158015615bb7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615bdf9190810190619daf565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615c2790849060040161a1c5565b602060405180830381865afa158015615c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615c689190619ae5565b615c7d578160405160200161572f919061a217565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615cc290849060040161a2a9565b600060405180830381865afa158015615cdf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615d079190810190619daf565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690615d4e90849060040161a2fb565b602060405180830381865afa158015615d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615d8f9190619ae5565b15615e24576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615dd990849060040161a2fb565b600060405180830381865afa158015615df6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615e1e9190810190619daf565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001615e49919061a34d565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401615e75929190619e70565b600060405180830381865afa158015615e92573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615eba9190810190619daf565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081615eea5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110615f4a57615f4a61a3b9565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110615f9e57615f9e61a3b9565b602002602001018190525084604051602001615fba919061a3e8565b60405160208183030381529060405281600281518110615fdc57615fdc61a3b9565b602002602001018190525082604051602001615ff8919061a454565b6040516020818303038152906040528160038151811061601a5761601a61a3b9565b6020026020010181905250600061603082616f5d565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506160c19060408051808201825260008082526020918201528151808301909252845182528085019082015290617aaa565b6160d6578560405160200161572f919061a495565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616130565b511590565b6162a4578260200151156161ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161576f565b8260c00151156162a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161576f565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816162bd57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806163189061a526565b935060ff168151811061632d5761632d61a3b9565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161637e919061a545565b6040516020818303038152906040528282806163999061a526565b935060ff16815181106163ae576163ae61a3b9565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806163fb9061a526565b935060ff16815181106164105761641061a3b9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061645d9061a526565b935060ff16815181106164725761647261a3b9565b6020026020010181905250876020015182828061648e9061a526565b935060ff16815181106164a3576164a361a3b9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806164f09061a526565b935060ff16815181106165055761650561a3b9565b60209081029190910101528751828261651d8161a526565b935060ff16815181106165325761653261a3b9565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061657f9061a526565b935060ff16815181106165945761659461a3b9565b60200260200101819052506165a846617b0b565b82826165b38161a526565b935060ff16815181106165c8576165c861a3b9565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806166159061a526565b935060ff168151811061662a5761662a61a3b9565b6020026020010181905250868282806166429061a526565b935060ff16815181106166575761665761a3b9565b602090810291909101015285511561677e5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826166a88161a526565b935060ff16815181106166bd576166bd61a3b9565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061670d908990600401619f38565b600060405180830381865afa15801561672a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167529190810190619daf565b828261675d8161a526565b935060ff16815181106167725761677261a3b9565b60200260200101819052505b84602001511561684e5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826167c78161a526565b935060ff16815181106167dc576167dc61a3b9565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806168299061a526565b935060ff168151811061683e5761683e61a3b9565b6020026020010181905250616a15565b61688661612b8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6169195760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826168c98161a526565b935060ff16815181106168de576168de61a3b9565b60200260200101819052508460a001516040516020016168fe919061a3e8565b6040516020818303038152906040528282806168299061a526565b8460c0015115801561695c57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261695a90511590565b155b15616a155760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826169a08161a526565b935060ff16815181106169b5576169b561a3b9565b60200260200101819052506169c988617bab565b6040516020016169d9919061a3e8565b6040516020818303038152906040528282806169f49061a526565b935060ff1681518110616a0957616a0961a3b9565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152616a4990511590565b616ade5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282616a8c8161a526565b935060ff1681518110616aa157616aa161a3b9565b60200260200101819052508460400151828280616abd9061a526565b935060ff1681518110616ad257616ad261a3b9565b60200260200101819052505b606085015115616bff5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282616b278161a526565b935060ff1681518110616b3c57616b3c61a3b9565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616bab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616bd39190810190619daf565b8282616bde8161a526565b935060ff1681518110616bf357616bf361a3b9565b60200260200101819052505b60e08501515115616ca65760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282616c498161a526565b935060ff1681518110616c5e57616c5e61a3b9565b6020026020010181905250616c7a8560e0015160000151617b0b565b8282616c858161a526565b935060ff1681518110616c9a57616c9a61a3b9565b60200260200101819052505b60e08501516020015115616d505760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282616cf38161a526565b935060ff1681518110616d0857616d0861a3b9565b6020026020010181905250616d248560e0015160200151617b0b565b8282616d2f8161a526565b935060ff1681518110616d4457616d4461a3b9565b60200260200101819052505b60e08501516040015115616dfa5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282616d9d8161a526565b935060ff1681518110616db257616db261a3b9565b6020026020010181905250616dce8560e0015160400151617b0b565b8282616dd98161a526565b935060ff1681518110616dee57616dee61a3b9565b60200260200101819052505b60e08501516060015115616ea45760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282616e478161a526565b935060ff1681518110616e5c57616e5c61a3b9565b6020026020010181905250616e788560e0015160600151617b0b565b8282616e838161a526565b935060ff1681518110616e9857616e9861a3b9565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616ec257616ec2619ce7565b604051908082528060200260200182016040528015616ef557816020015b6060815260200190600190039081616ee05790505b50905060005b8260ff168160ff161015616f4e57838160ff1681518110616f1e57616f1e61a3b9565b6020026020010151828260ff1681518110616f3b57616f3b61a3b9565b6020908102919091010152600101616efb565b5093505050505b949350505050565b616f846040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161700a9186910161a5b0565b600060405180830381865afa158015617027573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261704f9190810190619daf565b9050600061705d868361869a565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161708d91906199d7565b6000604051808303816000875af11580156170ac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526170d4919081019061a5f7565b805190915060030b158015906170ed5750602081015151155b80156170fc5750604081015151155b156160d657816000815181106171145761711461a3b9565b602002602001015160405160200161572f919061a6ad565b606060006171618560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506171989082905b906187ef565b156172f55760006172158261720f846172096171db8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618816565b90618878565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506172799082906187ef565b156172e357604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172e0905b82906188fd565b90505b6172ec81618923565b9250505061565c565b821561730e57848460405160200161572f92919061a899565b505060408051602081019091526000815261565c565b509392505050565b6000808251602084016000f09392505050565b8160a001511561734e57505050565b600061735b84848461898c565b9050600061736882616f5d565b602081015181519192509060030b1580156174045750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261740490604080518082018252600080825260209182015281518083019092528451825280850190820152617192565b1561741157505050505050565b6040820151511561743157816040015160405160200161572f919061a940565b8060405160200161572f919061a99e565b606060006174778360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506174dc905b8290617aaa565b1561754b57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c90617546908390618f27565b618923565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175ad905b8290618fb1565b60010361767a57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617613906172d9565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c90617546905b83906188fd565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176d9906174d5565b1561781057604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061774190839061904b565b9050600081600183516177549190619e5d565b815181106177645761776461a3b9565b602002602001015190506178076175466177da6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618f27565b95945050505050565b8260405160200161572f919061aa09565b50919050565b6060600061785c8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506178be906174d5565b156178cc5761565c81618923565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261792b906175a6565b60010361799557604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c9061754690617673565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179f4906174d5565b1561781057604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617a5c90839061904b565b9050600181511115617a98578060028251617a779190619e5d565b81518110617a8757617a8761a3b9565b602002602001015192505050919050565b508260405160200161572f919061aa09565b805182516000911115617abf575060006154a7565b81518351602085015160009291617ad591619e4a565b617adf9190619e5d565b905082602001518103617af65760019150506154a7565b82516020840151819020912014905092915050565b60606000617b18836190f0565b600101905060008167ffffffffffffffff811115617b3857617b38619ce7565b6040519080825280601f01601f191660200182016040528015617b62576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084617b6c57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617c37905b82906191d2565b15617c7757505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cd690617c30565b15617d1657505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d7590617c30565b15617db557505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e1490617c30565b80617e795750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e7990617c30565b15617eb957505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f1890617c30565b80617f7d5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f7d90617c30565b15617fbd57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261801c90617c30565b806180815750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261808190617c30565b156180c157505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261812090617c30565b806181855750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261818590617c30565b156181c557505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261822490617c30565b1561826457505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526182c390617c30565b1561830357505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261836290617c30565b156183a257505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261840190617c30565b1561844157505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526184a090617c30565b156184e057505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261853f90617c30565b806185a45750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185a490617c30565b156185e457505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261864390617c30565b1561868357505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161572f929060200161aae7565b60608060005b845181101561872557818582815181106186bc576186bc61a3b9565b60200260200101516040516020016186d5929190619fa0565b6040516020818303038152906040529150600185516186f49190619e5d565b811461871d578160405160200161870b919061ac50565b60405160208183030381529060405291505b6001016186a0565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161873e57905050905083816000815181106187695761876961a3b9565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106187bd576187bd61a3b9565b602002602001018190525081816002815181106187dc576187dc61a3b9565b6020908102919091010152949350505050565b602080830151835183519284015160009361880d92918491906191e6565b14159392505050565b6040805180820190915260008082526020820152600061884884600001518560200151856000015186602001516192f7565b905083602001518161885a9190619e5d565b84518590618869908390619e5d565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561889d5750816154a7565b60208083015190840151600191146188c45750815160208481015190840151829020919020145b80156188f5578251845185906188db908390619e5d565b90525082516020850180516188f1908390619e4a565b9052505b509192915050565b604080518082019091526000808252602082015261891c838383619417565b5092915050565b60606000826000015167ffffffffffffffff81111561894457618944619ce7565b6040519080825280601f01601f19166020018201604052801561896e576020820181803683370190505b509050600060208201905061891c81856020015186600001516194c2565b60606000618998615955565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816189b557905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280618a109061a526565b935060ff1681518110618a2557618a2561a3b9565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618a76919061ac91565b604051602081830303815290604052828280618a919061a526565b935060ff1681518110618aa657618aa661a3b9565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280618af39061a526565b935060ff1681518110618b0857618b0861a3b9565b602002602001018190525082604051602001618b24919061a454565b604051602081830303815290604052828280618b3f9061a526565b935060ff1681518110618b5457618b5461a3b9565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280618ba19061a526565b935060ff1681518110618bb657618bb661a3b9565b6020026020010181905250618bcb878461953c565b8282618bd68161a526565b935060ff1681518110618beb57618beb61a3b9565b602090810291909101015285515115618c975760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282618c3d8161a526565b935060ff1681518110618c5257618c5261a3b9565b6020026020010181905250618c6b86600001518461953c565b8282618c768161a526565b935060ff1681518110618c8b57618c8b61a3b9565b60200260200101819052505b856080015115618d055760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282618ce08161a526565b935060ff1681518110618cf557618cf561a3b9565b6020026020010181905250618d6b565b8415618d6b5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282618d4a8161a526565b935060ff1681518110618d5f57618d5f61a3b9565b60200260200101819052505b60408601515115618e075760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282618db58161a526565b935060ff1681518110618dca57618dca61a3b9565b60200260200101819052508560400151828280618de69061a526565b935060ff1681518110618dfb57618dfb61a3b9565b60200260200101819052505b856060015115618e715760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282618e508161a526565b935060ff1681518110618e6557618e6561a3b9565b60200260200101819052505b60008160ff1667ffffffffffffffff811115618e8f57618e8f619ce7565b604051908082528060200260200182016040528015618ec257816020015b6060815260200190600190039081618ead5790505b50905060005b8260ff168160ff161015618f1b57838160ff1681518110618eeb57618eeb61a3b9565b6020026020010151828260ff1681518110618f0857618f0861a3b9565b6020908102919091010152600101618ec8565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618f4c5750816154a7565b81518351602085015160009291618f6291619e4a565b618f6c9190619e5d565b60208401519091506001908214618f8d575082516020840151819020908220145b8015618fa857835185518690618fa4908390619e5d565b9052505b50929392505050565b6000808260000151618fd585600001518660200151866000015187602001516192f7565b618fdf9190619e4a565b90505b83516020850151618ff39190619e4a565b811161891c57816190038161acd6565b925050826000015161903a85602001518361901e9190619e5d565b865161902a9190619e5d565b83866000015187602001516192f7565b6190449190619e4a565b9050618fe2565b606060006190598484618fb1565b619064906001619e4a565b67ffffffffffffffff81111561907c5761907c619ce7565b6040519080825280602002602001820160405280156190af57816020015b606081526020019060019003908161909a5790505b50905060005b8151811015617324576190cb61754686866188fd565b8282815181106190dd576190dd61a3b9565b60209081029190910101526001016190b5565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619139577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619165576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061918357662386f26fc10000830492506010015b6305f5e100831061919b576305f5e100830492506008015b61271083106191af57612710830492506004015b606483106191c1576064830492506002015b600a83106154a75760010192915050565b60006191de838361957c565b159392505050565b6000808584116192ed5760208411619299576000841561923157600161920d866020619e5d565b61921890600861acf0565b61922390600261adee565b61922d9190619e5d565b1990505b83518116856192408989619e4a565b61924a9190619e5d565b805190935082165b8181146192845787841161926c5787945050505050616f55565b836192768161adfa565b945050828451169050619252565b61928e8785619e4a565b945050505050616f55565b8383206192a68588619e5d565b6192b09087619e4a565b91505b8582106192eb578482208082036192d8576192ce8684619e4a565b9350505050616f55565b6192e3600184619e5d565b9250506192b3565b505b5092949350505050565b6000838186851161940257602085116193b1576000851561934357600161931f876020619e5d565b61932a90600861acf0565b61933590600261adee565b61933f9190619e5d565b1990505b845181166000876193548b8b619e4a565b61935e9190619e5d565b855190915083165b8281146193a35781861061938b5761937e8b8b619e4a565b9650505050505050616f55565b856193958161acd6565b965050838651169050619366565b859650505050505050616f55565b508383206000905b6193c38689619e5d565b8211619400578583208082036193df5783945050505050616f55565b6193ea600185619e4a565b93505081806193f89061acd6565b9250506193b9565b505b61940c8787619e4a565b979650505050505050565b6040805180820190915260008082526020820152600061944985600001518660200151866000015187602001516192f7565b6020808701805191860191909152519091506194659082619e5d565b8352845160208601516194789190619e4a565b810361948757600085526194b9565b835183516194959190619e4a565b855186906194a4908390619e5d565b90525083516194b39082619e4a565b60208601525b50909392505050565b602081106194fa57815183526194d9602084619e4a565b92506194e6602083619e4a565b91506194f3602082619e5d565b90506194c2565b6000198115619529576001619510836020619e5d565b61951c9061010061adee565b6195269190619e5d565b90505b9151835183169219169190911790915250565b6060600061954a8484615a28565b80516020808301516040519394506195649390910161ae11565b60405160208183030381529060405291505092915050565b815181516000919081111561958f575081515b6020808501519084015160005b8381101561964857825182518082146196185760001960208710156195f7576001846195c9896020619e5d565b6195d39190619e4a565b6195de90600861acf0565b6195e990600261adee565b6195f39190619e5d565b1990505b81811683821681810391146196155797506154a79650505050505050565b50505b619623602086619e4a565b9450619630602085619e4a565b935050506020816196419190619e4a565b905061959c565b50845186516160d6919061ae69565b610b678061ae8a83390190565b61106f8061b9f183390190565b6120728061ca6083390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016196c16196c6565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016196c16040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156197785783516001600160a01b0316835260209384019390920191600101619751565b509095945050505050565b60005b8381101561979e578181015183820152602001619786565b50506000910152565b600081518084526197bf816020860160208601619783565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156198b5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261989f8486516197a7565b6020958601959094509290920191600101619865565b5091975050506020948501949290920191506001016197fb565b50929695505050505050565b600081518084526020840193506020830160005b8281101561992f5781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016198ef565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526199a560408801826197a7565b90506020820151915086810360208801526199c081836198db565b965050506020938401939190910190600101619961565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452619a398583516197a7565b945060209384019391909101906001016199ff565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152619acf60408701826198db565b9550506020938401939190910190600101619a76565b600060208284031215619af757600080fd5b8151801515811461565c57600080fd5b80516001600160a01b0381168114619b1e57600080fd5b919050565b600060208284031215619b3557600080fd5b61565c82619b07565b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619bf8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152619c1960c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215619c4557600080fd5b5051919050565b600181811c90821680619c6057607f821691505b602082108103617821577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008060408385031215619cac57600080fd5b619cb583619b07565b6020939093015192949293505050565b604081526000619cd860408301856197a7565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715619d3957619d39619ce7565b60405290565b60008067ffffffffffffffff841115619d5a57619d5a619ce7565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619d8957619d89619ce7565b604052838152905080828401851015619da157600080fd5b617324846020830185619783565b600060208284031215619dc157600080fd5b815167ffffffffffffffff811115619dd857600080fd5b8201601f81018413619de957600080fd5b6154a384825160208401619d3f565b600060208284031215619e0a57600080fd5b815160ff8116811461565c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156154a7576154a7619e1b565b818103818111156154a7576154a7619e1b565b604081526000619e8360408301856197a7565b828103602084015261565881856197a7565b6001600160a01b0383168152604060208201526000616f5560408301846197a7565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351619eef81601a850160208801619783565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351619f2c81601c840160208801619783565b01601c01949350505050565b60208152600061565c60208301846197a7565b600082601f830112619f5c57600080fd5b61565c83835160208501619d3f565b600060208284031215619f7d57600080fd5b815167ffffffffffffffff811115619f9457600080fd5b6154a384828501619f4b565b60008351619fb2818460208801619783565b835190830190619fc6818360208801619783565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a00781601a850160208801619783565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161a044816033840160208801619783565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061565c60808301846197a7565b6000855161a0d3818460208a01619783565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161a10d816001840160208a01619783565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161a14b816002840160208901619783565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161a18d816002840160208801619783565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061a1d860408301846197a7565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161a24f81601f850160208701619783565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061a2bc60408301846197a7565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061a30e60408301846197a7565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161a385816014850160208701619783565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161a420816001850160208701619783565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161a466818460208701619783565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161a51981604b850160208701619783565b91909101604b0192915050565b600060ff821660ff810361a53c5761a53c619e1b565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161a5a3816029850160208701619783565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061565c60808301846197a7565b60006020828403121561a60957600080fd5b815167ffffffffffffffff81111561a62057600080fd5b82016060818503121561a63257600080fd5b61a63a619d16565b81518060030b811461a64b57600080fd5b8152602082015167ffffffffffffffff81111561a66757600080fd5b61a67386828501619f4b565b602083015250604082015167ffffffffffffffff81111561a69357600080fd5b61a69f86828501619f4b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a70b816021850160208701619783565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a8f7816021850160208801619783565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a93481602e840160208801619783565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161a5a3816029850160208701619783565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a9fc816022850160208701619783565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161aa4181600e850160208701619783565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161ab1f816018850160208801619783565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161ab5c81601c840160208801619783565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161ac62818460208701619783565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161acc981601c850160208701619783565b91909101601c0192915050565b6000600019820361ace95761ace9619e1b565b5060010190565b80820281158282048414176154a7576154a7619e1b565b6001815b600184111561ad425780850481111561ad265761ad26619e1b565b600184161561ad3457908102905b60019390931c92800261ad0b565b935093915050565b60008261ad59575060016154a7565b8161ad66575060006154a7565b816001811461ad7c576002811461ad865761ada2565b60019150506154a7565b60ff84111561ad975761ad97619e1b565b50506001821b6154a7565b5060208310610133831016604e8410600b841016171561adc5575081810a6154a7565b61add2600019848461ad07565b806000190482111561ade65761ade6619e1b565b029392505050565b600061565c838361ad4a565b60008161ae095761ae09619e1b565b506000190190565b6000835161ae23818460208801619783565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161ae5d816001840160208801619783565b01600101949350505050565b818103600083128015838313168383128216171561891c5761891c619e1b56fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220e0645f0dc9560bf8a1975495bcc1a88ea921f354d9c6dd0b38d7de440cf329ed64736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a2646970667358221220ec8bb703813b6839732e94897d7dcceac71fa5a8f5a30f877521ffb70334065364736f6c634300081a0033", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061eb078061003c6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c80638ce7ef051161019c578063d1fd3291116100ee578063dfbdf60011610097578063f1f87f4011610071578063f1f87f40146104c3578063f2413096146104cb578063fa7626d4146104d357600080fd5b8063dfbdf600146104ab578063e13aba48146104b3578063e20c9f71146104bb57600080fd5b8063d591221f116100c8578063d591221f14610493578063d97136a21461049b578063dcba486a146104a357600080fd5b8063d1fd32911461047b578063d27b042714610483578063d509b16c1461048b57600080fd5b8063b0464fdc11610150578063ba414fa61161012a578063ba414fa614610453578063c35f9d1d1461046b578063d04cda981461047357600080fd5b8063b0464fdc1461043b578063b5508aa914610443578063b79cad091461044b57600080fd5b806392a68b8d1161018157806392a68b8d14610423578063a4aa6c7c1461042b578063ae9687dc1461043357600080fd5b80638ce7ef0514610406578063916a17c61461040e57600080fd5b80633f7286f4116102605780636ff45850116102095780637f924c4e116101e35780637f924c4e146103e157806380326680146103e957806385226c81146103f157600080fd5b80636ff45850146103c957806370557298146103d15780637ee68316146103d957600080fd5b80635539d92e1161023a5780635539d92e146103a45780635f01db7e146103ac57806366d9a9a0146103b457600080fd5b80633f7286f41461038c5780634cfc0aaa14610394578063513999621461039c57600080fd5b806328438826116102c2578063367e31231161029c578063367e3123146103745780633be9ec801461037c5780633e5e3c231461038457600080fd5b8063284388261461034f5780632ade3880146103575780632f6254fc1461036c57600080fd5b80630ea7e563116102f35780630ea7e563146103215780631142744e146103295780631ed7831c1461033157600080fd5b80630809dfef1461030f5780630a9254e414610319575b600080fd5b6103176104e0565b005b61031761066e565b610317610d6a565b610317610e53565b610339610f37565b6040516103469190619737565b60405180910390f35b610317610f99565b61035f6111e4565b60405161034691906197d3565b610317611326565b610317611497565b610317611569565b610339611756565b6103396117b6565b610317611816565b6103176118ef565b610317611c6c565b610317611e99565b6103bc612006565b6040516103469190619939565b610317612188565b610317612398565b6103176125e8565b610317612a79565b610317612c9d565b6103f9612d71565b60405161034691906199d7565b610317612e41565b610416613041565b6040516103469190619a4e565b61031761313c565b61031761320f565b6103176133c4565b610416613651565b6103f961374c565b61031761381c565b61045b613bae565b6040519015158152602001610346565b610317613c82565b610317613d54565b610317613e98565b610317613fdb565b61031761411e565b6103176147b2565b610317614896565b610317614a1c565b610317614c9f565b610317614de2565b61033961508c565b6103176150ec565b610317615232565b601f5461045b9060ff1681565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561053957600080fd5b505af115801561054d573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156105bd57600080fd5b505af11580156105d1573d6000803e3d6000fd5b5050601f546040517f47e7ef2400000000000000000000000000000000000000000000000000000000815260006004820152620186a060248201526101009091046001600160a01b031692506347e7ef2491506044015b6020604051808303816000875af1158015610647573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066b9190619ae5565b50565b602480547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602580549091166112341790556040516106b490619657565b604051809103906000f0801580156106d0573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600f81527f476174657761795a45564d2e736f6c0000000000000000000000000000000000602082015260248054925190810193909352921660448201526107b4919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc9550000000000000000000000000000000000000000000000000000000017905261548e565b602280546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602180549092168117909155604080517f2722feee0000000000000000000000000000000000000000000000000000000081529051632722feee916004808201926020929091908290030181865afa15801561084d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108719190619b23565b602680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f06447d560000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561090f57600080fd5b505af1158015610923573d6000803e3d6000fd5b50505050600080600060405161093890619664565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610974573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081179091556021546040516012936001938493600093919216906109ca90619671565b6109d996959493929190619b3e565b604051809103906000f0801580156109f5573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03938416810291909117918290556020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152919092048316602482015291169063ee2815ba90604401600060405180830381600087803b158015610a9557600080fd5b505af1158015610aa9573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610b1357600080fd5b505af1158015610b27573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610ba757600080fd5b505af1158015610bbb573d6000803e3d6000fd5b50506022546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152633b9aca006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610c3b57600080fd5b505af1158015610c4f573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015610ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf19190619ae5565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610d5057600080fd5b505af1158015610d64573d6000803e3d6000fd5b50505050565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610dd657600080fd5b505af1158015610dea573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc91506024015b600060405180830381600087803b158015610d5057600080fd5b604051630618f58760e51b81527fddb5de5e000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015610ebf57600080fd5b505af1158015610ed3573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef249150604401610628565b60606016805480602002602001604051908101604052809291908181526020018280548015610f8f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f71575b5050505050905090565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015610fee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110129190619c33565b905061101f6000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015611097573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bb9190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561112857600080fd5b505af115801561113c573d6000803e3d6000fd5b5050601f546025546040517f23b872dd000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039182166024820152604481018690526101009092041692506323b872dd91506064015b6020604051808303816000875af11580156111bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111df9190619ae5565b505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561131d57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561130657838290600052602060002001805461127990619c4c565b80601f01602080910402602001604051908101604052809291908181526020018280546112a590619c4c565b80156112f25780601f106112c7576101008083540402835291602001916112f2565b820191906000526020600020905b8154815290600101906020018083116112d557829003601f168201915b50505050508152602001906001019061125a565b505050508152505081526020019060010190611208565b50505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561137f57600080fd5b505af1158015611393573d6000803e3d6000fd5b5050601f546040517fc835d7cc00000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063c835d7cc9150602401600060405180830381600087803b1580156113fb57600080fd5b505af115801561140f573d6000803e3d6000fd5b50505050611495601f60019054906101000a90046001600160a01b03166001600160a01b031663f2441b326040518163ffffffff1660e01b8152600401602060405180830381865afa158015611469573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148d9190619b23565b613211615535565b565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561150357600080fd5b505af1158015611517573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401610e39565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156115c257600080fd5b505af11580156115d6573d6000803e3d6000fd5b50506020546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b15801561164057600080fd5b505af1158015611654573d6000803e3d6000fd5b5050604051630618f58760e51b81527fe661aed0000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156116c557600080fd5b505af11580156116d9573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015611732573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d649190619c99565b60606018805480602002602001604051908101604052809291908181526020018280548015610f8f576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f71575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610f8f576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f71575050505050905090565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b5050601f546040517f095ea7b300000000000000000000000000000000000000000000000000000000815260006004820152600a60248201526101009091046001600160a01b0316925063095ea7b39150604401610628565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561194d57600080fd5b505af1158015611961573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156119c857600080fd5b505af11580156119dc573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015611a3957600080fd5b505af1158015611a4d573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015611ab457600080fd5b505af1158015611ac8573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905260006024830152925063095ea7b391506044016020604051808303816000875af1158015611b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5f9190619ae5565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b031663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611bbe57600080fd5b505af1158015611bd2573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061119c9190600190603801619cc5565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015611cd857600080fd5b505af1158015611cec573d6000803e3d6000fd5b5050601f546040517fc47f002700000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f544f4b454e32000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063c47f00279150606401600060405180830381600087803b158015611d8057600080fd5b505af1158015611d94573d6000803e3d6000fd5b5050604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015611e0457600080fd5b505af1158015611e18573d6000803e3d6000fd5b5050601f546040517fb84c8246000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f544b4e320000000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063b84c82469150606401610e39565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611ef257600080fd5b505af1158015611f06573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b158015611f6d57600080fd5b505af1158015611f81573d6000803e3d6000fd5b50505050611495600a601f60019054906101000a90046001600160a01b03166001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fdd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120019190619c33565b6154ad565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101561131d578382906000526020600020906002020160405180604001604052908160008201805461205d90619c4c565b80601f016020809104026020016040519081016040528092919081815260200182805461208990619c4c565b80156120d65780601f106120ab576101008083540402835291602001916120d6565b820191906000526020600020905b8154815290600101906020018083116120b957829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561217057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161211d5790505b5050505050815250508152602001906001019061202a565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa1580156121dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122019190619c33565b905061220e6000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa9190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561231757600080fd5b505af115801561232b573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd915060640161119c565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa1580156123ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124119190619c33565b905061241e6000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c35092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b99190619ae5565b50601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082169281019290925260448201849052610100909204909116906323b872dd906064015b6020604051808303816000875af115801561253e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125629190619ae5565b50601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa1580156125b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125dc9190619c33565b90506111df82826154ad565b6126a16040518060400160405280600581526020017f544f4b454e000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612674573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261269c9190810190619daf565b615596565b61272d6040518060400160405280600381526020017f544b4e0000000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612674573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561278657600080fd5b505af115801561279a573d6000803e3d6000fd5b5050601f546040517fc47f002700000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f544f4b454e32000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063c47f00279150606401600060405180830381600087803b15801561282e57600080fd5b505af1158015612842573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561289f57600080fd5b505af11580156128b3573d6000803e3d6000fd5b5050601f546040517fb84c8246000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f544b4e320000000000000000000000000000000000000000000000000000000060448201526101009091046001600160a01b0316925063b84c82469150606401600060405180830381600087803b15801561294957600080fd5b505af115801561295d573d6000803e3d6000fd5b505050506129ed6040518060400160405280600681526020017f544f4b454e320000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015612674573d6000803e3d6000fd5b6114956040518060400160405280600481526020017f544b4e3200000000000000000000000000000000000000000000000000000000815250601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612674573d6000803e3d6000fd5b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ace573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af29190619c33565b9050612b01620186a0826154ad565b60225460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612b5a57600080fd5b505af1158015612b6e573d6000803e3d6000fd5b5050601f54602480546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09281019290925261010090920490911692506347e7ef2491506044016020604051808303816000875af1158015612bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c109190619ae5565b506000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8a9190619c33565b9050612c9962030d40826154ad565b5050565b604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612d0957600080fd5b505af1158015612d1d573d6000803e3d6000fd5b5050601f546040517f42966c68000000000000000000000000000000000000000000000000000000008152620249f060048201526101009091046001600160a01b031692506342966c689150602401610628565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561131d578382906000526020600020018054612db490619c4c565b80601f0160208091040260200160405190810160405280929190818152602001828054612de090619c4c565b8015612e2d5780601f10612e0257610100808354040283529160200191612e2d565b820191906000526020600020905b815481529060010190602001808311612e1057829003601f168201915b505050505081526020019060010190612d95565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015612e96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eba9190619c33565b9050612ec76000826154ad565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015612f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f639190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612fd057600080fd5b505af1158015612fe4573d6000803e3d6000fd5b5050601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810186905261010090920416925063a9059cbb915060440161119c565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101561131d5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561312457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116130d15790505b50505050508152505081526020019060010190613065565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156131a857600080fd5b505af11580156131bc573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401610e39565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af1158015613287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ab9190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561331857600080fd5b505af115801561332c573d6000803e3d6000fd5b5050601f546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815260006004820152602481018590526101009091046001600160a01b0316925063a9059cbb91506044015b6020604051808303816000875af11580156133a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c999190619ae5565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015613419573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134419190810190619daf565b90506134826040518060400160405280600581526020017f544f4b454e00000000000000000000000000000000000000000000000000000081525082615596565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156134d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526134ff9190810190619daf565b90506135406040518060400160405280600381526020017f544b4e000000000000000000000000000000000000000000000000000000000081525082615596565b6000601f60019054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613595573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b99190619df8565b90506135c960128260ff166154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561361e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136429190619c33565b9050610d64620186a0826154ad565b6060601c805480602002602001604051908101604052809291908181526020016000905b8282101561131d5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561373457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116136e15790505b50505050508152505081526020019060010190613675565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561131d57838290600052602060002001805461378f90619c4c565b80601f01602080910402602001604051908101604052809291908181526020018280546137bb90619c4c565b80156138085780601f106137dd57610100808354040283529160200191613808565b820191906000526020600020905b8154815290600101906020018083116137eb57829003601f168201915b505050505081526020019060010190613770565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a906305f5e10090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561387e57600080fd5b505af1158015613892573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156138f957600080fd5b505af115801561390d573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561396a57600080fd5b505af115801561397e573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156139e557600080fd5b505af11580156139f9573d6000803e3d6000fd5b5050601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b031660048201819052630bebc2006024830152925063095ea7b391506044016020604051808303816000875af1158015613a6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a939190619ae5565b50604051630618f58760e51b81527ffe382aa7000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613b0057600080fd5b505af1158015613b14573d6000803e3d6000fd5b5050601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b0361010090930492909216935063c7012626925061119c9190606490603801619cc5565b60085460009060ff1615613bc6575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c7b9190619c33565b1415905090565b604051630618f58760e51b81527f2b2add3d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015613cee57600080fd5b505af1158015613d02573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063f687d12a9150602401610e39565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613dad57600080fd5b505af1158015613dc1573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015613e2857600080fd5b505af1158015613e3c573d6000803e3d6000fd5b50505050611495600a601f60019054906101000a90046001600160a01b03166001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fdd573d6000803e3d6000fd5b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613ef157600080fd5b505af1158015613f05573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613f7557600080fd5b505af1158015613f89573d6000803e3d6000fd5b5050601f546040517fccc77599000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063ccc775999150602401610e39565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561403457600080fd5b505af1158015614048573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156140b857600080fd5b505af11580156140cc573d6000803e3d6000fd5b5050601f546040517fc835d7cc000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063c835d7cc9150602401610e39565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152600a908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561417c57600080fd5b505af1158015614190573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b0316925063f687d12a9150602401600060405180830381600087803b1580156141f757600080fd5b505af115801561420b573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561426857600080fd5b505af115801561427c573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600481018590526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b1580156142e357600080fd5b505af11580156142f7573d6000803e3d6000fd5b5050601f54602480546040516370a0823160e01b81526001600160a01b039182166004820152600095506101009093041692506370a082319101602060405180830381865afa15801561434e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143729190619c33565b9050614381620186a0826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156143d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143fa9190619c33565b9050614409620186a0826154ad565b601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa15801561445e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144829190619c33565b601f546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03166004820181905261c350602483015291925063095ea7b3906044016020604051808303816000875af11580156144f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145189190619ae5565b50601f546025546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051601481840301815260348301918290527fc7012626000000000000000000000000000000000000000000000000000000009091526001600160a01b03610100909304929092169163c7012626916145b0919061c35090603801619cc5565b6020604051808303816000875af11580156145cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145f39190619ae5565b50601f546026546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061466d9190619c33565b905061468d8561467d8885619e4a565b6146879190619e4a565b826154ad565b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa1580156146e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147059190619c33565b9050614721866147178961c350619e5d565b6146879190619e5d565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614776573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061479a9190619c33565b90506147a861c350826154ad565b5050505050505050565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015614807573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061482b9190619c33565b90506148386000826154ad565b601f546025546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261c350602482018190529261010090049091169063a9059cbb9060440161251f565b601f54602480546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12092810183905291926101009004169063095ea7b3906044016020604051808303816000875af115801561490e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149329190619ae5565b50604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561499f57600080fd5b505af11580156149b3573d6000803e3d6000fd5b5050601f54602480546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000928101929092526044820186905261010090920490911692506323b872dd9150606401613381565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614a7557600080fd5b505af1158015614a89573d6000803e3d6000fd5b5050601f546040517ff687d12a000000000000000000000000000000000000000000000000000000008152600a6004820181905293508392506101009091046001600160a01b03169063f687d12a90602401600060405180830381600087803b158015614af557600080fd5b505af1158015614b09573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614b6657600080fd5b505af1158015614b7a573d6000803e3d6000fd5b5050601f546040517feddeb123000000000000000000000000000000000000000000000000000000008152600a60048201526101009091046001600160a01b0316925063eddeb1239150602401600060405180830381600087803b158015614be157600080fd5b505af1158015614bf5573d6000803e3d6000fd5b50505050600080601f60019054906101000a90046001600160a01b03166001600160a01b031663d9eeebed6040518163ffffffff1660e01b81526004016040805180830381865afa158015614c4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c729190619c99565b601f549193509150614c929061010090046001600160a01b031683615535565b610d646146878486619e4a565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614cf857600080fd5b505af1158015614d0c573d6000803e3d6000fd5b5050601f546040517fccc7759900000000000000000000000000000000000000000000000000000000815261321160048201526101009091046001600160a01b0316925063ccc775999150602401600060405180830381600087803b158015614d7457600080fd5b505af1158015614d88573d6000803e3d6000fd5b50505050611495601f60019054906101000a90046001600160a01b03166001600160a01b0316638b851b956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611469573d6000803e3d6000fd5b601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e5a9190619c33565b9050614e69620186a0826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ee29190619c33565b9050614ef1620186a0826154ad565b601f546040517f42966c6800000000000000000000000000000000000000000000000000000000815261c35060048201526101009091046001600160a01b0316906342966c68906024016020604051808303816000875af1158015614f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f7e9190619ae5565b50601f54602480546040516370a0823160e01b81526001600160a01b0391821660048201526000936101009004909116916370a082319101602060405180830381865afa158015614fd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ff79190619c33565b905061500561c350826154ad565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561505a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061507e9190619c33565b9050610d6461c350826154ad565b60606015805480602002602001604051908101604052809291908181526020018280548015610f8f576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f71575050505050905090565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561514557600080fd5b505af1158015615159573d6000803e3d6000fd5b50506020546040517fee2815ba00000000000000000000000000000000000000000000000000000000815260016004820152600060248201526001600160a01b03909116925063ee2815ba9150604401600060405180830381600087803b1580156151c357600080fd5b505af11580156151d7573d6000803e3d6000fd5b5050604051630618f58760e51b81527f78fff396000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024016116ab565b601f546025546040516370a0823160e01b81526001600160a01b0391821660048201526000926101009004909116906370a0823190602401602060405180830381865afa158015615287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906152ab9190619c33565b90506152b86000826154ad565b601f54602480546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201819052928101929092526000926101009004169063dd62ed3e90604401602060405180830381865afa15801561532e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906153529190619c33565b905061535f6000826154ad565b604051630618f58760e51b81527f10bad14700000000000000000000000000000000000000000000000000000000600482015261c35090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156153cf57600080fd5b505af11580156153e3573d6000803e3d6000fd5b5050601f54602480546025546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216928101929092526044820186905261010090920490911692506323b872dd91506064016020604051808303816000875af115801561546a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d649190619ae5565b600061549861967e565b6154a38484836155e8565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b15801561551957600080fd5b505afa15801561552d573d6000803e3d6000fd5b505050505050565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401615501565b6040517ff320d963000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f320d963906155019085908590600401619e70565b6000806155f58584615663565b90506156586040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001615643929190619e95565b6040516020818303038152906040528561566f565b9150505b9392505050565b600061565c838361569d565b60c081015151600090156156935761568c84848460c001516156b8565b905061565c565b61568c848461585e565b60006156a98383615949565b61565c8383602001518461566f565b6000806156c3615955565b905060006156d18683615a28565b905060006156e88260600151836020015185615ece565b905060006156f8838389896160e0565b9050600061570582616f5d565b602081015181519192509060030b156157785789826040015160405160200161572f929190619eb7565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261576f91600401619f38565b60405180910390fd5b60006157bb6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161712c565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061580e908490600401619f38565b602060405180830381865afa15801561582b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061584f9190619b23565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906158b3908790600401619f38565b600060405180830381865afa1580156158d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526158f89190810190619f6b565b905060006159268285604051602001615912929190619fa0565b60405160208183030381529060405261732c565b90506001600160a01b0381166154a357848460405160200161572f929190619fcf565b612c998282600061733f565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906159dc90849060040161a07a565b600060405180830381865afa1580156159f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615a219190810190619daf565b9250505090565b615a5a6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050615aa56040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b615aae85617442565b60208201526000615abe86617827565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615b00573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615b289190810190619daf565b86838560200151604051602001615b42949392919061a0c1565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190615b9a908590600401619f38565b600060405180830381865afa158015615bb7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615bdf9190810190619daf565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615c2790849060040161a1c5565b602060405180830381865afa158015615c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615c689190619ae5565b615c7d578160405160200161572f919061a217565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615cc290849060040161a2a9565b600060405180830381865afa158015615cdf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615d079190810190619daf565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690615d4e90849060040161a2fb565b602060405180830381865afa158015615d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615d8f9190619ae5565b15615e24576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615dd990849060040161a2fb565b600060405180830381865afa158015615df6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615e1e9190810190619daf565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001615e49919061a34d565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401615e75929190619e70565b600060405180830381865afa158015615e92573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615eba9190810190619daf565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081615eea5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110615f4a57615f4a61a3b9565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110615f9e57615f9e61a3b9565b602002602001018190525084604051602001615fba919061a3e8565b60405160208183030381529060405281600281518110615fdc57615fdc61a3b9565b602002602001018190525082604051602001615ff8919061a454565b6040516020818303038152906040528160038151811061601a5761601a61a3b9565b6020026020010181905250600061603082616f5d565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506160c19060408051808201825260008082526020918201528151808301909252845182528085019082015290617aaa565b6160d6578560405160200161572f919061a495565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616130565b511590565b6162a4578260200151156161ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161576f565b8260c00151156162a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161576f565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816162bd57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806163189061a526565b935060ff168151811061632d5761632d61a3b9565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161637e919061a545565b6040516020818303038152906040528282806163999061a526565b935060ff16815181106163ae576163ae61a3b9565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806163fb9061a526565b935060ff16815181106164105761641061a3b9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061645d9061a526565b935060ff16815181106164725761647261a3b9565b6020026020010181905250876020015182828061648e9061a526565b935060ff16815181106164a3576164a361a3b9565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806164f09061a526565b935060ff16815181106165055761650561a3b9565b60209081029190910101528751828261651d8161a526565b935060ff16815181106165325761653261a3b9565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061657f9061a526565b935060ff16815181106165945761659461a3b9565b60200260200101819052506165a846617b0b565b82826165b38161a526565b935060ff16815181106165c8576165c861a3b9565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806166159061a526565b935060ff168151811061662a5761662a61a3b9565b6020026020010181905250868282806166429061a526565b935060ff16815181106166575761665761a3b9565b602090810291909101015285511561677e5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826166a88161a526565b935060ff16815181106166bd576166bd61a3b9565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061670d908990600401619f38565b600060405180830381865afa15801561672a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167529190810190619daf565b828261675d8161a526565b935060ff16815181106167725761677261a3b9565b60200260200101819052505b84602001511561684e5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826167c78161a526565b935060ff16815181106167dc576167dc61a3b9565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806168299061a526565b935060ff168151811061683e5761683e61a3b9565b6020026020010181905250616a15565b61688661612b8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6169195760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826168c98161a526565b935060ff16815181106168de576168de61a3b9565b60200260200101819052508460a001516040516020016168fe919061a3e8565b6040516020818303038152906040528282806168299061a526565b8460c0015115801561695c57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261695a90511590565b155b15616a155760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826169a08161a526565b935060ff16815181106169b5576169b561a3b9565b60200260200101819052506169c988617bab565b6040516020016169d9919061a3e8565b6040516020818303038152906040528282806169f49061a526565b935060ff1681518110616a0957616a0961a3b9565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152616a4990511590565b616ade5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282616a8c8161a526565b935060ff1681518110616aa157616aa161a3b9565b60200260200101819052508460400151828280616abd9061a526565b935060ff1681518110616ad257616ad261a3b9565b60200260200101819052505b606085015115616bff5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282616b278161a526565b935060ff1681518110616b3c57616b3c61a3b9565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616bab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616bd39190810190619daf565b8282616bde8161a526565b935060ff1681518110616bf357616bf361a3b9565b60200260200101819052505b60e08501515115616ca65760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282616c498161a526565b935060ff1681518110616c5e57616c5e61a3b9565b6020026020010181905250616c7a8560e0015160000151617b0b565b8282616c858161a526565b935060ff1681518110616c9a57616c9a61a3b9565b60200260200101819052505b60e08501516020015115616d505760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282616cf38161a526565b935060ff1681518110616d0857616d0861a3b9565b6020026020010181905250616d248560e0015160200151617b0b565b8282616d2f8161a526565b935060ff1681518110616d4457616d4461a3b9565b60200260200101819052505b60e08501516040015115616dfa5760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282616d9d8161a526565b935060ff1681518110616db257616db261a3b9565b6020026020010181905250616dce8560e0015160400151617b0b565b8282616dd98161a526565b935060ff1681518110616dee57616dee61a3b9565b60200260200101819052505b60e08501516060015115616ea45760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282616e478161a526565b935060ff1681518110616e5c57616e5c61a3b9565b6020026020010181905250616e788560e0015160600151617b0b565b8282616e838161a526565b935060ff1681518110616e9857616e9861a3b9565b60200260200101819052505b60008160ff1667ffffffffffffffff811115616ec257616ec2619ce7565b604051908082528060200260200182016040528015616ef557816020015b6060815260200190600190039081616ee05790505b50905060005b8260ff168160ff161015616f4e57838160ff1681518110616f1e57616f1e61a3b9565b6020026020010151828260ff1681518110616f3b57616f3b61a3b9565b6020908102919091010152600101616efb565b5093505050505b949350505050565b616f846040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161700a9186910161a5b0565b600060405180830381865afa158015617027573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261704f9190810190619daf565b9050600061705d868361869a565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161708d91906199d7565b6000604051808303816000875af11580156170ac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526170d4919081019061a5f7565b805190915060030b158015906170ed5750602081015151155b80156170fc5750604081015151155b156160d657816000815181106171145761711461a3b9565b602002602001015160405160200161572f919061a6ad565b606060006171618560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506171989082905b906187ef565b156172f55760006172158261720f846172096171db8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618816565b90618878565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506172799082906187ef565b156172e357604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526172e0905b82906188fd565b90505b6172ec81618923565b9250505061565c565b821561730e57848460405160200161572f92919061a899565b505060408051602081019091526000815261565c565b509392505050565b6000808251602084016000f09392505050565b8160a001511561734e57505050565b600061735b84848461898c565b9050600061736882616f5d565b602081015181519192509060030b1580156174045750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261740490604080518082018252600080825260209182015281518083019092528451825280850190820152617192565b1561741157505050505050565b6040820151511561743157816040015160405160200161572f919061a940565b8060405160200161572f919061a99e565b606060006174778360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506174dc905b8290617aaa565b1561754b57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c90617546908390618f27565b618923565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175ad905b8290618fb1565b60010361767a57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617613906172d9565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c90617546905b83906188fd565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526176d9906174d5565b1561781057604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061774190839061904b565b9050600081600183516177549190619e5d565b815181106177645761776461a3b9565b602002602001015190506178076175466177da6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290618f27565b95945050505050565b8260405160200161572f919061aa09565b50919050565b6060600061785c8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506178be906174d5565b156178cc5761565c81618923565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261792b906175a6565b60010361799557604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261565c9061754690617673565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179f4906174d5565b1561781057604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617a5c90839061904b565b9050600181511115617a98578060028251617a779190619e5d565b81518110617a8757617a8761a3b9565b602002602001015192505050919050565b508260405160200161572f919061aa09565b805182516000911115617abf575060006154a7565b81518351602085015160009291617ad591619e4a565b617adf9190619e5d565b905082602001518103617af65760019150506154a7565b82516020840151819020912014905092915050565b60606000617b18836190f0565b600101905060008167ffffffffffffffff811115617b3857617b38619ce7565b6040519080825280601f01601f191660200182016040528015617b62576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084617b6c57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617c37905b82906191d2565b15617c7757505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617cd690617c30565b15617d1657505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d7590617c30565b15617db557505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e1490617c30565b80617e795750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e7990617c30565b15617eb957505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f1890617c30565b80617f7d5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f7d90617c30565b15617fbd57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261801c90617c30565b806180815750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261808190617c30565b156180c157505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261812090617c30565b806181855750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261818590617c30565b156181c557505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261822490617c30565b1561826457505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526182c390617c30565b1561830357505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261836290617c30565b156183a257505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261840190617c30565b1561844157505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526184a090617c30565b156184e057505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261853f90617c30565b806185a45750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185a490617c30565b156185e457505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261864390617c30565b1561868357505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161572f929060200161aae7565b60608060005b845181101561872557818582815181106186bc576186bc61a3b9565b60200260200101516040516020016186d5929190619fa0565b6040516020818303038152906040529150600185516186f49190619e5d565b811461871d578160405160200161870b919061ac50565b60405160208183030381529060405291505b6001016186a0565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161873e57905050905083816000815181106187695761876961a3b9565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106187bd576187bd61a3b9565b602002602001018190525081816002815181106187dc576187dc61a3b9565b6020908102919091010152949350505050565b602080830151835183519284015160009361880d92918491906191e6565b14159392505050565b6040805180820190915260008082526020820152600061884884600001518560200151856000015186602001516192f7565b905083602001518161885a9190619e5d565b84518590618869908390619e5d565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561889d5750816154a7565b60208083015190840151600191146188c45750815160208481015190840151829020919020145b80156188f5578251845185906188db908390619e5d565b90525082516020850180516188f1908390619e4a565b9052505b509192915050565b604080518082019091526000808252602082015261891c838383619417565b5092915050565b60606000826000015167ffffffffffffffff81111561894457618944619ce7565b6040519080825280601f01601f19166020018201604052801561896e576020820181803683370190505b509050600060208201905061891c81856020015186600001516194c2565b60606000618998615955565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816189b557905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280618a109061a526565b935060ff1681518110618a2557618a2561a3b9565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618a76919061ac91565b604051602081830303815290604052828280618a919061a526565b935060ff1681518110618aa657618aa661a3b9565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280618af39061a526565b935060ff1681518110618b0857618b0861a3b9565b602002602001018190525082604051602001618b24919061a454565b604051602081830303815290604052828280618b3f9061a526565b935060ff1681518110618b5457618b5461a3b9565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280618ba19061a526565b935060ff1681518110618bb657618bb661a3b9565b6020026020010181905250618bcb878461953c565b8282618bd68161a526565b935060ff1681518110618beb57618beb61a3b9565b602090810291909101015285515115618c975760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282618c3d8161a526565b935060ff1681518110618c5257618c5261a3b9565b6020026020010181905250618c6b86600001518461953c565b8282618c768161a526565b935060ff1681518110618c8b57618c8b61a3b9565b60200260200101819052505b856080015115618d055760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282618ce08161a526565b935060ff1681518110618cf557618cf561a3b9565b6020026020010181905250618d6b565b8415618d6b5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282618d4a8161a526565b935060ff1681518110618d5f57618d5f61a3b9565b60200260200101819052505b60408601515115618e075760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282618db58161a526565b935060ff1681518110618dca57618dca61a3b9565b60200260200101819052508560400151828280618de69061a526565b935060ff1681518110618dfb57618dfb61a3b9565b60200260200101819052505b856060015115618e715760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282618e508161a526565b935060ff1681518110618e6557618e6561a3b9565b60200260200101819052505b60008160ff1667ffffffffffffffff811115618e8f57618e8f619ce7565b604051908082528060200260200182016040528015618ec257816020015b6060815260200190600190039081618ead5790505b50905060005b8260ff168160ff161015618f1b57838160ff1681518110618eeb57618eeb61a3b9565b6020026020010151828260ff1681518110618f0857618f0861a3b9565b6020908102919091010152600101618ec8565b50979650505050505050565b6040805180820190915260008082526020820152815183511015618f4c5750816154a7565b81518351602085015160009291618f6291619e4a565b618f6c9190619e5d565b60208401519091506001908214618f8d575082516020840151819020908220145b8015618fa857835185518690618fa4908390619e5d565b9052505b50929392505050565b6000808260000151618fd585600001518660200151866000015187602001516192f7565b618fdf9190619e4a565b90505b83516020850151618ff39190619e4a565b811161891c57816190038161acd6565b925050826000015161903a85602001518361901e9190619e5d565b865161902a9190619e5d565b83866000015187602001516192f7565b6190449190619e4a565b9050618fe2565b606060006190598484618fb1565b619064906001619e4a565b67ffffffffffffffff81111561907c5761907c619ce7565b6040519080825280602002602001820160405280156190af57816020015b606081526020019060019003908161909a5790505b50905060005b8151811015617324576190cb61754686866188fd565b8282815181106190dd576190dd61a3b9565b60209081029190910101526001016190b5565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619139577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619165576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061918357662386f26fc10000830492506010015b6305f5e100831061919b576305f5e100830492506008015b61271083106191af57612710830492506004015b606483106191c1576064830492506002015b600a83106154a75760010192915050565b60006191de838361957c565b159392505050565b6000808584116192ed5760208411619299576000841561923157600161920d866020619e5d565b61921890600861acf0565b61922390600261adee565b61922d9190619e5d565b1990505b83518116856192408989619e4a565b61924a9190619e5d565b805190935082165b8181146192845787841161926c5787945050505050616f55565b836192768161adfa565b945050828451169050619252565b61928e8785619e4a565b945050505050616f55565b8383206192a68588619e5d565b6192b09087619e4a565b91505b8582106192eb578482208082036192d8576192ce8684619e4a565b9350505050616f55565b6192e3600184619e5d565b9250506192b3565b505b5092949350505050565b6000838186851161940257602085116193b1576000851561934357600161931f876020619e5d565b61932a90600861acf0565b61933590600261adee565b61933f9190619e5d565b1990505b845181166000876193548b8b619e4a565b61935e9190619e5d565b855190915083165b8281146193a35781861061938b5761937e8b8b619e4a565b9650505050505050616f55565b856193958161acd6565b965050838651169050619366565b859650505050505050616f55565b508383206000905b6193c38689619e5d565b8211619400578583208082036193df5783945050505050616f55565b6193ea600185619e4a565b93505081806193f89061acd6565b9250506193b9565b505b61940c8787619e4a565b979650505050505050565b6040805180820190915260008082526020820152600061944985600001518660200151866000015187602001516192f7565b6020808701805191860191909152519091506194659082619e5d565b8352845160208601516194789190619e4a565b810361948757600085526194b9565b835183516194959190619e4a565b855186906194a4908390619e5d565b90525083516194b39082619e4a565b60208601525b50909392505050565b602081106194fa57815183526194d9602084619e4a565b92506194e6602083619e4a565b91506194f3602082619e5d565b90506194c2565b6000198115619529576001619510836020619e5d565b61951c9061010061adee565b6195269190619e5d565b90505b9151835183169219169190911790915250565b6060600061954a8484615a28565b80516020808301516040519394506195649390910161ae11565b60405160208183030381529060405291505092915050565b815181516000919081111561958f575081515b6020808501519084015160005b8381101561964857825182518082146196185760001960208710156195f7576001846195c9896020619e5d565b6195d39190619e4a565b6195de90600861acf0565b6195e990600261adee565b6195f39190619e5d565b1990505b81811683821681810391146196155797506154a79650505050505050565b50505b619623602086619e4a565b9450619630602085619e4a565b935050506020816196419190619e4a565b905061959c565b50845186516160d6919061ae69565b610b678061ae8a83390190565b61106f8061b9f183390190565b6120728061ca6083390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016196c16196c6565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016196c16040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b818110156197785783516001600160a01b0316835260209384019390920191600101619751565b509095945050505050565b60005b8381101561979e578181015183820152602001619786565b50506000910152565b600081518084526197bf816020860160208601619783565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156198b5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261989f8486516197a7565b6020958601959094509290920191600101619865565b5091975050506020948501949290920191506001016197fb565b50929695505050505050565b600081518084526020840193506020830160005b8281101561992f5781517fffffffff00000000000000000000000000000000000000000000000000000000168652602095860195909101906001016198ef565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526199a560408801826197a7565b90506020820151915086810360208801526199c081836198db565b965050506020938401939190910190600101619961565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452619a398583516197a7565b945060209384019391909101906001016199ff565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156198cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152619acf60408701826198db565b9550506020938401939190910190600101619a76565b600060208284031215619af757600080fd5b8151801515811461565c57600080fd5b80516001600160a01b0381168114619b1e57600080fd5b919050565b600060208284031215619b3557600080fd5b61565c82619b07565b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff8816604083015286606083015260038610619bf8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a0830152619c1960c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b600060208284031215619c4557600080fd5b5051919050565b600181811c90821680619c6057607f821691505b602082108103617821577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008060408385031215619cac57600080fd5b619cb583619b07565b6020939093015192949293505050565b604081526000619cd860408301856197a7565b90508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715619d3957619d39619ce7565b60405290565b60008067ffffffffffffffff841115619d5a57619d5a619ce7565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715619d8957619d89619ce7565b604052838152905080828401851015619da157600080fd5b617324846020830185619783565b600060208284031215619dc157600080fd5b815167ffffffffffffffff811115619dd857600080fd5b8201601f81018413619de957600080fd5b6154a384825160208401619d3f565b600060208284031215619e0a57600080fd5b815160ff8116811461565c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156154a7576154a7619e1b565b818103818111156154a7576154a7619e1b565b604081526000619e8360408301856197a7565b828103602084015261565881856197a7565b6001600160a01b0383168152604060208201526000616f5560408301846197a7565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351619eef81601a850160208801619783565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351619f2c81601c840160208801619783565b01601c01949350505050565b60208152600061565c60208301846197a7565b600082601f830112619f5c57600080fd5b61565c83835160208501619d3f565b600060208284031215619f7d57600080fd5b815167ffffffffffffffff811115619f9457600080fd5b6154a384828501619f4b565b60008351619fb2818460208801619783565b835190830190619fc6818360208801619783565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a00781601a850160208801619783565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161a044816033840160208801619783565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061565c60808301846197a7565b6000855161a0d3818460208a01619783565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161a10d816001840160208a01619783565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161a14b816002840160208901619783565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161a18d816002840160208801619783565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061a1d860408301846197a7565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161a24f81601f850160208701619783565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061a2bc60408301846197a7565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061a30e60408301846197a7565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161a385816014850160208701619783565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161a420816001850160208701619783565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161a466818460208701619783565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161a51981604b850160208701619783565b91909101604b0192915050565b600060ff821660ff810361a53c5761a53c619e1b565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161a5a3816029850160208701619783565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061565c60808301846197a7565b60006020828403121561a60957600080fd5b815167ffffffffffffffff81111561a62057600080fd5b82016060818503121561a63257600080fd5b61a63a619d16565b81518060030b811461a64b57600080fd5b8152602082015167ffffffffffffffff81111561a66757600080fd5b61a67386828501619f4b565b602083015250604082015167ffffffffffffffff81111561a69357600080fd5b61a69f86828501619f4b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161a70b816021850160208701619783565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161a8f7816021850160208801619783565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161a93481602e840160208801619783565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161a5a3816029850160208701619783565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161a9fc816022850160208701619783565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161aa4181600e850160208701619783565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161ab1f816018850160208801619783565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161ab5c81601c840160208801619783565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161ac62818460208701619783565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161acc981601c850160208701619783565b91909101601c0192915050565b6000600019820361ace95761ace9619e1b565b5060010190565b80820281158282048414176154a7576154a7619e1b565b6001815b600184111561ad425780850481111561ad265761ad26619e1b565b600184161561ad3457908102905b60019390931c92800261ad0b565b935093915050565b60008261ad59575060016154a7565b8161ad66575060006154a7565b816001811461ad7c576002811461ad865761ada2565b60019150506154a7565b60ff84111561ad975761ad97619e1b565b50506001821b6154a7565b5060208310610133831016604e8410600b841016171561adc5575081810a6154a7565b61add2600019848461ad07565b806000190482111561ade65761ade6619e1b565b029392505050565b600061565c838361ad4a565b60008161ae095761ae09619e1b565b506000190190565b6000835161ae23818460208801619783565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161ae5d816001840160208801619783565b01600101949350505050565b818103600083128015838313168383128216171561891c5761891c619e1b56fe60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610114565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610114565b506002805460ff1916601217905534801561006f57600080fd5b506101d2565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561010f57806000526020600020601f840160051c810160208510156100ec5750805b601f840160051c820191505b8181101561010c57600081556001016100f8565b50505b505050565b81516001600160401b0381111561012d5761012d610075565b6101418161013b845461008b565b846100c5565b6020601f821160018114610175576000831561015d5750848201515b600019600385901b1c1916600184901b17845561010c565b600084815260208120601f198516915b828110156101a55787850151825560209485019460019092019101610185565b50848210156101c35786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610986806101e16000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610745565b60405180910390f35b34801561010b57600080fd5b5061011f61011a3660046107da565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610804565b6103bd565b34801561017857600080fd5b506100cd610187366004610841565b610647565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d336600461085a565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610724565b34801561020657600080fd5b5061011f6102153660046107da565b610731565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d366004610875565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102799084906108d7565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c2906108ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee906108ea565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561042b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600060248201526044015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104a1575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105605773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561051a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061055a90849061093d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061059590849061093d565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105cf9084906108d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161063591815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561069a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610422565b33600090815260036020526040812080548392906106b990849061093d565b9091555050604051339082156108fc029083906000818181858888f193505050501580156106eb573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c2906108ea565b600061073e3384846103bd565b9392505050565b602081526000825180602084015260005b818110156107735760208186018101516040868401015201610756565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146107d557600080fd5b919050565b600080604083850312156107ed57600080fd5b6107f6836107b1565b946020939093013593505050565b60008060006060848603121561081957600080fd5b610822846107b1565b9250610830602085016107b1565b929592945050506040919091013590565b60006020828403121561085357600080fd5b5035919050565b60006020828403121561086c57600080fd5b61073e826107b1565b6000806040838503121561088857600080fd5b610891836107b1565b915061089f602084016107b1565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76108a8565b600181811c908216806108fe57607f821691505b602082108103610937577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76108a856fea2646970667358221220b09c98b42d894b1b92a74ecc691587bcc17012fff7ef3bcfa6fe755f9b6255a564736f6c634300081a003360c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212201b1a136275cbee5409c60f315f9fc4e6eecd668368ddacf6f2cfdcef88de5c5a64736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a264697066735822122028c002c9bb888cf514df7d8feb6f046546f9e3ff786b190116179c4e7c0192d764736f6c634300081a0033", } // ZRC20TestABI is the input ABI used to generate the binding from. diff --git a/v2/test/ERC20Custody.t.sol b/v2/test/ERC20Custody.t.sol index 24ab32c3..d1a5bc35 100644 --- a/v2/test/ERC20Custody.t.sol +++ b/v2/test/ERC20Custody.t.sol @@ -77,7 +77,7 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv vm.deal(tssAddress, 1 ether); - revertContext = RevertContext({ asset: address(token), amount: 1, revertMessage: "" }); + revertContext = RevertContext({ sender: owner, asset: address(token), amount: 1, revertMessage: "" }); } function testWhitelistFailsIfZeroAddress() public { diff --git a/v2/test/GatewayEVM.t.sol b/v2/test/GatewayEVM.t.sol index 77163435..0ff76604 100644 --- a/v2/test/GatewayEVM.t.sol +++ b/v2/test/GatewayEVM.t.sol @@ -76,7 +76,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver vm.deal(tssAddress, 1 ether); - revertContext = RevertContext({ asset: address(token), amount: 1, revertMessage: "" }); + revertContext = RevertContext({ sender: owner, asset: address(token), amount: 1, revertMessage: "" }); } function testSetCustodyFailsIfSenderIsNotAdmin() public { @@ -212,6 +212,14 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver gateway.execute(address(receiver), data); } + function testForwardCallToReceiveOnRevertFails() public { + bytes memory data = abi.encodeWithSignature("onRevert((address,address,uint64,bytes))"); + + vm.prank(tssAddress); + vm.expectRevert(NotAllowedToCallOnRevert.selector); + gateway.execute(address(receiver), data); + } + function testExecuteFailsIfDestinationIsZeroAddress() public { bytes memory data = abi.encodeWithSignature("receiveNoParams()"); diff --git a/v2/test/GatewayZEVM.t.sol b/v2/test/GatewayZEVM.t.sol index eb69c2c6..437ad816 100644 --- a/v2/test/GatewayZEVM.t.sol +++ b/v2/test/GatewayZEVM.t.sol @@ -557,7 +557,7 @@ contract GatewayZEVMOutboundTest is Test, IGatewayZEVMEvents, IGatewayZEVMErrors zetaToken.approve(address(gateway), 10); vm.stopPrank(); - revertContext = RevertContext({ asset: address(0), amount: 1, revertMessage: "" }); + revertContext = RevertContext({ sender: owner, asset: address(0), amount: 1, revertMessage: "" }); } function testDepositFailsIfZRC20IsZeroAddress() public { diff --git a/v2/test/ZetaConnectorNative.t.sol b/v2/test/ZetaConnectorNative.t.sol index 6464b8ab..b8c2d602 100644 --- a/v2/test/ZetaConnectorNative.t.sol +++ b/v2/test/ZetaConnectorNative.t.sol @@ -73,7 +73,7 @@ contract ZetaConnectorNativeTest is zetaToken.mint(address(zetaConnector), 5_000_000); vm.deal(tssAddress, 1 ether); - revertContext = RevertContext({ asset: address(zetaToken), amount: 1, revertMessage: "" }); + revertContext = RevertContext({ sender: owner, asset: address(zetaToken), amount: 1, revertMessage: "" }); } function testWithdraw() public { diff --git a/v2/test/ZetaConnectorNonNative.t.sol b/v2/test/ZetaConnectorNonNative.t.sol index 250cd69a..40ff49ea 100644 --- a/v2/test/ZetaConnectorNonNative.t.sol +++ b/v2/test/ZetaConnectorNonNative.t.sol @@ -76,7 +76,7 @@ contract ZetaConnectorNonNativeTest is gateway.setConnector(address(zetaConnector)); vm.stopPrank(); - revertContext = RevertContext({ asset: address(zetaToken), amount: 1, revertMessage: "" }); + revertContext = RevertContext({ sender: owner, asset: address(zetaToken), amount: 1, revertMessage: "" }); } function testWithdraw() public { diff --git a/v2/test/utils/TestUniversalContract.sol b/v2/test/utils/TestUniversalContract.sol index d1af27cc..ff6be4e4 100644 --- a/v2/test/utils/TestUniversalContract.sol +++ b/v2/test/utils/TestUniversalContract.sol @@ -3,13 +3,13 @@ pragma solidity 0.8.26; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import { RevertContext } from "../../contracts/Revert.sol"; +import { RevertContext, Revertable } from "../../contracts/Revert.sol"; import "../../contracts/zevm/interfaces/UniversalContract.sol"; /// @title TestUniversalContract /// @notice This contract is used just for testing. /// @dev Implements the UniversalContract interface for handling cross-chain calls and reverts. -contract TestUniversalContract is UniversalContract { +contract TestUniversalContract is UniversalContract, Revertable { /// @notice Emitted when a cross-chain call is received. /// @param origin The origin address on the external chain. /// @param sender The sender address on the external chain. diff --git a/v2/types/ERC20Custody.ts b/v2/types/ERC20Custody.ts index 8002359d..660fe8bd 100644 --- a/v2/types/ERC20Custody.ts +++ b/v2/types/ERC20Custody.ts @@ -24,16 +24,18 @@ import type { } from "./common"; export type RevertContextStruct = { + sender: AddressLike; asset: AddressLike; amount: BigNumberish; revertMessage: BytesLike; }; export type RevertContextStructOutput = [ + sender: string, asset: string, amount: bigint, revertMessage: string -] & { asset: string; amount: bigint; revertMessage: string }; +] & { sender: string; asset: string; amount: bigint; revertMessage: string }; export interface ERC20CustodyInterface extends Interface { getFunction( diff --git a/v2/types/ERC20CustodyEchidnaTest.ts b/v2/types/ERC20CustodyEchidnaTest.ts index 671725c0..774924d6 100644 --- a/v2/types/ERC20CustodyEchidnaTest.ts +++ b/v2/types/ERC20CustodyEchidnaTest.ts @@ -24,16 +24,18 @@ import type { } from "./common"; export type RevertContextStruct = { + sender: AddressLike; asset: AddressLike; amount: BigNumberish; revertMessage: BytesLike; }; export type RevertContextStructOutput = [ + sender: string, asset: string, amount: bigint, revertMessage: string -] & { asset: string; amount: bigint; revertMessage: string }; +] & { sender: string; asset: string; amount: bigint; revertMessage: string }; export interface ERC20CustodyEchidnaTestInterface extends Interface { getFunction( diff --git a/v2/types/GatewayEVM.ts b/v2/types/GatewayEVM.ts index 6276687b..631797cb 100644 --- a/v2/types/GatewayEVM.ts +++ b/v2/types/GatewayEVM.ts @@ -50,16 +50,18 @@ export type MessageContextStruct = { sender: AddressLike }; export type MessageContextStructOutput = [sender: string] & { sender: string }; export type RevertContextStruct = { + sender: AddressLike; asset: AddressLike; amount: BigNumberish; revertMessage: BytesLike; }; export type RevertContextStructOutput = [ + sender: string, asset: string, amount: bigint, revertMessage: string -] & { asset: string; amount: bigint; revertMessage: string }; +] & { sender: string; asset: string; amount: bigint; revertMessage: string }; export interface GatewayEVMInterface extends Interface { getFunction( diff --git a/v2/types/GatewayEVMEchidnaTest.ts b/v2/types/GatewayEVMEchidnaTest.ts index 3a4992ec..8383174e 100644 --- a/v2/types/GatewayEVMEchidnaTest.ts +++ b/v2/types/GatewayEVMEchidnaTest.ts @@ -50,16 +50,18 @@ export type MessageContextStruct = { sender: AddressLike }; export type MessageContextStructOutput = [sender: string] & { sender: string }; export type RevertContextStruct = { + sender: AddressLike; asset: AddressLike; amount: BigNumberish; revertMessage: BytesLike; }; export type RevertContextStructOutput = [ + sender: string, asset: string, amount: bigint, revertMessage: string -] & { asset: string; amount: bigint; revertMessage: string }; +] & { sender: string; asset: string; amount: bigint; revertMessage: string }; export interface GatewayEVMEchidnaTestInterface extends Interface { getFunction( diff --git a/v2/types/GatewayEVMUpgradeTest.ts b/v2/types/GatewayEVMUpgradeTest.ts index 526aab88..adac9592 100644 --- a/v2/types/GatewayEVMUpgradeTest.ts +++ b/v2/types/GatewayEVMUpgradeTest.ts @@ -50,16 +50,18 @@ export type MessageContextStruct = { sender: AddressLike }; export type MessageContextStructOutput = [sender: string] & { sender: string }; export type RevertContextStruct = { + sender: AddressLike; asset: AddressLike; amount: BigNumberish; revertMessage: BytesLike; }; export type RevertContextStructOutput = [ + sender: string, asset: string, amount: bigint, revertMessage: string -] & { asset: string; amount: bigint; revertMessage: string }; +] & { sender: string; asset: string; amount: bigint; revertMessage: string }; export interface GatewayEVMUpgradeTestInterface extends Interface { getFunction( diff --git a/v2/types/GatewayZEVM.ts b/v2/types/GatewayZEVM.ts index ef45f500..7d154d87 100644 --- a/v2/types/GatewayZEVM.ts +++ b/v2/types/GatewayZEVM.ts @@ -68,16 +68,18 @@ export type ZContextStructOutput = [ ] & { origin: string; sender: string; chainID: bigint }; export type RevertContextStruct = { + sender: AddressLike; asset: AddressLike; amount: BigNumberish; revertMessage: BytesLike; }; export type RevertContextStructOutput = [ + sender: string, asset: string, amount: bigint, revertMessage: string -] & { asset: string; amount: bigint; revertMessage: string }; +] & { sender: string; asset: string; amount: bigint; revertMessage: string }; export interface GatewayZEVMInterface extends Interface { getFunction( diff --git a/v2/types/IERC20Custody.sol/IERC20Custody.ts b/v2/types/IERC20Custody.sol/IERC20Custody.ts index e665990e..5ff2fd4b 100644 --- a/v2/types/IERC20Custody.sol/IERC20Custody.ts +++ b/v2/types/IERC20Custody.sol/IERC20Custody.ts @@ -24,16 +24,18 @@ import type { } from "../common"; export type RevertContextStruct = { + sender: AddressLike; asset: AddressLike; amount: BigNumberish; revertMessage: BytesLike; }; export type RevertContextStructOutput = [ + sender: string, asset: string, amount: bigint, revertMessage: string -] & { asset: string; amount: bigint; revertMessage: string }; +] & { sender: string; asset: string; amount: bigint; revertMessage: string }; export interface IERC20CustodyInterface extends Interface { getFunction( diff --git a/v2/types/IERC20Custody.sol/IERC20CustodyEvents.ts b/v2/types/IERC20Custody.sol/IERC20CustodyEvents.ts index 03d4ebc0..998b48fb 100644 --- a/v2/types/IERC20Custody.sol/IERC20CustodyEvents.ts +++ b/v2/types/IERC20Custody.sol/IERC20CustodyEvents.ts @@ -22,16 +22,18 @@ import type { } from "../common"; export type RevertContextStruct = { + sender: AddressLike; asset: AddressLike; amount: BigNumberish; revertMessage: BytesLike; }; export type RevertContextStructOutput = [ + sender: string, asset: string, amount: bigint, revertMessage: string -] & { asset: string; amount: bigint; revertMessage: string }; +] & { sender: string; asset: string; amount: bigint; revertMessage: string }; export interface IERC20CustodyEventsInterface extends Interface { getEvent( diff --git a/v2/types/IGatewayEVM.sol/IGatewayEVM.ts b/v2/types/IGatewayEVM.sol/IGatewayEVM.ts index d95a20e6..52d921fb 100644 --- a/v2/types/IGatewayEVM.sol/IGatewayEVM.ts +++ b/v2/types/IGatewayEVM.sol/IGatewayEVM.ts @@ -50,16 +50,18 @@ export type MessageContextStruct = { sender: AddressLike }; export type MessageContextStructOutput = [sender: string] & { sender: string }; export type RevertContextStruct = { + sender: AddressLike; asset: AddressLike; amount: BigNumberish; revertMessage: BytesLike; }; export type RevertContextStructOutput = [ + sender: string, asset: string, amount: bigint, revertMessage: string -] & { asset: string; amount: bigint; revertMessage: string }; +] & { sender: string; asset: string; amount: bigint; revertMessage: string }; export interface IGatewayEVMInterface extends Interface { getFunction( diff --git a/v2/types/IGatewayEVM.sol/IGatewayEVMEvents.ts b/v2/types/IGatewayEVM.sol/IGatewayEVMEvents.ts index f5b28ee4..7226b763 100644 --- a/v2/types/IGatewayEVM.sol/IGatewayEVMEvents.ts +++ b/v2/types/IGatewayEVM.sol/IGatewayEVMEvents.ts @@ -44,16 +44,18 @@ export type RevertOptionsStructOutput = [ }; export type RevertContextStruct = { + sender: AddressLike; asset: AddressLike; amount: BigNumberish; revertMessage: BytesLike; }; export type RevertContextStructOutput = [ + sender: string, asset: string, amount: bigint, revertMessage: string -] & { asset: string; amount: bigint; revertMessage: string }; +] & { sender: string; asset: string; amount: bigint; revertMessage: string }; export interface IGatewayEVMEventsInterface extends Interface { getEvent( diff --git a/v2/types/IGatewayZEVM.sol/IGatewayZEVM.ts b/v2/types/IGatewayZEVM.sol/IGatewayZEVM.ts index 41bc49b8..bdb43903 100644 --- a/v2/types/IGatewayZEVM.sol/IGatewayZEVM.ts +++ b/v2/types/IGatewayZEVM.sol/IGatewayZEVM.ts @@ -68,16 +68,18 @@ export type ZContextStructOutput = [ ] & { origin: string; sender: string; chainID: bigint }; export type RevertContextStruct = { + sender: AddressLike; asset: AddressLike; amount: BigNumberish; revertMessage: BytesLike; }; export type RevertContextStructOutput = [ + sender: string, asset: string, amount: bigint, revertMessage: string -] & { asset: string; amount: bigint; revertMessage: string }; +] & { sender: string; asset: string; amount: bigint; revertMessage: string }; export interface IGatewayZEVMInterface extends Interface { getFunction( diff --git a/v2/types/IReceiverEVM.sol/IReceiverEVMEvents.ts b/v2/types/IReceiverEVM.sol/IReceiverEVMEvents.ts index d50e630d..dcaae5e3 100644 --- a/v2/types/IReceiverEVM.sol/IReceiverEVMEvents.ts +++ b/v2/types/IReceiverEVM.sol/IReceiverEVMEvents.ts @@ -22,16 +22,18 @@ import type { } from "../common"; export type RevertContextStruct = { + sender: AddressLike; asset: AddressLike; amount: BigNumberish; revertMessage: BytesLike; }; export type RevertContextStructOutput = [ + sender: string, asset: string, amount: bigint, revertMessage: string -] & { asset: string; amount: bigint; revertMessage: string }; +] & { sender: string; asset: string; amount: bigint; revertMessage: string }; export interface IReceiverEVMEventsInterface extends Interface { getEvent( diff --git a/v2/types/IZetaConnector.sol/IZetaConnectorEvents.ts b/v2/types/IZetaConnector.sol/IZetaConnectorEvents.ts index 1a97a0cc..4668545d 100644 --- a/v2/types/IZetaConnector.sol/IZetaConnectorEvents.ts +++ b/v2/types/IZetaConnector.sol/IZetaConnectorEvents.ts @@ -22,16 +22,18 @@ import type { } from "../common"; export type RevertContextStruct = { + sender: AddressLike; asset: AddressLike; amount: BigNumberish; revertMessage: BytesLike; }; export type RevertContextStructOutput = [ + sender: string, asset: string, amount: bigint, revertMessage: string -] & { asset: string; amount: bigint; revertMessage: string }; +] & { sender: string; asset: string; amount: bigint; revertMessage: string }; export interface IZetaConnectorEventsInterface extends Interface { getEvent( diff --git a/v2/types/ReceiverEVM.ts b/v2/types/ReceiverEVM.ts index 2f85b1ec..b1e5f896 100644 --- a/v2/types/ReceiverEVM.ts +++ b/v2/types/ReceiverEVM.ts @@ -28,16 +28,18 @@ export type MessageContextStruct = { sender: AddressLike }; export type MessageContextStructOutput = [sender: string] & { sender: string }; export type RevertContextStruct = { + sender: AddressLike; asset: AddressLike; amount: BigNumberish; revertMessage: BytesLike; }; export type RevertContextStructOutput = [ + sender: string, asset: string, amount: bigint, revertMessage: string -] & { asset: string; amount: bigint; revertMessage: string }; +] & { sender: string; asset: string; amount: bigint; revertMessage: string }; export interface ReceiverEVMInterface extends Interface { getFunction( diff --git a/v2/types/Revert.sol/Revertable.ts b/v2/types/Revert.sol/Revertable.ts index 6b4286b4..1ac5123d 100644 --- a/v2/types/Revert.sol/Revertable.ts +++ b/v2/types/Revert.sol/Revertable.ts @@ -22,16 +22,18 @@ import type { } from "../common"; export type RevertContextStruct = { + sender: AddressLike; asset: AddressLike; amount: BigNumberish; revertMessage: BytesLike; }; export type RevertContextStructOutput = [ + sender: string, asset: string, amount: bigint, revertMessage: string -] & { asset: string; amount: bigint; revertMessage: string }; +] & { sender: string; asset: string; amount: bigint; revertMessage: string }; export interface RevertableInterface extends Interface { getFunction(nameOrSignature: "onRevert"): FunctionFragment; diff --git a/v2/types/TestUniversalContract.ts b/v2/types/TestUniversalContract.ts index 3b48601e..c6783b89 100644 --- a/v2/types/TestUniversalContract.ts +++ b/v2/types/TestUniversalContract.ts @@ -36,16 +36,18 @@ export type ZContextStructOutput = [ ] & { origin: string; sender: string; chainID: bigint }; export type RevertContextStruct = { + sender: AddressLike; asset: AddressLike; amount: BigNumberish; revertMessage: BytesLike; }; export type RevertContextStructOutput = [ + sender: string, asset: string, amount: bigint, revertMessage: string -] & { asset: string; amount: bigint; revertMessage: string }; +] & { sender: string; asset: string; amount: bigint; revertMessage: string }; export interface TestUniversalContractInterface extends Interface { getFunction( diff --git a/v2/types/UniversalContract.sol/UniversalContract.ts b/v2/types/UniversalContract.sol/UniversalContract.ts index ea8c993e..4d7c3eaa 100644 --- a/v2/types/UniversalContract.sol/UniversalContract.ts +++ b/v2/types/UniversalContract.sol/UniversalContract.ts @@ -33,37 +33,18 @@ export type ZContextStructOutput = [ chainID: bigint ] & { origin: string; sender: string; chainID: bigint }; -export type RevertContextStruct = { - asset: AddressLike; - amount: BigNumberish; - revertMessage: BytesLike; -}; - -export type RevertContextStructOutput = [ - asset: string, - amount: bigint, - revertMessage: string -] & { asset: string; amount: bigint; revertMessage: string }; - export interface UniversalContractInterface extends Interface { - getFunction( - nameOrSignature: "onCrossChainCall" | "onRevert" - ): FunctionFragment; + getFunction(nameOrSignature: "onCrossChainCall"): FunctionFragment; encodeFunctionData( functionFragment: "onCrossChainCall", values: [ZContextStruct, AddressLike, BigNumberish, BytesLike] ): string; - encodeFunctionData( - functionFragment: "onRevert", - values: [RevertContextStruct] - ): string; decodeFunctionResult( functionFragment: "onCrossChainCall", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "onRevert", data: BytesLike): Result; } export interface UniversalContract extends BaseContract { @@ -120,12 +101,6 @@ export interface UniversalContract extends BaseContract { "nonpayable" >; - onRevert: TypedContractMethod< - [revertContext: RevertContextStruct], - [void], - "nonpayable" - >; - getFunction( key: string | FunctionFragment ): T; @@ -142,13 +117,6 @@ export interface UniversalContract extends BaseContract { [void], "nonpayable" >; - getFunction( - nameOrSignature: "onRevert" - ): TypedContractMethod< - [revertContext: RevertContextStruct], - [void], - "nonpayable" - >; filters: {}; } diff --git a/v2/types/ZetaConnectorBase.ts b/v2/types/ZetaConnectorBase.ts index d7606d02..f4c9386c 100644 --- a/v2/types/ZetaConnectorBase.ts +++ b/v2/types/ZetaConnectorBase.ts @@ -24,16 +24,18 @@ import type { } from "./common"; export type RevertContextStruct = { + sender: AddressLike; asset: AddressLike; amount: BigNumberish; revertMessage: BytesLike; }; export type RevertContextStructOutput = [ + sender: string, asset: string, amount: bigint, revertMessage: string -] & { asset: string; amount: bigint; revertMessage: string }; +] & { sender: string; asset: string; amount: bigint; revertMessage: string }; export interface ZetaConnectorBaseInterface extends Interface { getFunction( diff --git a/v2/types/ZetaConnectorNative.ts b/v2/types/ZetaConnectorNative.ts index d341c8cb..73b9c8c8 100644 --- a/v2/types/ZetaConnectorNative.ts +++ b/v2/types/ZetaConnectorNative.ts @@ -24,16 +24,18 @@ import type { } from "./common"; export type RevertContextStruct = { + sender: AddressLike; asset: AddressLike; amount: BigNumberish; revertMessage: BytesLike; }; export type RevertContextStructOutput = [ + sender: string, asset: string, amount: bigint, revertMessage: string -] & { asset: string; amount: bigint; revertMessage: string }; +] & { sender: string; asset: string; amount: bigint; revertMessage: string }; export interface ZetaConnectorNativeInterface extends Interface { getFunction( diff --git a/v2/types/ZetaConnectorNonNative.ts b/v2/types/ZetaConnectorNonNative.ts index 15897cc5..a6a57f71 100644 --- a/v2/types/ZetaConnectorNonNative.ts +++ b/v2/types/ZetaConnectorNonNative.ts @@ -24,16 +24,18 @@ import type { } from "./common"; export type RevertContextStruct = { + sender: AddressLike; asset: AddressLike; amount: BigNumberish; revertMessage: BytesLike; }; export type RevertContextStructOutput = [ + sender: string, asset: string, amount: bigint, revertMessage: string -] & { asset: string; amount: bigint; revertMessage: string }; +] & { sender: string; asset: string; amount: bigint; revertMessage: string }; export interface ZetaConnectorNonNativeInterface extends Interface { getFunction( diff --git a/v2/types/factories/ERC20CustodyEchidnaTest__factory.ts b/v2/types/factories/ERC20CustodyEchidnaTest__factory.ts index d6a75e93..2184a735 100644 --- a/v2/types/factories/ERC20CustodyEchidnaTest__factory.ts +++ b/v2/types/factories/ERC20CustodyEchidnaTest__factory.ts @@ -469,6 +469,11 @@ const _abi = [ type: "tuple", internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -738,6 +743,11 @@ const _abi = [ indexed: false, internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -850,7 +860,7 @@ const _abi = [ ] as const; const _bytecode = - "0x600680546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b179091526100799291906102a816565b600780546001600160a01b03929092166001600160a01b03199283168117909155600880549092161790553480156100b057600080fd5b5060085460065460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556101486000826102c7565b506101737f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826102c7565b5061019e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836102c7565b506101b7600080516020617295833981519152826102c7565b506101d0600080516020617295833981519152836102c7565b505050506040516101e090613853565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f080158015610232573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b0392831617905560085460405163ae7a3a6f60e01b815230600482015291169063ae7a3a6f90602401600060405180830381600087803b15801561028b57600080fd5b505af115801561029f573d6000803e3d6000fd5b505050506148d4565b60006102b2613860565b6102bd84848361035a565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166103525760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016102c1565b5060006102c1565b60008061036785846103d6565b90506103cb6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016103b5929190613969565b60408051601f19818403018152919052856103e2565b9150505b9392505050565b60006103cf8383610416565b60c0810151516000901561040c5761040584848460c0015161043760201b60201c565b90506103cf565b61040584846105b0565b6000610422838361067d565b6103cf838360200151846103e260201b60201c565b60008061044261068d565b905060006104508683610727565b9050600061046d8260600151836020015185610b4a60201b60201c565b9050600061047d83838989610cff565b9050600061048a8261197b565b602081015181519192509060030b156104e3578982604001516040516020016104b492919061398d565b60408051601f198184030181529082905262461bcd60e51b82526104da916004016139f3565b60405180910390fd5b600061052c6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611b1260201b60201c565b60405163c6ce059d60e01b81529091506000805160206172758339815191529063c6ce059d906105609084906004016139f3565b602060405180830381865afa15801561057d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a19190613a06565b9b9a5050505050505050505050565b604051638d1cc92560e01b8152600090819060008051602061727583398151915290638d1cc925906105e69087906004016139f3565b600060405180830381865afa158015610603573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261062b9190810190613afb565b9050600061065a8285604051602001610645929190613b2f565b60408051601f19818403018152919052611cb2565b90506001600160a01b0381166102bd5784846040516020016104b4929190613b5e565b61068982826000611cc5565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b815260609160008051602061727583398151915291829063d145736c906106db908490600401613bed565b600060405180830381865afa1580156106f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107209190810190613c22565b9250505090565b6107596040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020617275833981519152905061079e6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6107a785611d9f565b602082015260006107b786611ff4565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108219190810190613c22565b8683856020015160405160200161083b9493929190613c6a565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb119061087a9085906004016139f3565b600060405180830381865afa158015610897573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108bf9190810190613c22565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108ee908490600401613d02565b602060405180830381865afa15801561090b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092f9190613d3b565b61094457816040516020016104b49190613d5d565b6040516309389f5960e31b81526001600160a01b038616906349c4fac890610970908490600401613dd4565b600060405180830381865afa15801561098d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109b59190810190613c22565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f6906109e3908490600401613e1a565b602060405180830381865afa158015610a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a249190613d3b565b15610aa0576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a55908490600401613e1a565b600060405180830381865afa158015610a72573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a9a9190810190613c22565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610ac59190613e5b565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610af1929190613eb6565b600060405180830381865afa158015610b0e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b369190810190613c22565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b66579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610bad57610bad613edb565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610be757610be7613edb565b602002602001018190525084604051602001610c039190613ef1565b60405160208183030381529060405281600281518110610c2557610c25613edb565b602002602001018190525082604051602001610c419190613f26565b60405160208183030381529060405281600381518110610c6357610c63613edb565b60209081029190910101526000610c798261197b565b9050600081602001519050610ce0610cb360405180604001604052806005815260200164173539b7b760d91b81525061217760201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152906121a4565b610cf557856040516020016104b49190613f55565b9695505050505050565b60a08101516040805180820182526000808252602091820152815180830190925282518083529281019101526060906000805160206172758339815191529015610d49565b511590565b610e6557826020015115610dd95760405162461bcd60e51b815260206004820152605860248201526000805160206172b583398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016104da565b8260c0015115610e655760405162461bcd60e51b815260206004820152605360248201526000805160206172b583398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016104da565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e7e5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610ebf90613fea565b935060ff1681518110610ed457610ed4613edb565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610f159190614009565b604051602081830303815290604052828280610f3090613fea565b935060ff1681518110610f4557610f45613edb565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f7b90613fea565b935060ff1681518110610f9057610f90613edb565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610fce90613fea565b935060ff1681518110610fe357610fe3613edb565b60200260200101819052508760200151828280610fff90613fea565b935060ff168151811061101457611014613edb565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061105290613fea565b935060ff168151811061106757611067613edb565b60209081029190910101528751828261107f81613fea565b935060ff168151811061109457611094613edb565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b8152508282806110cd90613fea565b935060ff16815181106110e2576110e2613edb565b60209081029190910101526110f646612205565b828261110181613fea565b935060ff168151811061111657611116613edb565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061115590613fea565b935060ff168151811061116a5761116a613edb565b60200260200101819052508682828061118290613fea565b935060ff168151811061119757611197613edb565b60209081029190910101528551156112a55760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111e881613fea565b935060ff16815181106111fd576111fd613edb565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d906112349089906004016139f3565b600060405180830381865afa158015611251573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112799190810190613c22565b828261128481613fea565b935060ff168151811061129957611299613edb565b60200260200101819052505b846020015115611352576040805180820190915260128152712d2d766572696679536f75726365436f646560701b602082015282826112e381613fea565b935060ff16815181106112f8576112f8613edb565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b81525082828061132d90613fea565b935060ff168151811061134257611342613edb565b60200260200101819052506114b9565b611368610d448660a0015161217760201b60201c565b6113eb5760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261139b81613fea565b935060ff16815181106113b0576113b0613edb565b60200260200101819052508460a001516040516020016113d09190613ef1565b60405160208183030381529060405282828061132d90613fea565b8460c00151158015611410575061140e610d44896040015161217760201b60201c565b155b156114b95760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261144481613fea565b935060ff168151811061145957611459613edb565b602090810291909101015261146d88612297565b60405160200161147d9190613ef1565b60405160208183030381529060405282828061149890613fea565b935060ff16815181106114ad576114ad613edb565b60200260200101819052505b6114cf610d44866040015161217760201b60201c565b6115525760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b6020820152828261150081613fea565b935060ff168151811061151557611515613edb565b6020026020010181905250846040015182828061153190613fea565b935060ff168151811061154657611546613edb565b60200260200101819052505b606085015115611643576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261158481613fea565b935060ff168151811061159957611599613edb565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116179190810190613c22565b828261162281613fea565b935060ff168151811061163757611637613edb565b60200260200101819052505b60e085015151156116d55760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261167a81613fea565b935060ff168151811061168f5761168f613edb565b602090810291909101015260e0850151516116a990612205565b82826116b481613fea565b935060ff16815181106116c9576116c9613edb565b60200260200101819052505b60e085015160200151156117725760408051808201909152600a8152692d2d676173507269636560b01b6020820152828261170f81613fea565b935060ff168151811061172457611724613edb565b60200260200101819052506117468560e001516020015161220560201b60201c565b828261175181613fea565b935060ff168151811061176657611766613edb565b60200260200101819052505b60e085015160400151156118135760408051808201909152600e81526d2d2d6d617846656550657247617360901b602082015282826117b081613fea565b935060ff16815181106117c5576117c5613edb565b60200260200101819052506117e78560e001516040015161220560201b60201c565b82826117f281613fea565b935060ff168151811061180757611807613edb565b60200260200101819052505b60e085015160600151156118c35760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261186081613fea565b935060ff168151811061187557611875613edb565b60200260200101819052506118978560e001516060015161220560201b60201c565b82826118a281613fea565b935060ff16815181106118b7576118b7613edb565b60200260200101819052505b60008160ff166001600160401b038111156118e0576118e0613a2f565b60405190808252806020026020018201604052801561191357816020015b60608152602001906001900390816118fe5790505b50905060005b8260ff168160ff16101561196c57838160ff168151811061193c5761193c613edb565b6020026020010151828260ff168151811061195957611959613edb565b6020908102919091010152600101611919565b5093505050505b949350505050565b6119a26040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b815260008051602061727583398151915292600091849163d145736c916119f091869101614060565b600060405180830381865afa158015611a0d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a359190810190613c22565b90506000611a43868361294d565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a7391906140a7565b6000604051808303816000875af1158015611a92573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611aba919081019061410c565b805190915060030b15801590611ad35750602081015151155b8015611ae25750604081015151155b15610cf55781600081518110611afa57611afa613edb565b60200260200101516040516020016104b491906141bf565b60606000611b478560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b7e9082905b90612a87565b15611c7b576000611bfb82611bf581611bef611bc18a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612aae565b90612b0b565b9050611c2f611c28604051806040016040528060018152602001600560f91b81525061217760201b60201c565b8290612a87565b15611c6957611c66611c5f604051806040016040528060018152602001600560f91b81525061217760201b60201c565b8290612b90565b90505b611c7281612bb6565b925050506103cf565b8215611c945784846040516020016104b492919061438f565b50506040805160208101909152600081526103cf565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611cd457505050565b6000611ce1848484612c1b565b90506000611cee8261197b565b602081015181519192509060030b158015611d615750611d61611d35604051806040016040528060078152602001665355434345535360c81b81525061217760201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b78565b15611d6e57505050505050565b60408201515115611d8e5781604001516040516020016104b4919061440a565b806040516020016104b49190614454565b60606000611dd48360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611e0b611e04604051806040016040528060048152602001630b9cdbdb60e21b81525061217760201b60201c565b82906121a4565b15611e4d576103cf611e48611e41604051806040016040528060048152602001630b9cdbdb60e21b81525061217760201b60201c565b839061312e565b612bb6565b611e7f611e78604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b82906131b8565b600103611ee757611eb1611c5f604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b506103cf611e48611ee0604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b8390612b90565b611f16611e0460405180604001604052806005815260200164173539b7b760d91b81525061217760201b60201c565b15611fe3576000611f4e82611f49604051806040016040528060018152602001602f60f81b81525061217760201b60201c565b61324d565b905060008160018351611f6191906144a4565b81518110611f7157611f71613edb565b60200260200101519050611fda611e48611fad60405180604001604052806005815260200164173539b7b760d91b81525061217760201b60201c565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061312e565b95945050505050565b826040516020016104b491906144b7565b606060006120298360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612059611e04604051806040016040528060048152602001630b9cdbdb60e21b81525061217760201b60201c565b15612067576103cf81612bb6565b612092611e78604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b6001036120c7576103cf611e48611ee0604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b6120f6611e0460405180604001604052806005815260200164173539b7b760d91b81525061217760201b60201c565b15611fe357600061212982611f49604051806040016040528060018152602001602f60f81b81525061217760201b60201c565b905060018151111561216557806002825161214491906144a4565b8151811061215457612154613edb565b602002602001015192505050919050565b50826040516020016104b491906144b7565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121b9575060006102c1565b815183516020850151600092916121cf91614571565b6121d991906144a4565b9050826020015181036121f05760019150506102c1565b82516020840151819020912014905092915050565b60606000612212836132f1565b60010190506000816001600160401b0381111561223157612231613a2f565b6040519080825280601f01601f19166020018201604052801561225b576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461226557509392505050565b606060006122ae836040015161217760201b60201c565b90506122eb6122e46040518060400160405280600a8152602001691553931250d15394d15160b21b81525061217760201b60201c565b82906133d3565b156123125750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b6123456122e460405180604001604052806009815260200168556e6c6963656e736560b81b81525061217760201b60201c565b15612371575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b61239e6122e46040518060400160405280600381526020016213525560ea1b81525061217760201b60201c565b156123c457505060408051808201909152600381526213525560ea1b6020820152919050565b6123fa6122e46040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061217760201b60201c565b8061243a575061243a6122e46040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061217760201b60201c565b1561246657505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b61249c6122e46040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061217760201b60201c565b806124dc57506124dc6122e46040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061217760201b60201c565b15612508575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b61253f6122e46040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061217760201b60201c565b8061258057506125806122e4604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061217760201b60201c565b156125af57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125e66122e46040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061217760201b60201c565b8061262757506126276122e4604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061217760201b60201c565b1561265457505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b61268a6122e46040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061217760201b60201c565b156126b957505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126ef6122e46040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061217760201b60201c565b1561271e57505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61274f6122e46040518060400160405280600781526020016604d504c2d322e360cc1b81525061217760201b60201c565b1561277957505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b6127aa6122e46040518060400160405280600781526020016604f534c2d332e360cc1b81525061217760201b60201c565b156127d457505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6128086122e46040518060400160405280600a81526020016904170616368652d322e360b41b81525061217760201b60201c565b1561283557505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b61286c6122e46040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061217760201b60201c565b806128ad57506128ad6122e46040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061217760201b60201c565b156128da57505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b61290c6122e4604051806040016040528060088152602001674255534c2d312e3160c01b81525061217760201b60201c565b1561293657505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b604080840151845191516104b49290602001614584565b60608060005b84518110156129d8578185828151811061296f5761296f613edb565b6020026020010151604051602001612988929190613b2f565b6040516020818303038152906040529150600185516129a791906144a4565b81146129d057816040516020016129be91906146d4565b60405160208183030381529060405291505b600101612953565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129f15790505090508381600081518110612a1c57612a1c613edb565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a5557612a55613edb565b60200260200101819052508181600281518110612a7457612a74613edb565b6020908102919091010152949350505050565b6020808301518351835192840151600093612aa592918491906133e7565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612adb93906134f8565b9050836020015181612aed91906144a4565b84518590612afc9083906144a4565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612b305750816102c1565b6020808301519084015160019114612b575750815160208481015190840151829020919020145b8015612b8857825184518590612b6e9083906144a4565b9052508251602085018051612b84908390614571565b9052505b509192915050565b6040805180820190915260008082526020820152612baf838383613618565b5092915050565b6060600082600001516001600160401b03811115612bd657612bd6613a2f565b6040519080825280601f01601f191660200182016040528015612c00576020820181803683370190505b50602084810151855192935090830191612baf9183916136be565b60606000612c2761068d565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612c445790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c8590613fea565b935060ff1681518110612c9a57612c9a613edb565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612cd591906146f9565b604051602081830303815290604052828280612cf090613fea565b935060ff1681518110612d0557612d05613edb565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612d3d90613fea565b935060ff1681518110612d5257612d52613edb565b602002602001018190525082604051602001612d6e9190613f26565b604051602081830303815290604052828280612d8990613fea565b935060ff1681518110612d9e57612d9e613edb565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612dd890613fea565b935060ff1681518110612ded57612ded613edb565b6020908102919091010152612e028784613738565b8282612e0d81613fea565b935060ff1681518110612e2257612e22613edb565b602090810291909101015285515115612eba5760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e6281613fea565b935060ff1681518110612e7757612e77613edb565b60209081029190910101528551612e8e9084613738565b8282612e9981613fea565b935060ff1681518110612eae57612eae613edb565b60200260200101819052505b856080015115612f285760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612f0381613fea565b935060ff1681518110612f1857612f18613edb565b6020026020010181905250612f83565b8415612f83576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f6281613fea565b935060ff1681518110612f7757612f77613edb565b60200260200101819052505b6040860151511561300f5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612fbd81613fea565b935060ff1681518110612fd257612fd2613edb565b60200260200101819052508560400151828280612fee90613fea565b935060ff168151811061300357613003613edb565b60200260200101819052505b8560600151156130795760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261305881613fea565b935060ff168151811061306d5761306d613edb565b60200260200101819052505b60008160ff166001600160401b0381111561309657613096613a2f565b6040519080825280602002602001820160405280156130c957816020015b60608152602001906001900390816130b45790505b50905060005b8260ff168160ff16101561312257838160ff16815181106130f2576130f2613edb565b6020026020010151828260ff168151811061310f5761310f613edb565b60209081029190910101526001016130cf565b50979650505050505050565b60408051808201909152600080825260208201528151835110156131535750816102c1565b8151835160208501516000929161316991614571565b61317391906144a4565b60208401519091506001908214613194575082516020840151819020908220145b80156131af578351855186906131ab9083906144a4565b9052505b50929392505050565b8051825160208085015190840151600093849390926131d89284906134f8565b6131e29190614571565b90505b835160208501516131f69190614571565b8111612baf57816132068161473e565b925050826000015161323c85602001518361322191906144a4565b865161322d91906144a4565b855160208701518591906134f8565b6132469190614571565b90506131e5565b6060600061325b84846131b8565b613266906001614571565b6001600160401b0381111561327d5761327d613a2f565b6040519080825280602002602001820160405280156132b057816020015b606081526020019060019003908161329b5790505b50905060005b8151811015611caa576132cc611e488686612b90565b8282815181106132de576132de613edb565b60209081029190910101526001016132b6565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061333a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613366576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061338457662386f26fc10000830492506010015b6305f5e100831061339c576305f5e100830492506008015b61271083106133b057612710830492506004015b606483106133c2576064830492506002015b600a83106102c15760010192915050565b60006133df8383613778565b159392505050565b6000808584116134ee576020841161349a576000841561343257600161340e8660206144a4565b613419906008614757565b613424906002614855565b61342e91906144a4565b1990505b83518116856134418989614571565b61344b91906144a4565b805190935082165b8181146134855787841161346d5787945050505050611973565b8361347781614861565b945050828451169050613453565b61348f8785614571565b945050505050611973565b8383206134a785886144a4565b6134b19087614571565b91505b8582106134ec578482208082036134d9576134cf8684614571565b9350505050611973565b6134e46001846144a4565b9250506134b4565b505b5092949350505050565b6000838186851161360357602085116135b257600085156135445760016135208760206144a4565b61352b906008614757565b613536906002614855565b61354091906144a4565b1990505b845181166000876135558b8b614571565b61355f91906144a4565b855190915083165b8281146135a45781861061358c5761357f8b8b614571565b9650505050505050611973565b856135968161473e565b965050838651169050613567565b859650505050505050611973565b508383206000905b6135c486896144a4565b8211613601578583208082036135e05783945050505050611973565b6135eb600185614571565b93505081806135f99061473e565b9250506135ba565b505b61360d8787614571565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161364593906134f8565b60208087018051918601919091525190915061366190826144a4565b8352845160208601516136749190614571565b810361368357600085526136b5565b835183516136919190614571565b855186906136a09083906144a4565b90525083516136af9082614571565b60208601525b50909392505050565b602081106136f657815183526136d5602084614571565b92506136e2602083614571565b91506136ef6020826144a4565b90506136be565b600019811561372557600161370c8360206144a4565b61371890610100614855565b61372291906144a4565b90505b9151835183169219169190911790915250565b606060006137468484610727565b805160208083015160405193945061376093909101614878565b60405160208183030381529060405291505092915050565b815181516000919081111561378b575081515b6020808501519084015160005b8381101561384457825182518082146138145760001960208710156137f3576001846137c58960206144a4565b6137cf9190614571565b6137da906008614757565b6137e5906002614855565b6137ef91906144a4565b1990505b81811683821681810391146138115797506102c19650505050505050565b50505b61381f602086614571565b945061382c602085614571565b9350505060208161383d9190614571565b9050613798565b5084518651610cf591906148b4565b610c9f806165d683390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016138a36138a8565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016138a36040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b8381101561393457818101518382015260200161391c565b50506000910152565b60008151808452613955816020860160208601613919565b601f01601f19169290920160200192915050565b6001600160a01b03831681526040602082018190526000906119739083018461393d565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516139c581601a850160208801613919565b6101d160f51b601a9184019182015283516139e781601c840160208801613919565b01601c01949350505050565b6020815260006103cf602083018461393d565b600060208284031215613a1857600080fd5b81516001600160a01b03811681146103cf57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a6757613a67613a2f565b60405290565b6000806001600160401b03841115613a8757613a87613a2f565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613ab557613ab5613a2f565b604052838152905080828401851015613acd57600080fd5b611caa846020830185613919565b600082601f830112613aec57600080fd5b6103cf83835160208501613a6d565b600060208284031215613b0d57600080fd5b81516001600160401b03811115613b2357600080fd5b6102bd84828501613adb565b60008351613b41818460208801613919565b835190830190613b55818360208801613919565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b9681601a850160208801613919565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613bd3816033840160208801613919565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b60608201526080602082015260006103cf608083018461393d565b600060208284031215613c3457600080fd5b81516001600160401b03811115613c4a57600080fd5b8201601f81018413613c5b57600080fd5b6102bd84825160208401613a6d565b60008551613c7c818460208a01613919565b602f60f81b9083019081528551613c9a816001840160208a01613919565b602f60f81b600192909101918201528451613cbc816002840160208901613919565b600181830101915050602f60f81b60018201528351613ce2816002840160208801613919565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613d15604083018461393d565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d4d57600080fd5b815180151581146103cf57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d9581601f850160208701613919565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613de7604083018461393d565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613e2d604083018461393d565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e93816014850160208701613919565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613ec9604083018561393d565b82810360208401526103cb818561393d565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613f0e816001850160208701613919565b601160f91b6001939091019283015250600201919050565b60008251613f38818460208701613919565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613fc781604b850160208701613919565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff810361400057614000613fd4565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b602082015260008251614053816029850160208701613919565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006103cf608083018461393d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561410057603f198786030184526140eb85835161393d565b945060209384019391909101906001016140cf565b50929695505050505050565b60006020828403121561411e57600080fd5b81516001600160401b0381111561413457600080fd5b82016060818503121561414657600080fd5b61414e613a45565b81518060030b811461415f57600080fd5b815260208201516001600160401b0381111561417a57600080fd5b61418686828501613adb565b60208301525060408201516001600160401b038111156141a557600080fd5b6141b186828501613adb565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b602082015260008251614201816021850160208701613919565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b6020820152600083516143d1816021850160208801613919565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143fe81602e840160208801613919565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b602082015260008251614053816029850160208701613919565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b602082015260008251614497816022850160208701613919565b9190910160220192915050565b818103818111156102c1576102c1613fd4565b6d021b7b73a3930b1ba103730b6b2960951b8152600082516144e081600e850160208701613919565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b808201808211156102c1576102c1613fd4565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145bc816018850160208801613919565b6301034b7160e51b60189184019182015283516145e081601c840160208801613919565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146e6818460208701613919565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161473181601c850160208701613919565b91909101601c0192915050565b60006001820161475057614750613fd4565b5060010190565b80820281158282048414176102c1576102c1613fd4565b6001815b60018411156147a95780850481111561478d5761478d613fd4565b600184161561479b57908102905b60019390931c928002614772565b935093915050565b6000826147c0575060016102c1565b816147cd575060006102c1565b81600181146147e357600281146147ed57614809565b60019150506102c1565b60ff8411156147fe576147fe613fd4565b50506001821b6102c1565b5060208310610133831016604e8410600b841016171561482c575081810a6102c1565b614839600019848461476e565b806000190482111561484d5761484d613fd4565b029392505050565b60006103cf83836147b1565b60008161487057614870613fd4565b506000190190565b6000835161488a818460208801613919565b601d60f91b90830190815283516148a8816001840160208801613919565b01600101949350505050565b8181036000831280158383131683831282161715612baf57612baf613fd4565b608051611cc4614912600039600081816101eb015281816105b001528181610605015281816108fe01528181610bb70152610c0c0152611cc46000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806381100bf0116100f9578063c709ab6e11610097578063d9caed1211610071578063d9caed121461041c578063e609055e1461042f578063e63ab1e914610442578063eab103df1461046957600080fd5b8063c709ab6e146103d3578063d547741f146103e6578063d936547e146103f957600080fd5b806391d14854116100d357806391d148541461036c5780639a590427146103a55780639b19251a146103b8578063a217fddf146103cb57600080fd5b806381100bf01461032a5780638456cb591461033d57806385f438c11461034557600080fd5b806336568abe11610166578063570618e111610140578063570618e1146102d25780635b112591146102f95780635c975abb1461030c5780636133b4bb1461031757600080fd5b806336568abe146102a45780633c2f05a8146102b75780633f4ba83a146102ca57600080fd5b8063248a9ca311610197578063248a9ca31461023a578063252f07bf1461026c5780632f2ff15d1461029157600080fd5b806301ffc9a7146101be578063116191b6146101e657806321fc65f214610225575b600080fd5b6101d16101cc366004611614565b61047c565b60405190151581526020015b60405180910390f35b61020d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101dd565b6102386102333660046116b4565b610515565b005b61025e610248366004611727565b6000908152600160208190526040909120015490565b6040519081526020016101dd565b6004546101d19074010000000000000000000000000000000000000000900460ff1681565b61023861029f366004611740565b6106d5565b6102386102b2366004611740565b610701565b60055461020d906001600160a01b031681565b610238610752565b61025e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60045461020d906001600160a01b031681565b60025460ff166101d1565b610238610325366004611770565b610787565b60065461020d906001600160a01b031681565b61023861097f565b61025e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101d161037a366004611740565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6102386103b33660046117cc565b6109b1565b6102386103c63660046117cc565b610a65565b61025e600081565b6102386103e13660046117e9565b610b1c565b6102386103f4366004611740565b610ce1565b6101d16104073660046117cc565b60036020526000908152604090205460ff1681565b61023861042a36600461188c565b610d07565b61023861043d3660046118cd565b610dff565b61025e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023861047736600461196c565b61102b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061050f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61051d611081565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610547816110c4565b61054f6110ce565b6001600160a01b03851660009081526003602052604090205460ff166105a1576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105d56001600160a01b0386167f00000000000000000000000000000000000000000000000000000000000000008661110d565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106429088908a908990899089906004016119d2565b600060405180830381600087803b15801561065c57600080fd5b505af1158015610670573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d58686866040516106bb93929190611a15565b60405180910390a3506106ce6001600055565b5050505050565b600082815260016020819052604090912001546106f1816110c4565b6106fb8383611181565b50505050565b6001600160a01b0381163314610743576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074d8282611214565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077c816110c4565b61078461129b565b50565b600580546001600160a01b0316906340c10f199030906107a8908790611a67565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561080657600080fd5b505af115801561081a573d6000803e3d6000fd5b5050600580546008546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481019390935216925063a9059cbb91506044016020604051808303816000875af115801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b19190611a7a565b506005546108cb906001600160a01b031685858585610515565b6005546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152909116906370a0823190602401602060405180830381865afa15801561094e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109729190611a97565b156106fb576106fb611ab0565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109a9816110c4565b6107846112ed565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6109db816110c4565b6001600160a01b038216610a1b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a8f816110c4565b6001600160a01b038216610acf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b610b24611081565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610b4e816110c4565b610b566110ce565b6001600160a01b03861660009081526003602052604090205460ff16610ba8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bdc6001600160a01b0387167f00000000000000000000000000000000000000000000000000000000000000008761110d565b6040517fd0b492c30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610c4b9089908b908a908a908a908a90600401611b90565b600060405180830381600087803b158015610c6557600080fd5b505af1158015610c79573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b87878787604051610cc69493929190611be7565b60405180910390a350610cd96001600055565b505050505050565b60008281526001602081905260409091200154610cfd816110c4565b6106fb8383611214565b610d0f611081565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d39816110c4565b610d416110ce565b6001600160a01b03831660009081526003602052604090205460ff16610d93576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610da76001600160a01b038416858461110d565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610dec91815260200190565b60405180910390a35061074d6001600055565b610e07611081565b610e0f6110ce565b60045474010000000000000000000000000000000000000000900460ff16610e63576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610eb5576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f399190611a97565b9050610f506001600160a01b03861633308761132a565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610fd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffb9190611a97565b6110059190611c13565b8787604051611018959493929190611c26565b60405180910390a250610cd96001600055565b6000611036816110c4565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6002600054036110bd576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107848133611363565b60025460ff161561110b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261074d91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506113da565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661120c5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a450600161050f565b50600061050f565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff161561120c5760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161050f565b6112a3611456565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6112f56110ce565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112d03390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106fb9186918216906323b872dd9060840161113a565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff166113d6576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b60006113ef6001600160a01b03841683611492565b905080516000141580156114145750808060200190518101906114129190611a7a565b155b1561074d576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016113cd565b60025460ff1661110b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606114a0838360006114a7565b9392505050565b6060814710156114e5576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016113cd565b600080856001600160a01b031684866040516115019190611c5f565b60006040518083038185875af1925050503d806000811461153e576040519150601f19603f3d011682016040523d82523d6000602084013e611543565b606091505b509150915061155386838361155d565b9695505050505050565b6060826115725761156d826115d2565b6114a0565b815115801561158957506001600160a01b0384163b155b156115cb576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016113cd565b50806114a0565b8051156115e25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561162657600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114a057600080fd5b6001600160a01b038116811461078457600080fd5b60008083601f84011261167d57600080fd5b50813567ffffffffffffffff81111561169557600080fd5b6020830191508360208285010111156116ad57600080fd5b9250929050565b6000806000806000608086880312156116cc57600080fd5b85356116d781611656565b945060208601356116e781611656565b935060408601359250606086013567ffffffffffffffff81111561170a57600080fd5b6117168882890161166b565b969995985093965092949392505050565b60006020828403121561173957600080fd5b5035919050565b6000806040838503121561175357600080fd5b82359150602083013561176581611656565b809150509250929050565b6000806000806060858703121561178657600080fd5b843561179181611656565b935060208501359250604085013567ffffffffffffffff8111156117b457600080fd5b6117c08782880161166b565b95989497509550505050565b6000602082840312156117de57600080fd5b81356114a081611656565b60008060008060008060a0878903121561180257600080fd5b863561180d81611656565b9550602087013561181d81611656565b945060408701359350606087013567ffffffffffffffff81111561184057600080fd5b61184c89828a0161166b565b909450925050608087013567ffffffffffffffff81111561186c57600080fd5b87016060818a03121561187e57600080fd5b809150509295509295509295565b6000806000606084860312156118a157600080fd5b83356118ac81611656565b925060208401356118bc81611656565b929592945050506040919091013590565b600080600080600080608087890312156118e657600080fd5b863567ffffffffffffffff8111156118fd57600080fd5b61190989828a0161166b565b909750955050602087013561191d81611656565b935060408701359250606087013567ffffffffffffffff81111561194057600080fd5b61194c89828a0161166b565b979a9699509497509295939492505050565b801515811461078457600080fd5b60006020828403121561197e57600080fd5b81356114a08161195e565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b0385166020820152836040820152608060608201526000611a0a608083018486611989565b979650505050505050565b838152604060208201526000611a2f604083018486611989565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561050f5761050f611a38565b600060208284031215611a8c57600080fd5b81516114a08161195e565b600060208284031215611aa957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008135611aec81611656565b6001600160a01b03168352602082013567ffffffffffffffff8116808214611b1357600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112611b4f57600080fd5b820160208101903567ffffffffffffffff811115611b6c57600080fd5b803603821315611b7b57600080fd5b60606040860152611a2f606086018284611989565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a060608201526000611bc860a083018587611989565b8281036080840152611bda8185611adf565b9998505050505050505050565b848152606060208201526000611c01606083018587611989565b8281036040840152611a0a8185611adf565b8181038181111561050f5761050f611a38565b606081526000611c3a606083018789611989565b8560208401528281036040840152611c53818587611989565b98975050505050505050565b6000825160005b81811015611c805760208186018101518583015201611c66565b50600092019182525091905056fea2646970667358221220444e0c88cfeeab38398e0de5e0726788900fb3cc4b57214ea3327cf8fa0c642c64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420"; + "0x600680546001600160a01b03191633908117909155600e60a09081526d11d85d195dd85e5155934b9cdbdb60921b60c0526101049190915261012361012481905261014452606460e090815261016460405261010080516001600160e01b0390811663c0c53b8b60e01b179091526100799291906102a816565b600780546001600160a01b03929092166001600160a01b03199283168117909155600880549092161790553480156100b057600080fd5b5060085460065460016000556002805460ff191690556001600160a01b039182169116808215806100e857506001600160a01b038216155b806100fa57506001600160a01b038116155b156101185760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556101486000826102c7565b506101737f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826102c7565b5061019e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836102c7565b506101b76000805160206172b1833981519152826102c7565b506101d06000805160206172b1833981519152836102c7565b505050506040516101e090613853565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f080158015610232573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b0392831617905560085460405163ae7a3a6f60e01b815230600482015291169063ae7a3a6f90602401600060405180830381600087803b15801561028b57600080fd5b505af115801561029f573d6000803e3d6000fd5b505050506148d4565b60006102b2613860565b6102bd84848361035a565b9150505b92915050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166103525760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016102c1565b5060006102c1565b60008061036785846103d6565b90506103cb6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016103b5929190613969565b60408051601f19818403018152919052856103e2565b9150505b9392505050565b60006103cf8383610416565b60c0810151516000901561040c5761040584848460c0015161043760201b60201c565b90506103cf565b61040584846105b0565b6000610422838361067d565b6103cf838360200151846103e260201b60201c565b60008061044261068d565b905060006104508683610727565b9050600061046d8260600151836020015185610b4a60201b60201c565b9050600061047d83838989610cff565b9050600061048a8261197b565b602081015181519192509060030b156104e3578982604001516040516020016104b492919061398d565b60408051601f198184030181529082905262461bcd60e51b82526104da916004016139f3565b60405180910390fd5b600061052c6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001611b1260201b60201c565b60405163c6ce059d60e01b81529091506000805160206172918339815191529063c6ce059d906105609084906004016139f3565b602060405180830381865afa15801561057d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a19190613a06565b9b9a5050505050505050505050565b604051638d1cc92560e01b8152600090819060008051602061729183398151915290638d1cc925906105e69087906004016139f3565b600060405180830381865afa158015610603573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261062b9190810190613afb565b9050600061065a8285604051602001610645929190613b2f565b60408051601f19818403018152919052611cb2565b90506001600160a01b0381166102bd5784846040516020016104b4929190613b5e565b61068982826000611cc5565b5050565b60408051808201825260038152621bdd5d60ea1b602082015290516334515cdb60e21b815260609160008051602061729183398151915291829063d145736c906106db908490600401613bed565b600060405180830381865afa1580156106f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107209190810190613c22565b9250505090565b6107596040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000600080516020617291833981519152905061079e6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6107a785611d9f565b602082015260006107b786611ff4565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108219190810190613c22565b8683856020015160405160200161083b9493929190613c6a565b60408051601f19818403018152908290526360f9bb1160e01b825291506000906001600160a01b038616906360f9bb119061087a9085906004016139f3565b600060405180830381865afa158015610897573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108bf9190810190613c22565b604051636da11afb60e11b81529091506001600160a01b0386169063db4235f6906108ee908490600401613d02565b602060405180830381865afa15801561090b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092f9190613d3b565b61094457816040516020016104b49190613d5d565b6040516309389f5960e31b81526001600160a01b038616906349c4fac890610970908490600401613dd4565b600060405180830381865afa15801561098d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109b59190810190613c22565b8452604051636da11afb60e11b81526001600160a01b0386169063db4235f6906109e3908490600401613e1a565b602060405180830381865afa158015610a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a249190613d3b565b15610aa0576040516309389f5960e31b81526001600160a01b038616906349c4fac890610a55908490600401613e1a565b600060405180830381865afa158015610a72573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a9a9190810190613c22565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001610ac59190613e5b565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610af1929190613eb6565b600060405180830381865afa158015610b0e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b369190810190613c22565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081610b66579050509050604051806040016040528060048152602001630677265760e41b81525081600081518110610bad57610bad613edb565b6020026020010181905250604051806040016040528060038152602001620b5c9b60ea1b81525081600181518110610be757610be7613edb565b602002602001018190525084604051602001610c039190613ef1565b60405160208183030381529060405281600281518110610c2557610c25613edb565b602002602001018190525082604051602001610c419190613f26565b60405160208183030381529060405281600381518110610c6357610c63613edb565b60209081029190910101526000610c798261197b565b9050600081602001519050610ce0610cb360405180604001604052806005815260200164173539b7b760d91b81525061217760201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152906121a4565b610cf557856040516020016104b49190613f55565b9695505050505050565b60a08101516040805180820182526000808252602091820152815180830190925282518083529281019101526060906000805160206172918339815191529015610d49565b511590565b610e6557826020015115610dd95760405162461bcd60e51b815260206004820152605860248201526000805160206172d183398151915260448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016104da565b8260c0015115610e655760405162461bcd60e51b815260206004820152605360248201526000805160206172d183398151915260448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016104da565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081610e7e5790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280610ebf90613fea565b935060ff1681518110610ed457610ed4613edb565b60200260200101819052506040518060400160405280600d81526020016c302e302e312d616c7068612e3760981b815250604051602001610f159190614009565b604051602081830303815290604052828280610f3090613fea565b935060ff1681518110610f4557610f45613edb565b6020026020010181905250604051806040016040528060068152602001656465706c6f7960d01b815250828280610f7b90613fea565b935060ff1681518110610f9057610f90613edb565b60200260200101819052506040518060400160405280600e81526020016d2d2d636f6e74726163744e616d6560901b815250828280610fce90613fea565b935060ff1681518110610fe357610fe3613edb565b60200260200101819052508760200151828280610fff90613fea565b935060ff168151811061101457611014613edb565b60200260200101819052506040518060400160405280600e81526020016d05a5ac6dedce8e4c2c6e8a0c2e8d60931b81525082828061105290613fea565b935060ff168151811061106757611067613edb565b60209081029190910101528751828261107f81613fea565b935060ff168151811061109457611094613edb565b6020026020010181905250604051806040016040528060098152602001680b4b58da185a5b925960ba1b8152508282806110cd90613fea565b935060ff16815181106110e2576110e2613edb565b60209081029190910101526110f646612205565b828261110181613fea565b935060ff168151811061111657611116613edb565b60200260200101819052506040518060400160405280600f81526020016e2d2d6275696c64496e666f46696c6560881b81525082828061115590613fea565b935060ff168151811061116a5761116a613edb565b60200260200101819052508682828061118290613fea565b935060ff168151811061119757611197613edb565b60209081029190910101528551156112a55760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826111e881613fea565b935060ff16815181106111fd576111fd613edb565b60209081029190910101526040516371aad10d60e01b81526001600160a01b038416906371aad10d906112349089906004016139f3565b600060405180830381865afa158015611251573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112799190810190613c22565b828261128481613fea565b935060ff168151811061129957611299613edb565b60200260200101819052505b846020015115611352576040805180820190915260128152712d2d766572696679536f75726365436f646560701b602082015282826112e381613fea565b935060ff16815181106112f8576112f8613edb565b60200260200101819052506040518060400160405280600581526020016466616c736560d81b81525082828061132d90613fea565b935060ff168151811061134257611342613edb565b60200260200101819052506114b9565b611368610d448660a0015161217760201b60201c565b6113eb5760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261139b81613fea565b935060ff16815181106113b0576113b0613edb565b60200260200101819052508460a001516040516020016113d09190613ef1565b60405160208183030381529060405282828061132d90613fea565b8460c00151158015611410575061140e610d44896040015161217760201b60201c565b155b156114b95760408051808201909152600d81526c2d2d6c6963656e73655479706560981b6020820152828261144481613fea565b935060ff168151811061145957611459613edb565b602090810291909101015261146d88612297565b60405160200161147d9190613ef1565b60405160208183030381529060405282828061149890613fea565b935060ff16815181106114ad576114ad613edb565b60200260200101819052505b6114cf610d44866040015161217760201b60201c565b6115525760408051808201909152600b81526a0b4b5c995b185e595c925960aa1b6020820152828261150081613fea565b935060ff168151811061151557611515613edb565b6020026020010181905250846040015182828061153190613fea565b935060ff168151811061154657611546613edb565b60200260200101819052505b606085015115611643576040805180820190915260068152650b4b5cd85b1d60d21b6020820152828261158481613fea565b935060ff168151811061159957611599613edb565b60209081029190910101526060850151604051631623433d60e31b815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156115ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116179190810190613c22565b828261162281613fea565b935060ff168151811061163757611637613edb565b60200260200101819052505b60e085015151156116d55760408051808201909152600a8152690b4b59d85cd31a5b5a5d60b21b6020820152828261167a81613fea565b935060ff168151811061168f5761168f613edb565b602090810291909101015260e0850151516116a990612205565b82826116b481613fea565b935060ff16815181106116c9576116c9613edb565b60200260200101819052505b60e085015160200151156117725760408051808201909152600a8152692d2d676173507269636560b01b6020820152828261170f81613fea565b935060ff168151811061172457611724613edb565b60200260200101819052506117468560e001516020015161220560201b60201c565b828261175181613fea565b935060ff168151811061176657611766613edb565b60200260200101819052505b60e085015160400151156118135760408051808201909152600e81526d2d2d6d617846656550657247617360901b602082015282826117b081613fea565b935060ff16815181106117c5576117c5613edb565b60200260200101819052506117e78560e001516040015161220560201b60201c565b82826117f281613fea565b935060ff168151811061180757611807613edb565b60200260200101819052505b60e085015160600151156118c35760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261186081613fea565b935060ff168151811061187557611875613edb565b60200260200101819052506118978560e001516060015161220560201b60201c565b82826118a281613fea565b935060ff16815181106118b7576118b7613edb565b60200260200101819052505b60008160ff166001600160401b038111156118e0576118e0613a2f565b60405190808252806020026020018201604052801561191357816020015b60608152602001906001900390816118fe5790505b50905060005b8260ff168160ff16101561196c57838160ff168151811061193c5761193c613edb565b6020026020010151828260ff168151811061195957611959613edb565b6020908102919091010152600101611919565b5093505050505b949350505050565b6119a26040518060600160405280600060030b815260200160608152602001606081525090565b6040805180820182526004808252630c4c2e6d60e31b602083015291516334515cdb60e21b815260008051602061729183398151915292600091849163d145736c916119f091869101614060565b600060405180830381865afa158015611a0d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a359190810190613c22565b90506000611a43868361294d565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401611a7391906140a7565b6000604051808303816000875af1158015611a92573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611aba919081019061410c565b805190915060030b15801590611ad35750602081015151155b8015611ae25750604081015151155b15610cf55781600081518110611afa57611afa613edb565b60200260200101516040516020016104b491906141bf565b60606000611b478560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150611b7e9082905b90612a87565b15611c7b576000611bfb82611bf581611bef611bc18a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90612aae565b90612b0b565b9050611c2f611c28604051806040016040528060018152602001600560f91b81525061217760201b60201c565b8290612a87565b15611c6957611c66611c5f604051806040016040528060018152602001600560f91b81525061217760201b60201c565b8290612b90565b90505b611c7281612bb6565b925050506103cf565b8215611c945784846040516020016104b492919061438f565b50506040805160208101909152600081526103cf565b509392505050565b6000808251602084016000f09392505050565b8160a0015115611cd457505050565b6000611ce1848484612c1b565b90506000611cee8261197b565b602081015181519192509060030b158015611d615750611d61611d35604051806040016040528060078152602001665355434345535360c81b81525061217760201b60201c565b604080518082018252600080825260209182015281518083019092528451825280850190820152611b78565b15611d6e57505050505050565b60408201515115611d8e5781604001516040516020016104b4919061440a565b806040516020016104b49190614454565b60606000611dd48360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050611e0b611e04604051806040016040528060048152602001630b9cdbdb60e21b81525061217760201b60201c565b82906121a4565b15611e4d576103cf611e48611e41604051806040016040528060048152602001630b9cdbdb60e21b81525061217760201b60201c565b839061312e565b612bb6565b611e7f611e78604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b82906131b8565b600103611ee757611eb1611c5f604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b506103cf611e48611ee0604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b8390612b90565b611f16611e0460405180604001604052806005815260200164173539b7b760d91b81525061217760201b60201c565b15611fe3576000611f4e82611f49604051806040016040528060018152602001602f60f81b81525061217760201b60201c565b61324d565b905060008160018351611f6191906144a4565b81518110611f7157611f71613edb565b60200260200101519050611fda611e48611fad60405180604001604052806005815260200164173539b7b760d91b81525061217760201b60201c565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061312e565b95945050505050565b826040516020016104b491906144b7565b606060006120298360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b9050612059611e04604051806040016040528060048152602001630b9cdbdb60e21b81525061217760201b60201c565b15612067576103cf81612bb6565b612092611e78604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b6001036120c7576103cf611e48611ee0604051806040016040528060018152602001601d60f91b81525061217760201b60201c565b6120f6611e0460405180604001604052806005815260200164173539b7b760d91b81525061217760201b60201c565b15611fe357600061212982611f49604051806040016040528060018152602001602f60f81b81525061217760201b60201c565b905060018151111561216557806002825161214491906144a4565b8151811061215457612154613edb565b602002602001015192505050919050565b50826040516020016104b491906144b7565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b8051825160009111156121b9575060006102c1565b815183516020850151600092916121cf91614571565b6121d991906144a4565b9050826020015181036121f05760019150506102c1565b82516020840151819020912014905092915050565b60606000612212836132f1565b60010190506000816001600160401b0381111561223157612231613a2f565b6040519080825280601f01601f19166020018201604052801561225b576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461226557509392505050565b606060006122ae836040015161217760201b60201c565b90506122eb6122e46040518060400160405280600a8152602001691553931250d15394d15160b21b81525061217760201b60201c565b82906133d3565b156123125750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b6123456122e460405180604001604052806009815260200168556e6c6963656e736560b81b81525061217760201b60201c565b15612371575050604080518082019091526009815268556e6c6963656e736560b81b6020820152919050565b61239e6122e46040518060400160405280600381526020016213525560ea1b81525061217760201b60201c565b156123c457505060408051808201909152600381526213525560ea1b6020820152919050565b6123fa6122e46040518060400160405280600c81526020016b47504c2d322e302d6f6e6c7960a01b81525061217760201b60201c565b8061243a575061243a6122e46040518060400160405280601081526020016f23a8261699171816b7b916b630ba32b960811b81525061217760201b60201c565b1561246657505060408051808201909152600981526823a72a9023a8263b1960b91b6020820152919050565b61249c6122e46040518060400160405280600c81526020016b47504c2d332e302d6f6e6c7960a01b81525061217760201b60201c565b806124dc57506124dc6122e46040518060400160405280601081526020016f23a8261699971816b7b916b630ba32b960811b81525061217760201b60201c565b15612508575050604080518082019091526009815268474e552047504c763360b81b6020820152919050565b61253f6122e46040518060400160405280600d81526020016c4c47504c2d322e312d6f6e6c7960981b81525061217760201b60201c565b8061258057506125806122e4604051806040016040528060118152602001702623a8261699171896b7b916b630ba32b960791b81525061217760201b60201c565b156125af57505060408051808201909152600c81526b474e55204c47504c76322e3160a01b6020820152919050565b6125e66122e46040518060400160405280600d81526020016c4c47504c2d332e302d6f6e6c7960981b81525061217760201b60201c565b8061262757506126276122e4604051806040016040528060118152602001702623a8261699971816b7b916b630ba32b960791b81525061217760201b60201c565b1561265457505060408051808201909152600a815269474e55204c47504c763360b01b6020820152919050565b61268a6122e46040518060400160405280600c81526020016b4253442d322d436c6175736560a01b81525061217760201b60201c565b156126b957505060408051808201909152600c81526b4253442d322d436c6175736560a01b6020820152919050565b6126ef6122e46040518060400160405280600c81526020016b4253442d332d436c6175736560a01b81525061217760201b60201c565b1561271e57505060408051808201909152600c81526b4253442d332d436c6175736560a01b6020820152919050565b61274f6122e46040518060400160405280600781526020016604d504c2d322e360cc1b81525061217760201b60201c565b1561277957505060408051808201909152600781526604d504c2d322e360cc1b6020820152919050565b6127aa6122e46040518060400160405280600781526020016604f534c2d332e360cc1b81525061217760201b60201c565b156127d457505060408051808201909152600781526604f534c2d332e360cc1b6020820152919050565b6128086122e46040518060400160405280600a81526020016904170616368652d322e360b41b81525061217760201b60201c565b1561283557505060408051808201909152600a81526904170616368652d322e360b41b6020820152919050565b61286c6122e46040518060400160405280600d81526020016c4147504c2d332e302d6f6e6c7960981b81525061217760201b60201c565b806128ad57506128ad6122e46040518060400160405280601181526020017020a3a8261699971816b7b916b630ba32b960791b81525061217760201b60201c565b156128da57505060408051808201909152600a815269474e55204147504c763360b01b6020820152919050565b61290c6122e4604051806040016040528060088152602001674255534c2d312e3160c01b81525061217760201b60201c565b1561293657505060408051808201909152600781526642534c20312e3160c81b6020820152919050565b604080840151845191516104b49290602001614584565b60608060005b84518110156129d8578185828151811061296f5761296f613edb565b6020026020010151604051602001612988929190613b2f565b6040516020818303038152906040529150600185516129a791906144a4565b81146129d057816040516020016129be91906146d4565b60405160208183030381529060405291505b600101612953565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816129f15790505090508381600081518110612a1c57612a1c613edb565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110612a5557612a55613edb565b60200260200101819052508181600281518110612a7457612a74613edb565b6020908102919091010152949350505050565b6020808301518351835192840151600093612aa592918491906133e7565b14159392505050565b6040805180820190915260008082526020808301829052845185820151855192860151612adb93906134f8565b9050836020015181612aed91906144a4565b84518590612afc9083906144a4565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015612b305750816102c1565b6020808301519084015160019114612b575750815160208481015190840151829020919020145b8015612b8857825184518590612b6e9083906144a4565b9052508251602085018051612b84908390614571565b9052505b509192915050565b6040805180820190915260008082526020820152612baf838383613618565b5092915050565b6060600082600001516001600160401b03811115612bd657612bd6613a2f565b6040519080825280601f01601f191660200182016040528015612c00576020820181803683370190505b50602084810151855192935090830191612baf9183916136be565b60606000612c2761068d565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081612c445790505090506000604051806040016040528060038152602001620dce0f60eb1b815250828280612c8590613fea565b935060ff1681518110612c9a57612c9a613edb565b6020026020010181905250604051806040016040528060078152602001665e312e33322e3360c81b815250604051602001612cd591906146f9565b604051602081830303815290604052828280612cf090613fea565b935060ff1681518110612d0557612d05613edb565b60200260200101819052506040518060400160405280600881526020016776616c696461746560c01b815250828280612d3d90613fea565b935060ff1681518110612d5257612d52613edb565b602002602001018190525082604051602001612d6e9190613f26565b604051602081830303815290604052828280612d8990613fea565b935060ff1681518110612d9e57612d9e613edb565b60200260200101819052506040518060400160405280600a8152602001690b4b58dbdb9d1c9858dd60b21b815250828280612dd890613fea565b935060ff1681518110612ded57612ded613edb565b6020908102919091010152612e028784613738565b8282612e0d81613fea565b935060ff1681518110612e2257612e22613edb565b602090810291909101015285515115612eba5760408051808201909152600b81526a2d2d7265666572656e636560a81b60208201528282612e6281613fea565b935060ff1681518110612e7757612e77613edb565b60209081029190910101528551612e8e9084613738565b8282612e9981613fea565b935060ff1681518110612eae57612eae613edb565b60200260200101819052505b856080015115612f285760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282612f0381613fea565b935060ff1681518110612f1857612f18613edb565b6020026020010181905250612f83565b8415612f83576040805180820190915260128152712d2d726571756972655265666572656e636560701b60208201528282612f6281613fea565b935060ff1681518110612f7757612f77613edb565b60200260200101819052505b6040860151511561300f5760408051808201909152600d81526c2d2d756e73616665416c6c6f7760981b60208201528282612fbd81613fea565b935060ff1681518110612fd257612fd2613edb565b60200260200101819052508560400151828280612fee90613fea565b935060ff168151811061300357613003613edb565b60200260200101819052505b8560600151156130795760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261305881613fea565b935060ff168151811061306d5761306d613edb565b60200260200101819052505b60008160ff166001600160401b0381111561309657613096613a2f565b6040519080825280602002602001820160405280156130c957816020015b60608152602001906001900390816130b45790505b50905060005b8260ff168160ff16101561312257838160ff16815181106130f2576130f2613edb565b6020026020010151828260ff168151811061310f5761310f613edb565b60209081029190910101526001016130cf565b50979650505050505050565b60408051808201909152600080825260208201528151835110156131535750816102c1565b8151835160208501516000929161316991614571565b61317391906144a4565b60208401519091506001908214613194575082516020840151819020908220145b80156131af578351855186906131ab9083906144a4565b9052505b50929392505050565b8051825160208085015190840151600093849390926131d89284906134f8565b6131e29190614571565b90505b835160208501516131f69190614571565b8111612baf57816132068161473e565b925050826000015161323c85602001518361322191906144a4565b865161322d91906144a4565b855160208701518591906134f8565b6132469190614571565b90506131e5565b6060600061325b84846131b8565b613266906001614571565b6001600160401b0381111561327d5761327d613a2f565b6040519080825280602002602001820160405280156132b057816020015b606081526020019060019003908161329b5790505b50905060005b8151811015611caa576132cc611e488686612b90565b8282815181106132de576132de613edb565b60209081029190910101526001016132b6565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061333a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613366576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061338457662386f26fc10000830492506010015b6305f5e100831061339c576305f5e100830492506008015b61271083106133b057612710830492506004015b606483106133c2576064830492506002015b600a83106102c15760010192915050565b60006133df8383613778565b159392505050565b6000808584116134ee576020841161349a576000841561343257600161340e8660206144a4565b613419906008614757565b613424906002614855565b61342e91906144a4565b1990505b83518116856134418989614571565b61344b91906144a4565b805190935082165b8181146134855787841161346d5787945050505050611973565b8361347781614861565b945050828451169050613453565b61348f8785614571565b945050505050611973565b8383206134a785886144a4565b6134b19087614571565b91505b8582106134ec578482208082036134d9576134cf8684614571565b9350505050611973565b6134e46001846144a4565b9250506134b4565b505b5092949350505050565b6000838186851161360357602085116135b257600085156135445760016135208760206144a4565b61352b906008614757565b613536906002614855565b61354091906144a4565b1990505b845181166000876135558b8b614571565b61355f91906144a4565b855190915083165b8281146135a45781861061358c5761357f8b8b614571565b9650505050505050611973565b856135968161473e565b965050838651169050613567565b859650505050505050611973565b508383206000905b6135c486896144a4565b8211613601578583208082036135e05783945050505050611973565b6135eb600185614571565b93505081806135f99061473e565b9250506135ba565b505b61360d8787614571565b979650505050505050565b604080518082019091526000808252602080830182905285518682015186519287015161364593906134f8565b60208087018051918601919091525190915061366190826144a4565b8352845160208601516136749190614571565b810361368357600085526136b5565b835183516136919190614571565b855186906136a09083906144a4565b90525083516136af9082614571565b60208601525b50909392505050565b602081106136f657815183526136d5602084614571565b92506136e2602083614571565b91506136ef6020826144a4565b90506136be565b600019811561372557600161370c8360206144a4565b61371890610100614855565b61372291906144a4565b90505b9151835183169219169190911790915250565b606060006137468484610727565b805160208083015160405193945061376093909101614878565b60405160208183030381529060405291505092915050565b815181516000919081111561378b575081515b6020808501519084015160005b8381101561384457825182518082146138145760001960208710156137f3576001846137c58960206144a4565b6137cf9190614571565b6137da906008614757565b6137e5906002614855565b6137ef91906144a4565b1990505b81811683821681810391146138115797506102c19650505050505050565b50505b61381f602086614571565b945061382c602085614571565b9350505060208161383d9190614571565b9050613798565b5084518651610cf591906148b4565b610c9f806165f283390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016138a36138a8565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016138a36040518060800160405280600081526020016000815260200160008152602001600081525090565b60005b8381101561393457818101518382015260200161391c565b50506000910152565b60008151808452613955816020860160208601613919565b601f01601f19169290920160200192915050565b6001600160a01b03831681526040602082018190526000906119739083018461393d565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516139c581601a850160208801613919565b6101d160f51b601a9184019182015283516139e781601c840160208801613919565b01601c01949350505050565b6020815260006103cf602083018461393d565b600060208284031215613a1857600080fd5b81516001600160a01b03811681146103cf57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613a6757613a67613a2f565b60405290565b6000806001600160401b03841115613a8757613a87613a2f565b50604051601f19601f85018116603f011681018181106001600160401b0382111715613ab557613ab5613a2f565b604052838152905080828401851015613acd57600080fd5b611caa846020830185613919565b600082601f830112613aec57600080fd5b6103cf83835160208501613a6d565b600060208284031215613b0d57600080fd5b81516001600160401b03811115613b2357600080fd5b6102bd84828501613adb565b60008351613b41818460208801613919565b835190830190613b55818360208801613919565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351613b9681601a850160208801613919565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a918401918201528351613bd3816033840160208801613919565b601160f91b60339290910191820152603401949350505050565b60408152600b60408201526a1193d55391149657d3d55560aa1b60608201526080602082015260006103cf608083018461393d565b600060208284031215613c3457600080fd5b81516001600160401b03811115613c4a57600080fd5b8201601f81018413613c5b57600080fd5b6102bd84825160208401613a6d565b60008551613c7c818460208a01613919565b602f60f81b9083019081528551613c9a816001840160208a01613919565b602f60f81b600192909101918201528451613cbc816002840160208901613919565b600181830101915050602f60f81b60018201528351613ce2816002840160208801613919565b64173539b7b760d91b600292909101918201526007019695505050505050565b604081526000613d15604083018461393d565b828103602084015260048152630b985cdd60e21b60208201526040810191505092915050565b600060208284031215613d4d57600080fd5b815180151581146103cf57600080fd5b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251613d9581601f850160208701613919565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f939091019283015250611b5b60f21b603f820152604101919050565b604081526000613de7604083018461393d565b8281036020840152601181527005cc2e6e85cc2c4e6ded8eae8caa0c2e8d607b1b60208201526040810191505092915050565b604081526000613e2d604083018461393d565b8281036020840152600c81526b2e6173742e6c6963656e736560a01b60208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251613e93816014850160208701613919565b6b13ae9735b2b1b1b0b5991a9b60a11b6014939091019283015250602001919050565b604081526000613ec9604083018561393d565b82810360208401526103cb818561393d565b634e487b7160e01b600052603260045260246000fd5b601160f91b81528151600090613f0e816001850160208701613919565b601160f91b6001939091019283015250600201919050565b60008251613f38818460208701613919565b6a2f6275696c642d696e666f60a81b920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201526a0391031b7b73a3930b1ba160ad1b604082015260008251613fc781604b850160208701613919565b91909101604b0192915050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff810361400057614000613fd4565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81526801a595b9d0b58db1a560be1b602082015260008251614053816029850160208701613919565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006103cf608083018461393d565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561410057603f198786030184526140eb85835161393d565b945060209384019391909101906001016140cf565b50929695505050505050565b60006020828403121561411e57600080fd5b81516001600160401b0381111561413457600080fd5b82016060818503121561414657600080fd5b61414e613a45565b81518060030b811461415f57600080fd5b815260208201516001600160401b0381111561417a57600080fd5b61418686828501613adb565b60208301525060408201516001600160401b038111156141a557600080fd5b6141b186828501613adb565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e642077697468208152601160f91b602082015260008251614201816021850160208701613919565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e65207769746820707265666978208152602760f81b6020820152600083516143d1816021850160208801613919565b6c0139034b71037baba383aba1d1609d1b60219184019182015283516143fe81602e840160208801613919565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c815268034b230ba34b7b71d160bd1b602082015260008251614053816029850160208701613919565b7f55706772616465207361666574792076616c69646174696f6e206661696c65648152611d0560f11b602082015260008251614497816022850160208701613919565b9190910160220192915050565b818103818111156102c1576102c1613fd4565b6d021b7b73a3930b1ba103730b6b2960951b8152600082516144e081600e850160208701613919565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201526730b1ba173539b7b760c11b606e820152607601919050565b808201808211156102c1576102c1613fd4565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516145bc816018850160208801613919565b6301034b7160e51b60189184019182015283516145e081601c840160208801613919565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b600082516146e6818460208701613919565b600160fd1b920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161473181601c850160208701613919565b91909101601c0192915050565b60006001820161475057614750613fd4565b5060010190565b80820281158282048414176102c1576102c1613fd4565b6001815b60018411156147a95780850481111561478d5761478d613fd4565b600184161561479b57908102905b60019390931c928002614772565b935093915050565b6000826147c0575060016102c1565b816147cd575060006102c1565b81600181146147e357600281146147ed57614809565b60019150506102c1565b60ff8411156147fe576147fe613fd4565b50506001821b6102c1565b5060208310610133831016604e8410600b841016171561482c575081810a6102c1565b614839600019848461476e565b806000190482111561484d5761484d613fd4565b029392505050565b60006103cf83836147b1565b60008161487057614870613fd4565b506000190190565b6000835161488a818460208801613919565b601d60f91b90830190815283516148a8816001840160208801613919565b01600101949350505050565b8181036000831280158383131683831282161715612baf57612baf613fd4565b608051611ce0614912600039600081816101eb015281816105b00152818161060501528181610822015281816108770152610ac30152611ce06000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80636133b4bb116100f9578063a217fddf11610097578063d9caed1211610071578063d9caed121461041c578063e609055e1461042f578063e63ab1e914610442578063eab103df1461046957600080fd5b8063a217fddf146103de578063d547741f146103e6578063d936547e146103f957600080fd5b806385f438c1116100d357806385f438c11461035857806391d148541461037f5780639a590427146103b85780639b19251a146103cb57600080fd5b80636133b4bb1461032a57806381100bf01461033d5780638456cb591461035057600080fd5b806336568abe11610166578063570618e111610140578063570618e1146102d25780635b112591146102f95780635c975abb1461030c5780635eb72e151461031757600080fd5b806336568abe146102a45780633c2f05a8146102b75780633f4ba83a146102ca57600080fd5b8063248a9ca311610197578063248a9ca31461023a578063252f07bf1461026c5780632f2ff15d1461029157600080fd5b806301ffc9a7146101be578063116191b6146101e657806321fc65f214610225575b600080fd5b6101d16101cc366004611614565b61047c565b60405190151581526020015b60405180910390f35b61020d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101dd565b6102386102333660046116b4565b610515565b005b61025e610248366004611727565b6000908152600160208190526040909120015490565b6040519081526020016101dd565b6004546101d19074010000000000000000000000000000000000000000900460ff1681565b61023861029f366004611740565b6106d5565b6102386102b2366004611740565b610701565b60055461020d906001600160a01b031681565b610238610752565b61025e7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b60045461020d906001600160a01b031681565b60025460ff166101d1565b610238610325366004611770565b610787565b610238610338366004611813565b61094c565b60065461020d906001600160a01b031681565b610238610b44565b61025e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101d161038d366004611740565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6102386103c636600461186f565b610b76565b6102386103d936600461186f565b610c2a565b61025e600081565b6102386103f4366004611740565b610ce1565b6101d161040736600461186f565b60036020526000908152604090205460ff1681565b61023861042a36600461188c565b610d07565b61023861043d3660046118cd565b610dff565b61025e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023861047736600461196c565b61102b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061050f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61051d611081565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610547816110c4565b61054f6110ce565b6001600160a01b03851660009081526003602052604090205460ff166105a1576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105d56001600160a01b0386167f00000000000000000000000000000000000000000000000000000000000000008661110d565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106429088908a908990899089906004016119d2565b600060405180830381600087803b15801561065c57600080fd5b505af1158015610670573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d58686866040516106bb93929190611a15565b60405180910390a3506106ce6001600055565b5050505050565b600082815260016020819052604090912001546106f1816110c4565b6106fb8383611181565b50505050565b6001600160a01b0381163314610743576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61074d8282611214565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077c816110c4565b61078461129b565b50565b61078f611081565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107b9816110c4565b6107c16110ce565b6001600160a01b03861660009081526003602052604090205460ff16610813576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108476001600160a01b0387167f00000000000000000000000000000000000000000000000000000000000000008761110d565b6040517f36c99f3b0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b906108b69089908b908a908a908a908a90600401611b05565b600060405180830381600087803b1580156108d057600080fd5b505af11580156108e4573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37878787876040516109319493929190611b5c565b60405180910390a3506109446001600055565b505050505050565b600580546001600160a01b0316906340c10f1990309061096d908790611bb7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156109cb57600080fd5b505af11580156109df573d6000803e3d6000fd5b5050600580546008546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481019390935216925063a9059cbb91506044016020604051808303816000875af1158015610a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a769190611bca565b50600554610a90906001600160a01b031685858585610515565b6005546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152909116906370a0823190602401602060405180830381865afa158015610b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b379190611be7565b156106fb576106fb611c00565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b6e816110c4565b6107846112ed565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610ba0816110c4565b6001600160a01b038216610be0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610c54816110c4565b6001600160a01b038216610c94576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610cfd816110c4565b6106fb8383611214565b610d0f611081565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d39816110c4565b610d416110ce565b6001600160a01b03831660009081526003602052604090205460ff16610d93576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610da76001600160a01b038416858461110d565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610dec91815260200190565b60405180910390a35061074d6001600055565b610e07611081565b610e0f6110ce565b60045474010000000000000000000000000000000000000000900460ff16610e63576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610eb5576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f399190611be7565b9050610f506001600160a01b03861633308761132a565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610fd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffb9190611be7565b6110059190611c2f565b8787604051611018959493929190611c42565b60405180910390a2506109446001600055565b6000611036816110c4565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6002600054036110bd576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107848133611363565b60025460ff161561110b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261074d91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506113da565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1661120c5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a450600161050f565b50600061050f565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff161561120c5760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161050f565b6112a3611456565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6112f56110ce565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112d03390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106fb9186918216906323b872dd9060840161113a565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff166113d6576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b60006113ef6001600160a01b03841683611492565b905080516000141580156114145750808060200190518101906114129190611bca565b155b1561074d576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016113cd565b60025460ff1661110b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606114a0838360006114a7565b9392505050565b6060814710156114e5576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016113cd565b600080856001600160a01b031684866040516115019190611c7b565b60006040518083038185875af1925050503d806000811461153e576040519150601f19603f3d011682016040523d82523d6000602084013e611543565b606091505b509150915061155386838361155d565b9695505050505050565b6060826115725761156d826115d2565b6114a0565b815115801561158957506001600160a01b0384163b155b156115cb576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016113cd565b50806114a0565b8051156115e25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561162657600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114a057600080fd5b6001600160a01b038116811461078457600080fd5b60008083601f84011261167d57600080fd5b50813567ffffffffffffffff81111561169557600080fd5b6020830191508360208285010111156116ad57600080fd5b9250929050565b6000806000806000608086880312156116cc57600080fd5b85356116d781611656565b945060208601356116e781611656565b935060408601359250606086013567ffffffffffffffff81111561170a57600080fd5b6117168882890161166b565b969995985093965092949392505050565b60006020828403121561173957600080fd5b5035919050565b6000806040838503121561175357600080fd5b82359150602083013561176581611656565b809150509250929050565b60008060008060008060a0878903121561178957600080fd5b863561179481611656565b955060208701356117a481611656565b945060408701359350606087013567ffffffffffffffff8111156117c757600080fd5b6117d389828a0161166b565b909450925050608087013567ffffffffffffffff8111156117f357600080fd5b87016080818a03121561180557600080fd5b809150509295509295509295565b6000806000806060858703121561182957600080fd5b843561183481611656565b935060208501359250604085013567ffffffffffffffff81111561185757600080fd5b6118638782880161166b565b95989497509550505050565b60006020828403121561188157600080fd5b81356114a081611656565b6000806000606084860312156118a157600080fd5b83356118ac81611656565b925060208401356118bc81611656565b929592945050506040919091013590565b600080600080600080608087890312156118e657600080fd5b863567ffffffffffffffff8111156118fd57600080fd5b61190989828a0161166b565b909750955050602087013561191d81611656565b935060408701359250606087013567ffffffffffffffff81111561194057600080fd5b61194c89828a0161166b565b979a9699509497509295939492505050565b801515811461078457600080fd5b60006020828403121561197e57600080fd5b81356114a08161195e565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b0385166020820152836040820152608060608201526000611a0a608083018486611989565b979650505050505050565b838152604060208201526000611a2f604083018486611989565b95945050505050565b60008135611a4581611656565b6001600160a01b031683526020820135611a5e81611656565b6001600160a01b03166020840152604082013567ffffffffffffffff8116808214611a8857600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112611ac457600080fd5b820160208101903567ffffffffffffffff811115611ae157600080fd5b803603821315611af057600080fd5b60806060860152611a2f608086018284611989565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a060608201526000611b3d60a083018587611989565b8281036080840152611b4f8185611a38565b9998505050505050505050565b848152606060208201526000611b76606083018587611989565b8281036040840152611a0a8185611a38565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561050f5761050f611b88565b600060208284031215611bdc57600080fd5b81516114a08161195e565b600060208284031215611bf957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8181038181111561050f5761050f611b88565b606081526000611c56606083018789611989565b8560208401528281036040840152611c6f818587611989565b98975050505050505050565b6000825160005b81811015611c9c5760208186018101518583015201611c82565b50600092019182525091905056fea26469706673582212209d34a8c5f65cc74a132ad5946b9b8ffcf7decebf24e60566b9b465631f332f9b64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f7420"; type ERC20CustodyEchidnaTestConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/ERC20Custody__factory.ts b/v2/types/factories/ERC20Custody__factory.ts index f5f9d4e5..6c422c07 100644 --- a/v2/types/factories/ERC20Custody__factory.ts +++ b/v2/types/factories/ERC20Custody__factory.ts @@ -438,6 +438,11 @@ const _abi = [ type: "tuple", internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -707,6 +712,11 @@ const _abi = [ indexed: false, internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -819,7 +829,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405234801561001057600080fd5b50604051611eb9380380611eb983398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611e998339815191528261014c565b50610143600080516020611e998339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b608051611c22610277600039600081816101ca01528181610597015281816105f901528181610a280152610a8a0152611c226000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806385f438c1116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103fc578063e63ab1e91461040f578063eab103df1461043657600080fd5b8063d547741f146103b3578063d936547e146103c6578063d9caed12146103e957600080fd5b80639b19251a116100bd5780639b19251a14610385578063a217fddf14610398578063c709ab6e146103a057600080fd5b806385f438c11461030557806391d148541461032c5780639a5904271461037257600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102d25780635c975abb146102f25780638456cb59146102fd57600080fd5b806336568abe146102905780633f4ba83a146102a3578063570618e1146102ab57600080fd5b8063248a9ca311610176578063248a9ca314610226578063252f07bf146102585780632f2ff15d1461027d57600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610211575b600080fd5b6101b06101ab3660046115ca565b610449565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b61022461021f366004611677565b6104e2565b005b61024a6102343660046116ea565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61022461028b366004611703565b6106e3565b61022461029e366004611703565b61070f565b61022461076d565b61024a7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff166101b0565b6102246107a2565b61024a7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b061033a366004611703565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610224610380366004611733565b6107d4565b610224610393366004611733565b6108a2565b61024a600081565b6102246103ae366004611750565b610973565b6102246103c1366004611703565b610b79565b6101b06103d4366004611733565b60036020526000908152604090205460ff1681565b6102246103f73660046117f3565b610b9f565b61022461040a366004611834565b610ccb565b61024a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102246104443660046118d3565b610f2b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104dc57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104ea610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461051481610fc4565b61051c610fce565b73ffffffffffffffffffffffffffffffffffffffff851660009081526003602052604090205460ff1661057b576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bc73ffffffffffffffffffffffffffffffffffffffff86167f00000000000000000000000000000000000000000000000000000000000000008661100d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106369088908a90899089908990600401611939565b600060405180830381600087803b15801561065057600080fd5b505af1158015610664573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d58686866040516106c993929190611996565b60405180910390a3506106dc6001600055565b5050505050565b600082815260016020819052604090912001546106ff81610fc4565b610709838361108e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461075e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610768828261113b565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61079781610fc4565b61079f6111dc565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107cc81610fc4565b61079f61123b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107fe81610fc4565b73ffffffffffffffffffffffffffffffffffffffff821661084b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6108cc81610fc4565b73ffffffffffffffffffffffffffffffffffffffff8216610919576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61097b610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109a581610fc4565b6109ad610fce565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610a0c576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a4d73ffffffffffffffffffffffffffffffffffffffff87167f00000000000000000000000000000000000000000000000000000000000000008761100d565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610ac99089908b908a908a908a908a90600401611a77565b600060405180830381600087803b158015610ae357600080fd5b505af1158015610af7573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b87878787604051610b5e9493929190611ae8565b60405180910390a350610b716001600055565b505050505050565b60008281526001602081905260409091200154610b9581610fc4565b610709838361113b565b610ba7610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610bd181610fc4565b610bd9610fce565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205460ff16610c38576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5973ffffffffffffffffffffffffffffffffffffffff8416858461100d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610cb891815260200190565b60405180910390a3506107686001600055565b610cd3610f81565b610cdb610fce565b60045474010000000000000000000000000000000000000000900460ff16610d2f576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610d8e576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8616906370a0823190602401602060405180830381865afa158015610dfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1f9190611b14565b9050610e4373ffffffffffffffffffffffffffffffffffffffff8616333087611278565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efb9190611b14565b610f059190611b2d565b8787604051610f18959493929190611b67565b60405180910390a250610b716001600055565b6000610f3681610fc4565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610fbd576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61079f81336112be565b60025460ff161561100b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261076891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061134f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661113357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104dc565b5060006104dc565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561113357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104dc565b6111e46113e5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611243610fce565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112113390565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526107099186918216906323b872dd90608401611047565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661134b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b600061137173ffffffffffffffffffffffffffffffffffffffff841683611421565b905080516000141580156113965750808060200190518101906113949190611ba0565b155b15610768576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401611342565b60025460ff1661100b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061142f83836000611436565b9392505050565b606081471015611474576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611342565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161149d9190611bbd565b60006040518083038185875af1925050503d80600081146114da576040519150601f19603f3d011682016040523d82523d6000602084013e6114df565b606091505b50915091506114ef8683836114f9565b9695505050505050565b60608261150e5761150982611588565b61142f565b8151158015611532575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611581576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401611342565b508061142f565b8051156115985780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156115dc57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461142f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461079f57600080fd5b60008083601f84011261164057600080fd5b50813567ffffffffffffffff81111561165857600080fd5b60208301915083602082850101111561167057600080fd5b9250929050565b60008060008060006080868803121561168f57600080fd5b853561169a8161160c565b945060208601356116aa8161160c565b935060408601359250606086013567ffffffffffffffff8111156116cd57600080fd5b6116d98882890161162e565b969995985093965092949392505050565b6000602082840312156116fc57600080fd5b5035919050565b6000806040838503121561171657600080fd5b8235915060208301356117288161160c565b809150509250929050565b60006020828403121561174557600080fd5b813561142f8161160c565b60008060008060008060a0878903121561176957600080fd5b86356117748161160c565b955060208701356117848161160c565b945060408701359350606087013567ffffffffffffffff8111156117a757600080fd5b6117b389828a0161162e565b909450925050608087013567ffffffffffffffff8111156117d357600080fd5b87016060818a0312156117e557600080fd5b809150509295509295509295565b60008060006060848603121561180857600080fd5b83356118138161160c565b925060208401356118238161160c565b929592945050506040919091013590565b6000806000806000806080878903121561184d57600080fd5b863567ffffffffffffffff81111561186457600080fd5b61187089828a0161162e565b90975095505060208701356118848161160c565b935060408701359250606087013567ffffffffffffffff8111156118a757600080fd5b6118b389828a0161162e565b979a9699509497509295939492505050565b801515811461079f57600080fd5b6000602082840312156118e557600080fd5b813561142f816118c5565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061198b6080830184866118f0565b979650505050505050565b8381526040602082015260006119b06040830184866118f0565b95945050505050565b600081356119c68161160c565b73ffffffffffffffffffffffffffffffffffffffff168352602082013567ffffffffffffffff81168082146119fa57600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112611a3657600080fd5b820160208101903567ffffffffffffffff811115611a5357600080fd5b803603821315611a6257600080fd5b606060408601526119b06060860182846118f0565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a060608201526000611ac960a0830185876118f0565b8281036080840152611adb81856119b9565b9998505050505050505050565b848152606060208201526000611b026060830185876118f0565b828103604084015261198b81856119b9565b600060208284031215611b2657600080fd5b5051919050565b818103818111156104dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606081526000611b7b6060830187896118f0565b8560208401528281036040840152611b948185876118f0565b98975050505050505050565b600060208284031215611bb257600080fd5b815161142f816118c5565b6000825160005b81811015611bde5760208186018101518583015201611bc4565b50600092019182525091905056fea264697066735822122029d8a02c5c60bae7d404d08786de2b2dd6b37e11d10fa76c968c7809ff06f3b864736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a"; + "0x60a060405234801561001057600080fd5b50604051611c7f380380611c7f83398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611c5f8339815191528261014c565b50610143600080516020611c5f8339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b6080516119e8610277600039600081816101ca01528181610556015281816105ab015281816107c8015261081d01526119e86000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638456cb59116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103d5578063e63ab1e9146103e8578063eab103df1461040f57600080fd5b8063d547741f1461038c578063d936547e1461039f578063d9caed12146103c257600080fd5b80639a590427116100bd5780639a5904271461035e5780639b19251a14610371578063a217fddf1461038457600080fd5b80638456cb59146102f657806385f438c1146102fe57806391d148541461032557600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102c55780635c975abb146102d85780635eb72e15146102e357600080fd5b806336568abe146102835780633f4ba83a14610296578063570618e11461029e57600080fd5b8063248a9ca311610176578063248a9ca314610219578063252f07bf1461024b5780632f2ff15d1461027057600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610204575b600080fd5b6101b06101ab3660046113c2565b610422565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bc565b610217610212366004611462565b6104bb565b005b61023d6102273660046114d5565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61021761027e3660046114ee565b61067b565b6102176102913660046114ee565b6106a7565b6102176106f8565b61023d7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec906001600160a01b031681565b60025460ff166101b0565b6102176102f136600461151e565b61072d565b6102176108f2565b61023d7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b06103333660046114ee565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61021761036c3660046115c1565b610924565b61021761037f3660046115c1565b6109d8565b61023d600081565b61021761039a3660046114ee565b610a8f565b6101b06103ad3660046115c1565b60036020526000908152604090205460ff1681565b6102176103d03660046115de565b610ab5565b6102176103e336600461161f565b610bad565b61023d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61021761041d3660046116be565b610dd9565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104b557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104c3610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104ed81610e72565b6104f5610e7c565b6001600160a01b03851660009081526003602052604090205460ff16610547576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61057b6001600160a01b0386167f000000000000000000000000000000000000000000000000000000000000000086610ebb565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906105e89088908a90899089908990600401611724565b600060405180830381600087803b15801561060257600080fd5b505af1158015610616573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161066193929190611767565b60405180910390a3506106746001600055565b5050505050565b6000828152600160208190526040909120015461069781610e72565b6106a18383610f2f565b50505050565b6001600160a01b03811633146106e9576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106f38282610fc2565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61072281610e72565b61072a611049565b50565b610735610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461075f81610e72565b610767610e7c565b6001600160a01b03861660009081526003602052604090205460ff166107b9576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107ed6001600160a01b0387167f000000000000000000000000000000000000000000000000000000000000000087610ebb565b6040517f36c99f3b0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b9061085c9089908b908a908a908a908a90600401611857565b600060405180830381600087803b15801561087657600080fd5b505af115801561088a573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37878787876040516108d794939291906118ae565b60405180910390a3506108ea6001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61091c81610e72565b61072a61109b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61094e81610e72565b6001600160a01b03821661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a0281610e72565b6001600160a01b038216610a42576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610aab81610e72565b6106a18383610fc2565b610abd610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ae781610e72565b610aef610e7c565b6001600160a01b03831660009081526003602052604090205460ff16610b41576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b556001600160a01b0384168584610ebb565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610b9a91815260200190565b60405180910390a3506106f36001600055565b610bb5610e2f565b610bbd610e7c565b60045474010000000000000000000000000000000000000000900460ff16610c11576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610c63576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce791906118da565b9050610cfe6001600160a01b0386163330876110d8565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610d85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da991906118da565b610db391906118f3565b8787604051610dc695949392919061192d565b60405180910390a2506108ea6001600055565b6000610de481610e72565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610e6b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61072a8133611111565b60025460ff1615610eb9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b038381166024830152604482018390526106f391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611188565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16610fba5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104b5565b5060006104b5565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1615610fba5760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104b5565b611051611204565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6110a3610e7c565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861107e3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106a19186918216906323b872dd90608401610ee8565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611184576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b600061119d6001600160a01b03841683611240565b905080516000141580156111c25750808060200190518101906111c09190611966565b155b156106f3576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161117b565b60025460ff16610eb9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061124e83836000611255565b9392505050565b606081471015611293576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161117b565b600080856001600160a01b031684866040516112af9190611983565b60006040518083038185875af1925050503d80600081146112ec576040519150601f19603f3d011682016040523d82523d6000602084013e6112f1565b606091505b509150915061130186838361130b565b9695505050505050565b6060826113205761131b82611380565b61124e565b815115801561133757506001600160a01b0384163b155b15611379576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161117b565b508061124e565b8051156113905780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156113d457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461124e57600080fd5b6001600160a01b038116811461072a57600080fd5b60008083601f84011261142b57600080fd5b50813567ffffffffffffffff81111561144357600080fd5b60208301915083602082850101111561145b57600080fd5b9250929050565b60008060008060006080868803121561147a57600080fd5b853561148581611404565b9450602086013561149581611404565b935060408601359250606086013567ffffffffffffffff8111156114b857600080fd5b6114c488828901611419565b969995985093965092949392505050565b6000602082840312156114e757600080fd5b5035919050565b6000806040838503121561150157600080fd5b82359150602083013561151381611404565b809150509250929050565b60008060008060008060a0878903121561153757600080fd5b863561154281611404565b9550602087013561155281611404565b945060408701359350606087013567ffffffffffffffff81111561157557600080fd5b61158189828a01611419565b909450925050608087013567ffffffffffffffff8111156115a157600080fd5b87016080818a0312156115b357600080fd5b809150509295509295509295565b6000602082840312156115d357600080fd5b813561124e81611404565b6000806000606084860312156115f357600080fd5b83356115fe81611404565b9250602084013561160e81611404565b929592945050506040919091013590565b6000806000806000806080878903121561163857600080fd5b863567ffffffffffffffff81111561164f57600080fd5b61165b89828a01611419565b909750955050602087013561166f81611404565b935060408701359250606087013567ffffffffffffffff81111561169257600080fd5b61169e89828a01611419565b979a9699509497509295939492505050565b801515811461072a57600080fd5b6000602082840312156116d057600080fd5b813561124e816116b0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061175c6080830184866116db565b979650505050505050565b8381526040602082015260006117816040830184866116db565b95945050505050565b6000813561179781611404565b6001600160a01b0316835260208201356117b081611404565b6001600160a01b03166020840152604082013567ffffffffffffffff81168082146117da57600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261181657600080fd5b820160208101903567ffffffffffffffff81111561183357600080fd5b80360382131561184257600080fd5b608060608601526117816080860182846116db565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061188f60a0830185876116db565b82810360808401526118a1818561178a565b9998505050505050505050565b8481526060602082015260006118c86060830185876116db565b828103604084015261175c818561178a565b6000602082840312156118ec57600080fd5b5051919050565b818103818111156104b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006119416060830187896116db565b856020840152828103604084015261195a8185876116db565b98975050505050505050565b60006020828403121561197857600080fd5b815161124e816116b0565b6000825160005b818110156119a4576020818601810151858301520161198a565b50600092019182525091905056fea2646970667358221220dc0b6596b7b61441087636724be59e8874b026b619128cbecb229a5609d1f02d64736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a"; type ERC20CustodyConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/GatewayEVMEchidnaTest__factory.ts b/v2/types/factories/GatewayEVMEchidnaTest__factory.ts index c5857244..bdad6f06 100644 --- a/v2/types/factories/GatewayEVMEchidnaTest__factory.ts +++ b/v2/types/factories/GatewayEVMEchidnaTest__factory.ts @@ -450,6 +450,11 @@ const _abi = [ type: "tuple", internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -663,6 +668,11 @@ const _abi = [ type: "tuple", internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -1091,6 +1101,11 @@ const _abi = [ indexed: false, internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -1331,6 +1346,11 @@ const _abi = [ name: "NotAllowedToCallOnCall", inputs: [], }, + { + type: "error", + name: "NotAllowedToCallOnRevert", + inputs: [], + }, { type: "error", name: "NotInitializing", @@ -1381,7 +1401,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f80613cd683390190565b611eb98061497583390190565b608051613a8d6102496000396000818161239f015281816123c801526128360152613a8d6000f3fe60806040526004361061024f5760003560e01c80635d62c86011610138578063ad3cb1cc116100b0578063d0b492c31161007f578063dda79b7511610064578063dda79b751461072d578063e63ab1e91461074d578063f7ad60db1461078157600080fd5b8063d0b492c3146106ed578063d547741f1461070d57600080fd5b8063ad3cb1cc14610644578063ae7a3a6f1461068d578063c0c53b8b146106ad578063d09e3b78146106cd57600080fd5b806381100bf01161010757806391d14854116100ec57806391d1485414610596578063a217fddf146105fb578063a783c7891461061057600080fd5b806381100bf0146105615780638456cb591461058157600080fd5b80635d62c860146104e75780636ab90f9b1461051b578063726ac97c1461053b578063744b9b8b1461054e57600080fd5b806338e22527116101cb5780635131ab591161019a57806357bec62f1161017f57806357bec62f146104705780635b112591146104905780635c975abb146104b057600080fd5b80635131ab591461043b57806352d1902d1461045b57600080fd5b806338e22527146103e05780633c2f05a8146103f35780633f4ba83a146104135780634f1ef2861461042857600080fd5b80631cff79cd11610222578063248a9ca311610207578063248a9ca3146103435780632f2ff15d146103a057806336568abe146103c057600080fd5b80631cff79cd146102eb57806321e093b11461030b57600080fd5b806301ffc9a71461025457806310188aef14610289578063102614b0146102ab5780631becceb4146102cb575b600080fd5b34801561026057600080fd5b5061027461026f366004612fa2565b610794565b60405190151581526020015b60405180910390f35b34801561029557600080fd5b506102a96102a4366004613000565b61082d565b005b3480156102b757600080fd5b506102a96102c6366004613033565b610908565b3480156102d757600080fd5b506102a96102e63660046130e4565b610a02565b6102fe6102f936600461314b565b610a80565b60405161028091906131ee565b34801561031757600080fd5b5060035461032b906001600160a01b031681565b6040516001600160a01b039091168152602001610280565b34801561034f57600080fd5b5061039261035e366004613201565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610280565b3480156103ac57600080fd5b506102a96103bb36600461321a565b610b38565b3480156103cc57600080fd5b506102a96103db36600461321a565b610b7c565b6102fe6103ee366004613246565b610bcd565b3480156103ff57600080fd5b5060045461032b906001600160a01b031681565b34801561041f57600080fd5b506102a9610cb9565b6102a9610436366004613337565b610cee565b34801561044757600080fd5b506102a96104563660046133c8565b610d0d565b34801561046757600080fd5b5061039261100d565b34801561047c57600080fd5b5060025461032b906001600160a01b031681565b34801561049c57600080fd5b5060015461032b906001600160a01b031681565b3480156104bc57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610274565b3480156104f357600080fd5b506103927f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561052757600080fd5b506102a9610536366004613437565b61103c565b6102a9610549366004613479565b611167565b6102a961055c3660046130e4565b6112df565b34801561056d57600080fd5b5060055461032b906001600160a01b031681565b34801561058d57600080fd5b506102a961145b565b3480156105a257600080fd5b506102746105b136600461321a565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561060757600080fd5b50610392600081565b34801561061c57600080fd5b506103927f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561065057600080fd5b506102fe6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561069957600080fd5b506102a96106a8366004613000565b61148d565b3480156106b957600080fd5b506102a96106c83660046134c7565b611568565b3480156106d957600080fd5b506102a96106e836600461350a565b611804565b3480156106f957600080fd5b506102a96107083660046135b4565b6118fc565b34801561071957600080fd5b506102a961072836600461321a565b611aa5565b34801561073957600080fd5b5060005461032b906001600160a01b031681565b34801561075957600080fd5b506103927f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102a961078f36600461363f565b611ae9565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061082757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061083881611cd1565b6001600160a01b03821661085f5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b0316156108a2576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108cc7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611cdb565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b610910611dc8565b610918611e26565b82600003610952576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166109795760405163d92e233d60e01b815260040160405180910390fd5b610984338385611ea7565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8585856040516109cb939291906137cc565b60405180910390a36109fc60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b610a0a611dc8565b610a12611e26565b6001600160a01b038416610a395760405163d92e233d60e01b815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d9748585856040516109cb93929190613802565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610aac81611cd1565b610ab4611dc8565b6001600160a01b038516610adb5760405163d92e233d60e01b815260040160405180910390fd5b6000610ae886868661210a565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610b2793929190613828565b60405180910390a295945050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b7281611cd1565b6109fc8383611cdb565b6001600160a01b0381163314610bbe576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bc882826121bd565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610bf981611cd1565b610c01611dc8565b610c09611e26565b6001600160a01b038516610c305760405163d92e233d60e01b815260040160405180910390fd5b6060610c3e87878787612281565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610c7d93929190613828565b60405180910390a29150610cb060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ce381611cd1565b610ceb612304565b50565b610cf6612394565b610cff82612464565b610d09828261246f565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610d3781611cd1565b610d3f611dc8565b610d47611e26565b83600003610d81576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610da85760405163d92e233d60e01b815260040160405180910390fd5b610db28686612575565b610de8576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610e50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e749190613842565b610eaa576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eb585848461210a565b50610ec08686612575565b610ef6576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7a919061385f565b90508015610f8c57610f8c8782612605565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382878787604051610fd393929190613828565b60405180910390a35061100560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061101761282b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b1580156110a257600080fd5b505af11580156110b6573d6000803e3d6000fd5b50506004546110d492506001600160a01b0316905085858585610d0d565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015611136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115a919061385f565b156109fc576109fc613878565b61116f611dc8565b611177611e26565b346000036111b1576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166111d85760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611225576040519150601f19603f3d011682016040523d82523d6000602084013e61122a565b606091505b5050905080611265576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c346000866040516112ad939291906137cc565b60405180910390a350610d0960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6112e7611dc8565b6112ef611e26565b34600003611329576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166113505760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d806000811461139d576040519150601f19603f3d011682016040523d82523d6000602084013e6113a2565b606091505b50509050806113dd576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008888886040516114299594939291906138a7565b60405180910390a3506109fc60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61148581611cd1565b610ceb61288d565b600061149881611cd1565b6001600160a01b0382166114bf5760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b031615611502576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61152c7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611cdb565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115b35750825b905060008267ffffffffffffffff1660011480156115d05750303b155b9050811580156115de575080155b15611615576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116765784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061169357506001600160a01b038716155b156116b15760405163d92e233d60e01b815260040160405180910390fd5b6116b9612906565b6116c161290e565b6116c9612906565b6116d161291e565b6116dc600087611cdb565b506117077f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611cdb565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556117657f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611cdb565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156117fa5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b61180c611dc8565b611814611e26565b8460000361184e576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166118755760405163d92e233d60e01b815260040160405180910390fd5b611880338587611ea7565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c87878787876040516118cb9594939291906138a7565b60405180910390a361100560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961192681611cd1565b61192e611dc8565b611936611e26565b84600003611970576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166119975760405163d92e233d60e01b815260040160405180910390fd5b6119ab6001600160a01b038816878761292e565b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de0906119f0908590600401613948565b600060405180830381600087803b158015611a0a57600080fd5b505af1158015611a1e573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143687878787604051611a6b949392919061395b565b60405180910390a3611a9c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611adf81611cd1565b6109fc83836121bd565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb611b1381611cd1565b611b1b611dc8565b611b23611e26565b6001600160a01b038516611b4a5760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d8060008114611b97576040519150601f19603f3d011682016040523d82523d6000602084013e611b9c565b606091505b5050905080611bd7576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de090611c1c908690600401613948565b600060405180830381600087803b158015611c3657600080fd5b505af1158015611c4a573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143634888888604051611c98949392919061395b565b60405180910390a350611cca60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610ceb81336129a2565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611dbe576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611d743390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610827565b6000915050610827565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611e24576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611ea1576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b039081169083160361200b57611ed26001600160a01b038316843084612a2f565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f629190613842565b611f98576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611ff757600080fd5b505af1158015611a9c573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561206e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120929190613842565b6120c8576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610bc8906001600160a01b038481169186911684612a2f565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60606121168383612a68565b600080856001600160a01b0316348686604051612134929190613992565b60006040518083038185875af1925050503d8060008114612171576040519150601f19603f3d011682016040523d82523d6000602084013e612176565b606091505b5091509150816121b2576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611dbe576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610827565b6060836001600160a01b031663676cc054348786866040518563ffffffff1660e01b81526004016122b4939291906139a2565b60006040518083038185885af11580156122d2573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526122fb91908101906139cd565b95945050505050565b61230c612aed565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061242d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166124217f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611e24576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d0981611cd1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156124c9575060408051601f3d908101601f191682019092526124c69181019061385f565b60015b61250f576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461256b576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612506565b610bc88383612b48565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af11580156125e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b69190613842565b6003546001600160a01b0390811690831603612754576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015612687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ab9190613842565b6126e1576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561274057600080fd5b505af1158015611005573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156127b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127db9190613842565b612811576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610d09906001600160a01b0384811691168361292e565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e24576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612895611dc8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612376565b611e24612b9e565b612916612b9e565b611e24612c05565b612926612b9e565b611e24612c0d565b6040516001600160a01b03838116602483015260448201839052610bc891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612c5e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610d09576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612506565b6040516001600160a01b0384811660248301528381166044830152606482018390526109fc9186918216906323b872dd9060840161295b565b60048110610d095781357f98933fac000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610bc8576040517fed69977500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611e24576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b5182612cda565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612b9657610bc88282612d82565b610d09612def565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611e24576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120e4612b9e565b612c15612b9e565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6000612c736001600160a01b03841683612e27565b90508051600014158015612c98575080806020019051810190612c969190613842565b155b15610bc8576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612506565b806001600160a01b03163b600003612d29576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612506565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612d9f9190613a3b565b600060405180830381855af49150503d8060008114612dda576040519150601f19603f3d011682016040523d82523d6000602084013e612ddf565b606091505b50915091506122fb858383612e35565b3415611e24576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606121b683836000612eaa565b606082612e4a57612e4582612f60565b6121b6565b8151158015612e6157506001600160a01b0384163b155b15612ea3576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612506565b50806121b6565b606081471015612ee8576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612506565b600080856001600160a01b03168486604051612f049190613a3b565b60006040518083038185875af1925050503d8060008114612f41576040519150601f19603f3d011682016040523d82523d6000602084013e612f46565b606091505b5091509150612f56868383612e35565b9695505050505050565b805115612f705780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612fb457600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146121b657600080fd5b80356001600160a01b0381168114612ffb57600080fd5b919050565b60006020828403121561301257600080fd5b6121b682612fe4565b600060a0828403121561302d57600080fd5b50919050565b6000806000806080858703121561304957600080fd5b61305285612fe4565b93506020850135925061306760408601612fe4565b9150606085013567ffffffffffffffff81111561308357600080fd5b61308f8782880161301b565b91505092959194509250565b60008083601f8401126130ad57600080fd5b50813567ffffffffffffffff8111156130c557600080fd5b6020830191508360208285010111156130dd57600080fd5b9250929050565b600080600080606085870312156130fa57600080fd5b61310385612fe4565b9350602085013567ffffffffffffffff81111561311f57600080fd5b61312b8782880161309b565b909450925050604085013567ffffffffffffffff81111561308357600080fd5b60008060006040848603121561316057600080fd5b61316984612fe4565b9250602084013567ffffffffffffffff81111561318557600080fd5b6131918682870161309b565b9497909650939450505050565b60005b838110156131b95781810151838201526020016131a1565b50506000910152565b600081518084526131da81602086016020860161319e565b601f01601f19169290920160200192915050565b6020815260006121b660208301846131c2565b60006020828403121561321357600080fd5b5035919050565b6000806040838503121561322d57600080fd5b8235915061323d60208401612fe4565b90509250929050565b600080600080848603606081121561325d57600080fd5b602081121561326b57600080fd5b5084935061327b60208601612fe4565b9250604085013567ffffffffffffffff81111561329757600080fd5b6132a38782880161309b565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613307576133076132af565b604052919050565b600067ffffffffffffffff821115613329576133296132af565b50601f01601f191660200190565b6000806040838503121561334a57600080fd5b61335383612fe4565b9150602083013567ffffffffffffffff81111561336f57600080fd5b8301601f8101851361338057600080fd5b803561339361338e8261330f565b6132de565b8181528660208385010111156133a857600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000806000806000608086880312156133e057600080fd5b6133e986612fe4565b94506133f760208701612fe4565b935060408601359250606086013567ffffffffffffffff81111561341a57600080fd5b6134268882890161309b565b969995985093965092949392505050565b6000806000806060858703121561344d57600080fd5b61345685612fe4565b935060208501359250604085013567ffffffffffffffff81111561329757600080fd5b6000806040838503121561348c57600080fd5b61349583612fe4565b9150602083013567ffffffffffffffff8111156134b157600080fd5b6134bd8582860161301b565b9150509250929050565b6000806000606084860312156134dc57600080fd5b6134e584612fe4565b92506134f360208501612fe4565b915061350160408501612fe4565b90509250925092565b60008060008060008060a0878903121561352357600080fd5b61352c87612fe4565b95506020870135945061354160408801612fe4565b9350606087013567ffffffffffffffff81111561355d57600080fd5b61356989828a0161309b565b909450925050608087013567ffffffffffffffff81111561358957600080fd5b61359589828a0161301b565b9150509295509295509295565b60006060828403121561302d57600080fd5b60008060008060008060a087890312156135cd57600080fd5b6135d687612fe4565b95506135e460208801612fe4565b945060408701359350606087013567ffffffffffffffff81111561360757600080fd5b61361389828a0161309b565b909450925050608087013567ffffffffffffffff81111561363357600080fd5b61359589828a016135a2565b6000806000806060858703121561365557600080fd5b61365e85612fe4565b9350602085013567ffffffffffffffff81111561367a57600080fd5b6136868782880161309b565b909450925050604085013567ffffffffffffffff8111156136a657600080fd5b61308f878288016135a2565b8015158114610ceb57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136f557600080fd5b830160208101925035905067ffffffffffffffff81111561371557600080fd5b8036038213156130dd57600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b0361376082612fe4565b16825260006020820135613773816136b2565b151560208401526001600160a01b0361378e60408401612fe4565b1660408401526137a160608301836136c0565b60a060608601526137b660a086018284613724565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a0606082015260006122fb60a083018461374f565b604081526000613816604083018587613724565b8281036020840152612f56818561374f565b8381526040602082015260006122fb604083018486613724565b60006020828403121561385457600080fd5b81516121b6816136b2565b60006020828403121561387157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8581526001600160a01b03851660208201526080604082015260006138d0608083018587613724565b82810360608401526138e2818561374f565b98975050505050505050565b6001600160a01b036138ff82612fe4565b1682526000602082013567ffffffffffffffff811680821461392057600080fd5b60208501525061393360408301836136c0565b606060408601526122fb606086018284613724565b6020815260006121b660208301846138ee565b848152606060208201526000613975606083018587613724565b828103604084015261398781856138ee565b979650505050505050565b8183823760009101908152919050565b6001600160a01b036139b385612fe4565b1681526040602082015260006122fb604083018486613724565b6000602082840312156139df57600080fd5b815167ffffffffffffffff8111156139f657600080fd5b8201601f81018413613a0757600080fd5b8051613a1561338e8261330f565b818152856020838501011115613a2a57600080fd5b6122fb82602083016020860161319e565b60008251613a4d81846020870161319e565b919091019291505056fea2646970667358221220f26b917cc0f534b97d1381b83873c7fa4565569e560937dad65f5e0c1916c55864736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a003360a060405234801561001057600080fd5b50604051611eb9380380611eb983398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611e998339815191528261014c565b50610143600080516020611e998339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b608051611c22610277600039600081816101ca01528181610597015281816105f901528181610a280152610a8a0152611c226000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806385f438c1116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103fc578063e63ab1e91461040f578063eab103df1461043657600080fd5b8063d547741f146103b3578063d936547e146103c6578063d9caed12146103e957600080fd5b80639b19251a116100bd5780639b19251a14610385578063a217fddf14610398578063c709ab6e146103a057600080fd5b806385f438c11461030557806391d148541461032c5780639a5904271461037257600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102d25780635c975abb146102f25780638456cb59146102fd57600080fd5b806336568abe146102905780633f4ba83a146102a3578063570618e1146102ab57600080fd5b8063248a9ca311610176578063248a9ca314610226578063252f07bf146102585780632f2ff15d1461027d57600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610211575b600080fd5b6101b06101ab3660046115ca565b610449565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b61022461021f366004611677565b6104e2565b005b61024a6102343660046116ea565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61022461028b366004611703565b6106e3565b61022461029e366004611703565b61070f565b61022461076d565b61024a7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec9073ffffffffffffffffffffffffffffffffffffffff1681565b60025460ff166101b0565b6102246107a2565b61024a7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b061033a366004611703565b600091825260016020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610224610380366004611733565b6107d4565b610224610393366004611733565b6108a2565b61024a600081565b6102246103ae366004611750565b610973565b6102246103c1366004611703565b610b79565b6101b06103d4366004611733565b60036020526000908152604090205460ff1681565b6102246103f73660046117f3565b610b9f565b61022461040a366004611834565b610ccb565b61024a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102246104443660046118d3565b610f2b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104dc57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104ea610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461051481610fc4565b61051c610fce565b73ffffffffffffffffffffffffffffffffffffffff851660009081526003602052604090205460ff1661057b576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bc73ffffffffffffffffffffffffffffffffffffffff86167f00000000000000000000000000000000000000000000000000000000000000008661100d565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906106369088908a90899089908990600401611939565b600060405180830381600087803b15801561065057600080fd5b505af1158015610664573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d58686866040516106c993929190611996565b60405180910390a3506106dc6001600055565b5050505050565b600082815260016020819052604090912001546106ff81610fc4565b610709838361108e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461075e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610768828261113b565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61079781610fc4565b61079f6111dc565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107cc81610fc4565b61079f61123b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6107fe81610fc4565b73ffffffffffffffffffffffffffffffffffffffff821661084b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a6108cc81610fc4565b73ffffffffffffffffffffffffffffffffffffffff8216610919576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b61097b610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109a581610fc4565b6109ad610fce565b73ffffffffffffffffffffffffffffffffffffffff861660009081526003602052604090205460ff16610a0c576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a4d73ffffffffffffffffffffffffffffffffffffffff87167f00000000000000000000000000000000000000000000000000000000000000008761100d565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610ac99089908b908a908a908a908a90600401611a77565b600060405180830381600087803b158015610ae357600080fd5b505af1158015610af7573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f2032883a139c935aa5ecfcba7233f50f723279d7418d69424daa39a5af76d13b87878787604051610b5e9493929190611ae8565b60405180910390a350610b716001600055565b505050505050565b60008281526001602081905260409091200154610b9581610fc4565b610709838361113b565b610ba7610f81565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610bd181610fc4565b610bd9610fce565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205460ff16610c38576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5973ffffffffffffffffffffffffffffffffffffffff8416858461100d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610cb891815260200190565b60405180910390a3506107686001600055565b610cd3610f81565b610cdb610fce565b60045474010000000000000000000000000000000000000000900460ff16610d2f576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604090205460ff16610d8e576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8616906370a0823190602401602060405180830381865afa158015610dfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1f9190611b14565b9050610e4373ffffffffffffffffffffffffffffffffffffffff8616333087611278565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efb9190611b14565b610f059190611b2d565b8787604051610f18959493929190611b67565b60405180910390a250610b716001600055565b6000610f3681610fc4565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610fbd576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61079f81336112be565b60025460ff161561100b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261076891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061134f565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1661113357600083815260016020818152604080842073ffffffffffffffffffffffffffffffffffffffff87168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104dc565b5060006104dc565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff161561113357600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104dc565b6111e46113e5565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b611243610fce565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112113390565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526107099186918216906323b872dd90608401611047565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661134b576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b600061137173ffffffffffffffffffffffffffffffffffffffff841683611421565b905080516000141580156113965750808060200190518101906113949190611ba0565b155b15610768576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401611342565b60025460ff1661100b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061142f83836000611436565b9392505050565b606081471015611474576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611342565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161149d9190611bbd565b60006040518083038185875af1925050503d80600081146114da576040519150601f19603f3d011682016040523d82523d6000602084013e6114df565b606091505b50915091506114ef8683836114f9565b9695505050505050565b60608261150e5761150982611588565b61142f565b8151158015611532575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611581576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401611342565b508061142f565b8051156115985780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156115dc57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461142f57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461079f57600080fd5b60008083601f84011261164057600080fd5b50813567ffffffffffffffff81111561165857600080fd5b60208301915083602082850101111561167057600080fd5b9250929050565b60008060008060006080868803121561168f57600080fd5b853561169a8161160c565b945060208601356116aa8161160c565b935060408601359250606086013567ffffffffffffffff8111156116cd57600080fd5b6116d98882890161162e565b969995985093965092949392505050565b6000602082840312156116fc57600080fd5b5035919050565b6000806040838503121561171657600080fd5b8235915060208301356117288161160c565b809150509250929050565b60006020828403121561174557600080fd5b813561142f8161160c565b60008060008060008060a0878903121561176957600080fd5b86356117748161160c565b955060208701356117848161160c565b945060408701359350606087013567ffffffffffffffff8111156117a757600080fd5b6117b389828a0161162e565b909450925050608087013567ffffffffffffffff8111156117d357600080fd5b87016060818a0312156117e557600080fd5b809150509295509295509295565b60008060006060848603121561180857600080fd5b83356118138161160c565b925060208401356118238161160c565b929592945050506040919091013590565b6000806000806000806080878903121561184d57600080fd5b863567ffffffffffffffff81111561186457600080fd5b61187089828a0161162e565b90975095505060208701356118848161160c565b935060408701359250606087013567ffffffffffffffff8111156118a757600080fd5b6118b389828a0161162e565b979a9699509497509295939492505050565b801515811461079f57600080fd5b6000602082840312156118e557600080fd5b813561142f816118c5565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260806060820152600061198b6080830184866118f0565b979650505050505050565b8381526040602082015260006119b06040830184866118f0565b95945050505050565b600081356119c68161160c565b73ffffffffffffffffffffffffffffffffffffffff168352602082013567ffffffffffffffff81168082146119fa57600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112611a3657600080fd5b820160208101903567ffffffffffffffff811115611a5357600080fd5b803603821315611a6257600080fd5b606060408601526119b06060860182846118f0565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a060608201526000611ac960a0830185876118f0565b8281036080840152611adb81856119b9565b9998505050505050505050565b848152606060208201526000611b026060830185876118f0565b828103604084015261198b81856119b9565b600060208284031215611b2657600080fd5b5051919050565b818103818111156104dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b606081526000611b7b6060830187896118f0565b8560208401528281036040840152611b948185876118f0565b98975050505050505050565b600060208284031215611bb257600080fd5b815161142f816118c5565b6000825160005b81811015611bde5760208186018101518583015201611bc4565b50600092019182525091905056fea264697066735822122029d8a02c5c60bae7d404d08786de2b2dd6b37e11d10fa76c968c7809ff06f3b864736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a"; + "0x60a060405230608052600580546001600160a01b0319163317905534801561002657600080fd5b5061002f610154565b600554600180546001600160a01b039092166001600160a01b031992831617905560028054610123921691909117905560405161006b90610206565b60408082526004908201819052631d195cdd60e21b606083015260806020830181905282015263151154d560e21b60a082015260c001604051809103906000f0801580156100bd573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283161790556001546040513092919091169082906100f290610213565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801561012e573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055610220565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101a45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146102035780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610c9f80613d6b83390190565b611c7f80614a0a83390190565b608051613b22610249600039600081816124130152818161243c01526128aa0152613b226000f3fe60806040526004361061024f5760003560e01c80635b11259111610138578063a217fddf116100b0578063c0c53b8b1161007f578063d547741f11610064578063d547741f14610720578063dda79b7514610740578063e63ab1e91461076057600080fd5b8063c0c53b8b146106e0578063d09e3b781461070057600080fd5b8063a217fddf1461062e578063a783c78914610643578063ad3cb1cc14610677578063ae7a3a6f146106c057600080fd5b8063726ac97c1161010757806381100bf0116100ec57806381100bf0146105945780638456cb59146105b457806391d14854146105c957600080fd5b8063726ac97c1461056e578063744b9b8b1461058157600080fd5b80635b112591146104c35780635c975abb146104e35780635d62c8601461051a5780636ab90f9b1461054e57600080fd5b806336568abe116101cb5780633f4ba83a1161019a5780635131ab591161017f5780635131ab591461046e57806352d1902d1461048e57806357bec62f146104a357600080fd5b80633f4ba83a146104465780634f1ef2861461045b57600080fd5b806336568abe146103d357806336c99f3b146103f357806338e22527146104135780633c2f05a81461042657600080fd5b80631becceb41161022257806321e093b11161020757806321e093b11461031e578063248a9ca3146103565780632f2ff15d146103b357600080fd5b80631becceb4146102de5780631cff79cd146102fe57600080fd5b806301ffc9a71461025457806310188aef14610289578063102614b0146102ab5780631b5ee25b146102cb575b600080fd5b34801561026057600080fd5b5061027461026f36600461301d565b610794565b60405190151581526020015b60405180910390f35b34801561029557600080fd5b506102a96102a436600461307b565b61082d565b005b3480156102b757600080fd5b506102a96102c63660046130ae565b610908565b6102a96102d9366004613171565b610a02565b3480156102ea57600080fd5b506102a96102f93660046131e4565b610bea565b61031161030c36600461324b565b610c68565b60405161028091906132ee565b34801561032a57600080fd5b5060035461033e906001600160a01b031681565b6040516001600160a01b039091168152602001610280565b34801561036257600080fd5b506103a5610371366004613301565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610280565b3480156103bf57600080fd5b506102a96103ce36600461331a565b610d20565b3480156103df57600080fd5b506102a96103ee36600461331a565b610d64565b3480156103ff57600080fd5b506102a961040e366004613346565b610db5565b6103116104213660046133de565b610f5e565b34801561043257600080fd5b5060045461033e906001600160a01b031681565b34801561045257600080fd5b506102a961104a565b6102a96104693660046134cf565b61107f565b34801561047a57600080fd5b506102a9610489366004613560565b61109e565b34801561049a57600080fd5b506103a561139e565b3480156104af57600080fd5b5060025461033e906001600160a01b031681565b3480156104cf57600080fd5b5060015461033e906001600160a01b031681565b3480156104ef57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610274565b34801561052657600080fd5b506103a57f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b34801561055a57600080fd5b506102a96105693660046135cf565b6113cd565b6102a961057c366004613611565b6114f8565b6102a961058f3660046131e4565b611670565b3480156105a057600080fd5b5060055461033e906001600160a01b031681565b3480156105c057600080fd5b506102a96117ec565b3480156105d557600080fd5b506102746105e436600461331a565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561063a57600080fd5b506103a5600081565b34801561064f57600080fd5b506103a57f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561068357600080fd5b506103116040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156106cc57600080fd5b506102a96106db36600461307b565b61181e565b3480156106ec57600080fd5b506102a96106fb36600461365f565b6118f9565b34801561070c57600080fd5b506102a961071b3660046136a2565b611b95565b34801561072c57600080fd5b506102a961073b36600461331a565b611c8d565b34801561074c57600080fd5b5060005461033e906001600160a01b031681565b34801561076c57600080fd5b506103a57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061082757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061083881611cd1565b6001600160a01b03821661085f5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b0316156108a2576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108cc7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611cdb565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b610910611dc8565b610918611e26565b82600003610952576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166109795760405163d92e233d60e01b815260040160405180910390fd5b610984338385611ea7565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8585856040516109cb93929190613847565b60405180910390a36109fc60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610a2c81611cd1565b610a34611dc8565b610a3c611e26565b6001600160a01b038516610a635760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d8060008114610ab0576040519150601f19603f3d011682016040523d82523d6000602084013e610ab5565b606091505b5050905080610af0576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5ac1e0700000000000000000000000000000000000000000000000000000000081526001600160a01b03871690635ac1e07090610b359086906004016138f1565b600060405180830381600087803b158015610b4f57600080fd5b505af1158015610b63573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167ff196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b34888888604051610bb19493929190613904565b60405180910390a350610be360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610bf2611dc8565b610bfa611e26565b6001600160a01b038416610c215760405163d92e233d60e01b815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d9748585856040516109cb9392919061393b565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c9481611cd1565b610c9c611dc8565b6001600160a01b038516610cc35760405163d92e233d60e01b815260040160405180910390fd5b6000610cd086868661210a565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610d0f93929190613961565b60405180910390a295945050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610d5a81611cd1565b6109fc8383611cdb565b6001600160a01b0381163314610da6576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610db082826121bd565b505050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610ddf81611cd1565b610de7611dc8565b610def611e26565b84600003610e29576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616610e505760405163d92e233d60e01b815260040160405180910390fd5b610e646001600160a01b0388168787612281565b6040517f5ac1e0700000000000000000000000000000000000000000000000000000000081526001600160a01b03871690635ac1e07090610ea99085906004016138f1565b600060405180830381600087803b158015610ec357600080fd5b505af1158015610ed7573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167ff196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b87878787604051610f249493929190613904565b60405180910390a3610f5560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610f8a81611cd1565b610f92611dc8565b610f9a611e26565b6001600160a01b038516610fc15760405163d92e233d60e01b815260040160405180910390fd5b6060610fcf878787876122f5565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f34878760405161100e93929190613961565b60405180910390a2915061104160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61107481611cd1565b61107c612378565b50565b611087612408565b611090826124d8565b61109a82826124e3565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96110c881611cd1565b6110d0611dc8565b6110d8611e26565b83600003611112576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0385166111395760405163d92e233d60e01b815260040160405180910390fd5b61114386866125e9565b611179576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af11580156111e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611205919061397b565b61123b576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61124685848461210a565b5061125186866125e9565b611287576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa1580156112e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130b9190613998565b9050801561131d5761131d8782612679565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161136493929190613961565b60405180910390a35061139660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60006113a861289f565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600480546040517f40c10f190000000000000000000000000000000000000000000000000000000081523092810192909252602482018590526001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561143357600080fd5b505af1158015611447573d6000803e3d6000fd5b505060045461146592506001600160a01b031690508585858561109e565b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa1580156114c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114eb9190613998565b156109fc576109fc6139b1565b611500611dc8565b611508611e26565b34600003611542576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166115695760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146115b6576040519150601f19603f3d011682016040523d82523d6000602084013e6115bb565b606091505b50509050806115f6576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008660405161163e93929190613847565b60405180910390a35061109a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611678611dc8565b611680611e26565b346000036116ba576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166116e15760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d806000811461172e576040519150601f19603f3d011682016040523d82523d6000602084013e611733565b606091505b505090508061176e576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008888886040516117ba9594939291906139e0565b60405180910390a3506109fc60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61181681611cd1565b61107c612901565b600061182981611cd1565b6001600160a01b0382166118505760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b031615611893576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118bd7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611cdb565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156119445750825b905060008267ffffffffffffffff1660011480156119615750303b155b90508115801561196f575080155b156119a6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315611a075784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0388161580611a2457506001600160a01b038716155b15611a425760405163d92e233d60e01b815260040160405180910390fd5b611a4a61297a565b611a52612982565b611a5a61297a565b611a62612992565b611a6d600087611cdb565b50611a987f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611cdb565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a16179055611af67f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611cdb565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611b8b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b611b9d611dc8565b611ba5611e26565b84600003611bdf576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611c065760405163d92e233d60e01b815260040160405180910390fd5b611c11338587611ea7565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8787878787604051611c5c9594939291906139e0565b60405180910390a361139660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611cc781611cd1565b6109fc83836121bd565b61107c81336129a2565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611dbe576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611d743390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610827565b6000915050610827565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611e24576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611ea1576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b039081169083160361200b57611ed26001600160a01b038316843084612a2f565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f62919061397b565b611f98576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611ff757600080fd5b505af1158015610f55573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561206e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612092919061397b565b6120c8576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610db0906001600160a01b038481169186911684612a2f565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60606121168383612a68565b600080856001600160a01b0316348686604051612134929190613a27565b60006040518083038185875af1925050503d8060008114612171576040519150601f19603f3d011682016040523d82523d6000602084013e612176565b606091505b5091509150816121b2576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611dbe576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610827565b6040516001600160a01b03838116602483015260448201839052610db091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612b68565b6060836001600160a01b031663676cc054348786866040518563ffffffff1660e01b815260040161232893929190613a37565b60006040518083038185885af1158015612346573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261236f9190810190613a62565b95945050505050565b612380612be4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806124a157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166124957f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611e24576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061109a81611cd1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561253d575060408051601f3d908101601f1916820190925261253a91810190613998565b60015b612583576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146125df576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161257a565b610db08383612c3f565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612655573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b6919061397b565b6003546001600160a01b03908116908316036127c8576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156126fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271f919061397b565b612755576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156127b457600080fd5b505af1158015611396573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561282b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284f919061397b565b612885576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005461109a906001600160a01b03848116911683612281565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e24576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612909611dc8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336123ea565b611e24612c95565b61298a612c95565b611e24612cfc565b61299a612c95565b611e24612d04565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff1661109a576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161257a565b6040516001600160a01b0384811660248301528381166044830152606482018390526109fc9186918216906323b872dd906084016122ae565b6004811061109a5781357f98933fac000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601612aed576040517fed69977500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa53e1f90000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610db0576040517ff3459a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612b7d6001600160a01b03841683612d55565b90508051600014158015612ba2575080806020019051810190612ba0919061397b565b155b15610db0576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161257a565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611e24576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c4882612d63565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612c8d57610db08282612e0b565b61109a612e78565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611e24576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120e4612c95565b612d0c612c95565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606121b683836000612eb0565b806001600160a01b03163b600003612db2576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161257a565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612e289190613ad0565b600060405180830381855af49150503d8060008114612e63576040519150601f19603f3d011682016040523d82523d6000602084013e612e68565b606091505b509150915061236f858383612f66565b3415611e24576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081471015612eee576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161257a565b600080856001600160a01b03168486604051612f0a9190613ad0565b60006040518083038185875af1925050503d8060008114612f47576040519150601f19603f3d011682016040523d82523d6000602084013e612f4c565b606091505b5091509150612f5c868383612f66565b9695505050505050565b606082612f7b57612f7682612fdb565b6121b6565b8151158015612f9257506001600160a01b0384163b155b15612fd4576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161257a565b50806121b6565b805115612feb5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561302f57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146121b657600080fd5b80356001600160a01b038116811461307657600080fd5b919050565b60006020828403121561308d57600080fd5b6121b68261305f565b600060a082840312156130a857600080fd5b50919050565b600080600080608085870312156130c457600080fd5b6130cd8561305f565b9350602085013592506130e26040860161305f565b9150606085013567ffffffffffffffff8111156130fe57600080fd5b61310a87828801613096565b91505092959194509250565b60008083601f84011261312857600080fd5b50813567ffffffffffffffff81111561314057600080fd5b60208301915083602082850101111561315857600080fd5b9250929050565b6000608082840312156130a857600080fd5b6000806000806060858703121561318757600080fd5b6131908561305f565b9350602085013567ffffffffffffffff8111156131ac57600080fd5b6131b887828801613116565b909450925050604085013567ffffffffffffffff8111156131d857600080fd5b61310a8782880161315f565b600080600080606085870312156131fa57600080fd5b6132038561305f565b9350602085013567ffffffffffffffff81111561321f57600080fd5b61322b87828801613116565b909450925050604085013567ffffffffffffffff8111156130fe57600080fd5b60008060006040848603121561326057600080fd5b6132698461305f565b9250602084013567ffffffffffffffff81111561328557600080fd5b61329186828701613116565b9497909650939450505050565b60005b838110156132b95781810151838201526020016132a1565b50506000910152565b600081518084526132da81602086016020860161329e565b601f01601f19169290920160200192915050565b6020815260006121b660208301846132c2565b60006020828403121561331357600080fd5b5035919050565b6000806040838503121561332d57600080fd5b8235915061333d6020840161305f565b90509250929050565b60008060008060008060a0878903121561335f57600080fd5b6133688761305f565b95506133766020880161305f565b945060408701359350606087013567ffffffffffffffff81111561339957600080fd5b6133a589828a01613116565b909450925050608087013567ffffffffffffffff8111156133c557600080fd5b6133d189828a0161315f565b9150509295509295509295565b60008060008084860360608112156133f557600080fd5b602081121561340357600080fd5b508493506134136020860161305f565b9250604085013567ffffffffffffffff81111561342f57600080fd5b61343b87828801613116565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561349f5761349f613447565b604052919050565b600067ffffffffffffffff8211156134c1576134c1613447565b50601f01601f191660200190565b600080604083850312156134e257600080fd5b6134eb8361305f565b9150602083013567ffffffffffffffff81111561350757600080fd5b8301601f8101851361351857600080fd5b803561352b613526826134a7565b613476565b81815286602083850101111561354057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561357857600080fd5b6135818661305f565b945061358f6020870161305f565b935060408601359250606086013567ffffffffffffffff8111156135b257600080fd5b6135be88828901613116565b969995985093965092949392505050565b600080600080606085870312156135e557600080fd5b6135ee8561305f565b935060208501359250604085013567ffffffffffffffff81111561342f57600080fd5b6000806040838503121561362457600080fd5b61362d8361305f565b9150602083013567ffffffffffffffff81111561364957600080fd5b61365585828601613096565b9150509250929050565b60008060006060848603121561367457600080fd5b61367d8461305f565b925061368b6020850161305f565b91506136996040850161305f565b90509250925092565b60008060008060008060a087890312156136bb57600080fd5b6136c48761305f565b9550602087013594506136d96040880161305f565b9350606087013567ffffffffffffffff8111156136f557600080fd5b61370189828a01613116565b909450925050608087013567ffffffffffffffff81111561372157600080fd5b6133d189828a01613096565b801515811461107c57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261377057600080fd5b830160208101925035905067ffffffffffffffff81111561379057600080fd5b80360382131561315857600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b036137db8261305f565b168252600060208201356137ee8161372d565b151560208401526001600160a01b036138096040840161305f565b16604084015261381c606083018361373b565b60a0606086015261383160a08601828461379f565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a06060820152600061236f60a08301846137ca565b6001600160a01b0361388e8261305f565b1682526001600160a01b036138a56020830161305f565b1660208301526000604082013567ffffffffffffffff81168082146138c957600080fd5b6040850152506138dc606083018361373b565b6080606086015261236f60808601828461379f565b6020815260006121b6602083018461387d565b84815260606020820152600061391e60608301858761379f565b8281036040840152613930818561387d565b979650505050505050565b60408152600061394f60408301858761379f565b8281036020840152612f5c81856137ca565b83815260406020820152600061236f60408301848661379f565b60006020828403121561398d57600080fd5b81516121b68161372d565b6000602082840312156139aa57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b8581526001600160a01b0385166020820152608060408201526000613a0960808301858761379f565b8281036060840152613a1b81856137ca565b98975050505050505050565b8183823760009101908152919050565b6001600160a01b03613a488561305f565b16815260406020820152600061236f60408301848661379f565b600060208284031215613a7457600080fd5b815167ffffffffffffffff811115613a8b57600080fd5b8201601f81018413613a9c57600080fd5b8051613aaa613526826134a7565b818152856020838501011115613abf57600080fd5b61236f82602083016020860161329e565b60008251613ae281846020870161329e565b919091019291505056fea2646970667358221220410f991bd09d83d98db2e20feb9939d7548e168d9dfee5819b3f462840a9095a64736f6c634300081a0033608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a003360a060405234801561001057600080fd5b50604051611c7f380380611c7f83398101604081905261002f916101fd565b60016000556002805460ff191690556001600160a01b038316158061005b57506001600160a01b038216155b8061006d57506001600160a01b038116155b1561008b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03838116608052600480546001600160a01b0319169184169190911790556100bb60008261014c565b506100e67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014c565b506101117f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014c565b5061012a600080516020611c5f8339815191528261014c565b50610143600080516020611c5f8339815191528361014c565b50505050610240565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166101d75760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016101db565b5060005b92915050565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b6080516119e8610277600039600081816101ca01528181610556015281816105ab015281816107c8015261081d01526119e86000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80638456cb59116100e3578063d547741f1161008c578063e609055e11610066578063e609055e146103d5578063e63ab1e9146103e8578063eab103df1461040f57600080fd5b8063d547741f1461038c578063d936547e1461039f578063d9caed12146103c257600080fd5b80639a590427116100bd5780639a5904271461035e5780639b19251a14610371578063a217fddf1461038457600080fd5b80638456cb59146102f657806385f438c1146102fe57806391d148541461032557600080fd5b806336568abe116101455780635b1125911161011f5780635b112591146102c55780635c975abb146102d85780635eb72e15146102e357600080fd5b806336568abe146102835780633f4ba83a14610296578063570618e11461029e57600080fd5b8063248a9ca311610176578063248a9ca314610219578063252f07bf1461024b5780632f2ff15d1461027057600080fd5b806301ffc9a71461019d578063116191b6146101c557806321fc65f214610204575b600080fd5b6101b06101ab3660046113c2565b610422565b60405190151581526020015b60405180910390f35b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101bc565b610217610212366004611462565b6104bb565b005b61023d6102273660046114d5565b6000908152600160208190526040909120015490565b6040519081526020016101bc565b6004546101b09074010000000000000000000000000000000000000000900460ff1681565b61021761027e3660046114ee565b61067b565b6102176102913660046114ee565b6106a7565b6102176106f8565b61023d7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b6004546101ec906001600160a01b031681565b60025460ff166101b0565b6102176102f136600461151e565b61072d565b6102176108f2565b61023d7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101b06103333660046114ee565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61021761036c3660046115c1565b610924565b61021761037f3660046115c1565b6109d8565b61023d600081565b61021761039a3660046114ee565b610a8f565b6101b06103ad3660046115c1565b60036020526000908152604090205460ff1681565b6102176103d03660046115de565b610ab5565b6102176103e336600461161f565b610bad565b61023d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61021761041d3660046116be565b610dd9565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104b557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104c3610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46104ed81610e72565b6104f5610e7c565b6001600160a01b03851660009081526003602052604090205460ff16610547576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61057b6001600160a01b0386167f000000000000000000000000000000000000000000000000000000000000000086610ebb565b6040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906105e89088908a90899089908990600401611724565b600060405180830381600087803b15801561060257600080fd5b505af1158015610616573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161066193929190611767565b60405180910390a3506106746001600055565b5050505050565b6000828152600160208190526040909120015461069781610e72565b6106a18383610f2f565b50505050565b6001600160a01b03811633146106e9576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106f38282610fc2565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61072281610e72565b61072a611049565b50565b610735610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461075f81610e72565b610767610e7c565b6001600160a01b03861660009081526003602052604090205460ff166107b9576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107ed6001600160a01b0387167f000000000000000000000000000000000000000000000000000000000000000087610ebb565b6040517f36c99f3b0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b9061085c9089908b908a908a908a908a90600401611857565b600060405180830381600087803b15801561087657600080fd5b505af115801561088a573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f84a6ffacc2d811bfa095a126654bc0ae038aac9eeed4390895bf3b3228f17b37878787876040516108d794939291906118ae565b60405180910390a3506108ea6001600055565b505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61091c81610e72565b61072a61109b565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a61094e81610e72565b6001600160a01b03821661098e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610a0281610e72565b6001600160a01b038216610a42576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260036020526040808220805460ff19166001179055517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b60008281526001602081905260409091200154610aab81610e72565b6106a18383610fc2565b610abd610e2f565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610ae781610e72565b610aef610e7c565b6001600160a01b03831660009081526003602052604090205460ff16610b41576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b556001600160a01b0384168584610ebb565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb84604051610b9a91815260200190565b60405180910390a3506106f36001600055565b610bb5610e2f565b610bbd610e7c565b60045474010000000000000000000000000000000000000000900460ff16610c11576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526003602052604090205460ff16610c63576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce791906118da565b9050610cfe6001600160a01b0386163330876110d8565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015610d85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da991906118da565b610db391906118f3565b8787604051610dc695949392919061192d565b60405180910390a2506108ea6001600055565b6000610de481610e72565b506004805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600260005403610e6b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b61072a8133611111565b60025460ff1615610eb9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b038381166024830152604482018390526106f391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611188565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff16610fba5760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45060016104b5565b5060006104b5565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff1615610fba5760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104b5565b611051611204565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6110a3610e7c565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861107e3390565b6040516001600160a01b0384811660248301528381166044830152606482018390526106a19186918216906323b872dd90608401610ee8565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16611184576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5050565b600061119d6001600160a01b03841683611240565b905080516000141580156111c25750808060200190518101906111c09190611966565b155b156106f3576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161117b565b60025460ff16610eb9576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061124e83836000611255565b9392505050565b606081471015611293576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161117b565b600080856001600160a01b031684866040516112af9190611983565b60006040518083038185875af1925050503d80600081146112ec576040519150601f19603f3d011682016040523d82523d6000602084013e6112f1565b606091505b509150915061130186838361130b565b9695505050505050565b6060826113205761131b82611380565b61124e565b815115801561133757506001600160a01b0384163b155b15611379576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161117b565b508061124e565b8051156113905780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156113d457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461124e57600080fd5b6001600160a01b038116811461072a57600080fd5b60008083601f84011261142b57600080fd5b50813567ffffffffffffffff81111561144357600080fd5b60208301915083602082850101111561145b57600080fd5b9250929050565b60008060008060006080868803121561147a57600080fd5b853561148581611404565b9450602086013561149581611404565b935060408601359250606086013567ffffffffffffffff8111156114b857600080fd5b6114c488828901611419565b969995985093965092949392505050565b6000602082840312156114e757600080fd5b5035919050565b6000806040838503121561150157600080fd5b82359150602083013561151381611404565b809150509250929050565b60008060008060008060a0878903121561153757600080fd5b863561154281611404565b9550602087013561155281611404565b945060408701359350606087013567ffffffffffffffff81111561157557600080fd5b61158189828a01611419565b909450925050608087013567ffffffffffffffff8111156115a157600080fd5b87016080818a0312156115b357600080fd5b809150509295509295509295565b6000602082840312156115d357600080fd5b813561124e81611404565b6000806000606084860312156115f357600080fd5b83356115fe81611404565b9250602084013561160e81611404565b929592945050506040919091013590565b6000806000806000806080878903121561163857600080fd5b863567ffffffffffffffff81111561164f57600080fd5b61165b89828a01611419565b909750955050602087013561166f81611404565b935060408701359250606087013567ffffffffffffffff81111561169257600080fd5b61169e89828a01611419565b979a9699509497509295939492505050565b801515811461072a57600080fd5b6000602082840312156116d057600080fd5b813561124e816116b0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061175c6080830184866116db565b979650505050505050565b8381526040602082015260006117816040830184866116db565b95945050505050565b6000813561179781611404565b6001600160a01b0316835260208201356117b081611404565b6001600160a01b03166020840152604082013567ffffffffffffffff81168082146117da57600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261181657600080fd5b820160208101903567ffffffffffffffff81111561183357600080fd5b80360382131561184257600080fd5b608060608601526117816080860182846116db565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061188f60a0830185876116db565b82810360808401526118a1818561178a565b9998505050505050505050565b8481526060602082015260006118c86060830185876116db565b828103604084015261175c818561178a565b6000602082840312156118ec57600080fd5b5051919050565b818103818111156104b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006119416060830187896116db565b856020840152828103604084015261195a8185876116db565b98975050505050505050565b60006020828403121561197857600080fd5b815161124e816116b0565b6000825160005b818110156119a4576020818601810151858301520161198a565b50600092019182525091905056fea2646970667358221220dc0b6596b7b61441087636724be59e8874b026b619128cbecb229a5609d1f02d64736f6c634300081a00338619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a"; type GatewayEVMEchidnaTestConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/GatewayEVMUpgradeTest__factory.ts b/v2/types/factories/GatewayEVMUpgradeTest__factory.ts index d384f29b..cc8f30e7 100644 --- a/v2/types/factories/GatewayEVMUpgradeTest__factory.ts +++ b/v2/types/factories/GatewayEVMUpgradeTest__factory.ts @@ -437,6 +437,11 @@ const _abi = [ type: "tuple", internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -650,6 +655,11 @@ const _abi = [ type: "tuple", internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -1067,6 +1077,11 @@ const _abi = [ indexed: false, internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -1307,6 +1322,11 @@ const _abi = [ name: "NotAllowedToCallOnCall", inputs: [], }, + { + type: "error", + name: "NotAllowedToCallOnRevert", + inputs: [], + }, { type: "error", name: "NotInitializing", @@ -1357,7 +1377,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516138406100fd600039600081816121c3015281816121ec015261265a01526138406000f3fe6080604052600436106101fe5760003560e01c80635c975abb1161011d578063ad3cb1cc116100b0578063d0b492c31161007f578063dda79b7511610064578063dda79b751461067c578063e63ab1e91461069c578063f7ad60db146106d057600080fd5b8063d0b492c31461063c578063d547741f1461065c57600080fd5b8063ad3cb1cc14610593578063ae7a3a6f146105dc578063c0c53b8b146105fc578063d09e3b781461061c57600080fd5b80638456cb59116100ec5780638456cb59146104d057806391d14854146104e5578063a217fddf1461054a578063a783c7891461055f57600080fd5b80635c975abb1461043f5780635d62c86014610476578063726ac97c146104aa578063744b9b8b146104bd57600080fd5b806336568abe116101955780635131ab59116101645780635131ab59146103ca57806352d1902d146103ea57806357bec62f146103ff5780635b1125911461041f57600080fd5b806336568abe1461036f57806338e225271461038f5780633f4ba83a146103a25780634f1ef286146103b757600080fd5b80631cff79cd116101d15780631cff79cd1461029a57806321e093b1146102ba578063248a9ca3146102f25780632f2ff15d1461034f57600080fd5b806301ffc9a71461020357806310188aef14610238578063102614b01461025a5780631becceb41461027a575b600080fd5b34801561020f57600080fd5b5061022361021e366004612dc6565b6106e3565b60405190151581526020015b60405180910390f35b34801561024457600080fd5b50610258610253366004612e24565b61077c565b005b34801561026657600080fd5b50610258610275366004612e57565b610857565b34801561028657600080fd5b50610258610295366004612f08565b610951565b6102ad6102a8366004612f6f565b6109cf565b60405161022f9190613012565b3480156102c657600080fd5b506003546102da906001600160a01b031681565b6040516001600160a01b03909116815260200161022f565b3480156102fe57600080fd5b5061034161030d366004613025565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161022f565b34801561035b57600080fd5b5061025861036a36600461303e565b610a87565b34801561037b57600080fd5b5061025861038a36600461303e565b610acb565b6102ad61039d36600461306a565b610b1c565b3480156103ae57600080fd5b50610258610c08565b6102586103c536600461315b565b610c3d565b3480156103d657600080fd5b506102586103e53660046131ec565b610c5c565b3480156103f657600080fd5b50610341610f5c565b34801561040b57600080fd5b506002546102da906001600160a01b031681565b34801561042b57600080fd5b506001546102da906001600160a01b031681565b34801561044b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610223565b34801561048257600080fd5b506103417f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6102586104b836600461325b565b610f8b565b6102586104cb366004612f08565b611103565b3480156104dc57600080fd5b5061025861127f565b3480156104f157600080fd5b5061022361050036600461303e565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561055657600080fd5b50610341600081565b34801561056b57600080fd5b506103417f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561059f57600080fd5b506102ad6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105e857600080fd5b506102586105f7366004612e24565b6112b1565b34801561060857600080fd5b506102586106173660046132a9565b61138c565b34801561062857600080fd5b506102586106373660046132ec565b611628565b34801561064857600080fd5b50610258610657366004613396565b611720565b34801561066857600080fd5b5061025861067736600461303e565b6118c9565b34801561068857600080fd5b506000546102da906001600160a01b031681565b3480156106a857600080fd5b506103417f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102586106de366004613421565b61190d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061077657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061078781611af5565b6001600160a01b0382166107ae5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b0316156107f1576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61081b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611aff565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61085f611bec565b610867611c4a565b826000036108a1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166108c85760405163d92e233d60e01b815260040160405180910390fd5b6108d3338385611ccb565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c85858560405161091a939291906135ae565b60405180910390a361094b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b610959611bec565b610961611c4a565b6001600160a01b0384166109885760405163d92e233d60e01b815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97485858560405161091a939291906135e4565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109fb81611af5565b610a03611bec565b6001600160a01b038516610a2a5760405163d92e233d60e01b815260040160405180910390fd5b6000610a37868686611f2e565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546348787604051610a769392919061360a565b60405180910390a295945050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610ac181611af5565b61094b8383611aff565b6001600160a01b0381163314610b0d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b178282611fe1565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b4881611af5565b610b50611bec565b610b58611c4a565b6001600160a01b038516610b7f5760405163d92e233d60e01b815260040160405180910390fd5b6060610b8d878787876120a5565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610bcc9392919061360a565b60405180910390a29150610bff60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c3281611af5565b610c3a612128565b50565b610c456121b8565b610c4e82612288565b610c588282612293565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610c8681611af5565b610c8e611bec565b610c96611c4a565b83600003610cd0576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610cf75760405163d92e233d60e01b815260040160405180910390fd5b610d018686612399565b610d37576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc39190613624565b610df9576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e04858484611f2e565b50610e0f8686612399565b610e45576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610ea5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec99190613641565b90508015610edb57610edb8782612429565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382878787604051610f229392919061360a565b60405180910390a350610f5460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000610f6661264f565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610f93611bec565b610f9b611c4a565b34600003610fd5576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610ffc5760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611049576040519150601f19603f3d011682016040523d82523d6000602084013e61104e565b606091505b5050905080611089576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c346000866040516110d1939291906135ae565b60405180910390a350610c5860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61110b611bec565b611113611c4a565b3460000361114d576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166111745760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146111c1576040519150601f19603f3d011682016040523d82523d6000602084013e6111c6565b606091505b5050905080611201576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600088888860405161124d95949392919061365a565b60405180910390a35061094b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6112a981611af5565b610c3a6126b1565b60006112bc81611af5565b6001600160a01b0382166112e35760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b031615611326576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113507f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611aff565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113d75750825b905060008267ffffffffffffffff1660011480156113f45750303b155b905081158015611402575080155b15611439576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561149a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806114b757506001600160a01b038716155b156114d55760405163d92e233d60e01b815260040160405180910390fd5b6114dd61272a565b6114e5612732565b6114ed61272a565b6114f5612742565b611500600087611aff565b5061152b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611aff565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556115897f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611aff565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038916179055831561161e5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b611630611bec565b611638611c4a565b84600003611672576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166116995760405163d92e233d60e01b815260040160405180910390fd5b6116a4338587611ccb565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c87878787876040516116ef95949392919061365a565b60405180910390a3610f5460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961174a81611af5565b611752611bec565b61175a611c4a565b84600003611794576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166117bb5760405163d92e233d60e01b815260040160405180910390fd5b6117cf6001600160a01b0388168787612752565b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de0906118149085906004016136fb565b600060405180830381600087803b15801561182e57600080fd5b505af1158015611842573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b14368787878760405161188f949392919061370e565b60405180910390a36118c060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461190381611af5565b61094b8383611fe1565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61193781611af5565b61193f611bec565b611947611c4a565b6001600160a01b03851661196e5760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d80600081146119bb576040519150601f19603f3d011682016040523d82523d6000602084013e6119c0565b606091505b50509050806119fb576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de090611a409086906004016136fb565b600060405180830381600087803b158015611a5a57600080fd5b505af1158015611a6e573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143634888888604051611abc949392919061370e565b60405180910390a350611aee60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610c3a81336127c6565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611be2576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611b983390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610776565b6000915050610776565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c48576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cc5576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611e2f57611cf66001600160a01b038316843084612853565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d869190613624565b611dbc576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611e1b57600080fd5b505af11580156118c0573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015611e92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb69190613624565b611eec576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610b17906001600160a01b038481169186911684612853565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060611f3a838361288c565b600080856001600160a01b0316348686604051611f58929190613745565b60006040518083038185875af1925050503d8060008114611f95576040519150601f19603f3d011682016040523d82523d6000602084013e611f9a565b606091505b509150915081611fd6576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611be2576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610776565b6060836001600160a01b031663676cc054348786866040518563ffffffff1660e01b81526004016120d893929190613755565b60006040518083038185885af11580156120f6573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261211f9190810190613780565b95945050505050565b612130612911565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061225157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166122457f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c48576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c5881611af5565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156122ed575060408051601f3d908101601f191682019092526122ea91810190613641565b60015b612333576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461238f576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161232a565b610b17838361296c565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612405573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fda9190613624565b6003546001600160a01b0390811690831603612578576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156124ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cf9190613624565b612505576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561256457600080fd5b505af1158015610f54573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156125db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ff9190613624565b612635576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610c58906001600160a01b03848116911683612752565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c48576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126b9611bec565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361219a565b611c486129c2565b61273a6129c2565b611c48612a29565b61274a6129c2565b611c48612a31565b6040516001600160a01b03838116602483015260448201839052610b1791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612a82565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610c58576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161232a565b6040516001600160a01b03848116602483015283811660448301526064820183905261094b9186918216906323b872dd9060840161277f565b60048110610c585781357f98933fac000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610b17576040517fed69977500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c48576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61297582612afe565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156129ba57610b178282612ba6565b610c58612c13565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c48576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f086129c2565b612a396129c2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6000612a976001600160a01b03841683612c4b565b90508051600014158015612abc575080806020019051810190612aba9190613624565b155b15610b17576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161232a565b806001600160a01b03163b600003612b4d576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161232a565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612bc391906137ee565b600060405180830381855af49150503d8060008114612bfe576040519150601f19603f3d011682016040523d82523d6000602084013e612c03565b606091505b509150915061211f858383612c59565b3415611c48576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611fda83836000612cce565b606082612c6e57612c6982612d84565b611fda565b8151158015612c8557506001600160a01b0384163b155b15612cc7576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161232a565b5080611fda565b606081471015612d0c576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161232a565b600080856001600160a01b03168486604051612d2891906137ee565b60006040518083038185875af1925050503d8060008114612d65576040519150601f19603f3d011682016040523d82523d6000602084013e612d6a565b606091505b5091509150612d7a868383612c59565b9695505050505050565b805115612d945780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612dd857600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611fda57600080fd5b80356001600160a01b0381168114612e1f57600080fd5b919050565b600060208284031215612e3657600080fd5b611fda82612e08565b600060a08284031215612e5157600080fd5b50919050565b60008060008060808587031215612e6d57600080fd5b612e7685612e08565b935060208501359250612e8b60408601612e08565b9150606085013567ffffffffffffffff811115612ea757600080fd5b612eb387828801612e3f565b91505092959194509250565b60008083601f840112612ed157600080fd5b50813567ffffffffffffffff811115612ee957600080fd5b602083019150836020828501011115612f0157600080fd5b9250929050565b60008060008060608587031215612f1e57600080fd5b612f2785612e08565b9350602085013567ffffffffffffffff811115612f4357600080fd5b612f4f87828801612ebf565b909450925050604085013567ffffffffffffffff811115612ea757600080fd5b600080600060408486031215612f8457600080fd5b612f8d84612e08565b9250602084013567ffffffffffffffff811115612fa957600080fd5b612fb586828701612ebf565b9497909650939450505050565b60005b83811015612fdd578181015183820152602001612fc5565b50506000910152565b60008151808452612ffe816020860160208601612fc2565b601f01601f19169290920160200192915050565b602081526000611fda6020830184612fe6565b60006020828403121561303757600080fd5b5035919050565b6000806040838503121561305157600080fd5b8235915061306160208401612e08565b90509250929050565b600080600080848603606081121561308157600080fd5b602081121561308f57600080fd5b5084935061309f60208601612e08565b9250604085013567ffffffffffffffff8111156130bb57600080fd5b6130c787828801612ebf565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561312b5761312b6130d3565b604052919050565b600067ffffffffffffffff82111561314d5761314d6130d3565b50601f01601f191660200190565b6000806040838503121561316e57600080fd5b61317783612e08565b9150602083013567ffffffffffffffff81111561319357600080fd5b8301601f810185136131a457600080fd5b80356131b76131b282613133565b613102565b8181528660208385010111156131cc57600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561320457600080fd5b61320d86612e08565b945061321b60208701612e08565b935060408601359250606086013567ffffffffffffffff81111561323e57600080fd5b61324a88828901612ebf565b969995985093965092949392505050565b6000806040838503121561326e57600080fd5b61327783612e08565b9150602083013567ffffffffffffffff81111561329357600080fd5b61329f85828601612e3f565b9150509250929050565b6000806000606084860312156132be57600080fd5b6132c784612e08565b92506132d560208501612e08565b91506132e360408501612e08565b90509250925092565b60008060008060008060a0878903121561330557600080fd5b61330e87612e08565b95506020870135945061332360408801612e08565b9350606087013567ffffffffffffffff81111561333f57600080fd5b61334b89828a01612ebf565b909450925050608087013567ffffffffffffffff81111561336b57600080fd5b61337789828a01612e3f565b9150509295509295509295565b600060608284031215612e5157600080fd5b60008060008060008060a087890312156133af57600080fd5b6133b887612e08565b95506133c660208801612e08565b945060408701359350606087013567ffffffffffffffff8111156133e957600080fd5b6133f589828a01612ebf565b909450925050608087013567ffffffffffffffff81111561341557600080fd5b61337789828a01613384565b6000806000806060858703121561343757600080fd5b61344085612e08565b9350602085013567ffffffffffffffff81111561345c57600080fd5b61346887828801612ebf565b909450925050604085013567ffffffffffffffff81111561348857600080fd5b612eb387828801613384565b8015158114610c3a57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126134d757600080fd5b830160208101925035905067ffffffffffffffff8111156134f757600080fd5b803603821315612f0157600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b0361354282612e08565b1682526000602082013561355581613494565b151560208401526001600160a01b0361357060408401612e08565b16604084015261358360608301836134a2565b60a0606086015261359860a086018284613506565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a06060820152600061211f60a0830184613531565b6040815260006135f8604083018587613506565b8281036020840152612d7a8185613531565b83815260406020820152600061211f604083018486613506565b60006020828403121561363657600080fd5b8151611fda81613494565b60006020828403121561365357600080fd5b5051919050565b8581526001600160a01b0385166020820152608060408201526000613683608083018587613506565b82810360608401526136958185613531565b98975050505050505050565b6001600160a01b036136b282612e08565b1682526000602082013567ffffffffffffffff81168082146136d357600080fd5b6020850152506136e660408301836134a2565b6060604086015261211f606086018284613506565b602081526000611fda60208301846136a1565b848152606060208201526000613728606083018587613506565b828103604084015261373a81856136a1565b979650505050505050565b8183823760009101908152919050565b6001600160a01b0361376685612e08565b16815260406020820152600061211f604083018486613506565b60006020828403121561379257600080fd5b815167ffffffffffffffff8111156137a957600080fd5b8201601f810184136137ba57600080fd5b80516137c86131b282613133565b8181528560208385010111156137dd57600080fd5b61211f826020830160208601612fc2565b60008251613800818460208701612fc2565b919091019291505056fea2646970667358221220aad6517765fb8e21f81460c24729c873d456d481d1e68f7e28f429cffe3ea75064736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161385a6100fd600039600081816122370152818161226001526126ce015261385a6000f3fe6080604052600436106101fe5760003560e01c806357bec62f1161011d578063a217fddf116100b0578063c0c53b8b1161007f578063d547741f11610064578063d547741f1461066f578063dda79b751461068f578063e63ab1e9146106af57600080fd5b8063c0c53b8b1461062f578063d09e3b781461064f57600080fd5b8063a217fddf1461057d578063a783c78914610592578063ad3cb1cc146105c6578063ae7a3a6f1461060f57600080fd5b8063726ac97c116100ec578063726ac97c146104dd578063744b9b8b146104f05780638456cb591461050357806391d148541461051857600080fd5b806357bec62f146104325780635b112591146104525780635c975abb146104725780635d62c860146104a957600080fd5b80632f2ff15d116101955780633f4ba83a116101645780633f4ba83a146103d55780634f1ef286146103ea5780635131ab59146103fd57806352d1902d1461041d57600080fd5b80632f2ff15d1461036257806336568abe1461038257806336c99f3b146103a257806338e22527146103c257600080fd5b80631becceb4116101d15780631becceb41461028d5780631cff79cd146102ad57806321e093b1146102cd578063248a9ca31461030557600080fd5b806301ffc9a71461020357806310188aef14610238578063102614b01461025a5780631b5ee25b1461027a575b600080fd5b34801561020f57600080fd5b5061022361021e366004612dc6565b6106e3565b60405190151581526020015b60405180910390f35b34801561024457600080fd5b50610258610253366004612e24565b61077c565b005b34801561026657600080fd5b50610258610275366004612e57565b610857565b610258610288366004612f1a565b610951565b34801561029957600080fd5b506102586102a8366004612f8d565b610b39565b6102c06102bb366004612ff4565b610bb7565b60405161022f9190613097565b3480156102d957600080fd5b506003546102ed906001600160a01b031681565b6040516001600160a01b03909116815260200161022f565b34801561031157600080fd5b506103546103203660046130aa565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161022f565b34801561036e57600080fd5b5061025861037d3660046130c3565b610c6f565b34801561038e57600080fd5b5061025861039d3660046130c3565b610cb3565b3480156103ae57600080fd5b506102586103bd3660046130ef565b610d04565b6102c06103d0366004613187565b610ead565b3480156103e157600080fd5b50610258610f99565b6102586103f8366004613278565b610fce565b34801561040957600080fd5b50610258610418366004613309565b610fed565b34801561042957600080fd5b506103546112ed565b34801561043e57600080fd5b506002546102ed906001600160a01b031681565b34801561045e57600080fd5b506001546102ed906001600160a01b031681565b34801561047e57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610223565b3480156104b557600080fd5b506103547f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6102586104eb366004613378565b61131c565b6102586104fe366004612f8d565b611494565b34801561050f57600080fd5b50610258611610565b34801561052457600080fd5b506102236105333660046130c3565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058957600080fd5b50610354600081565b34801561059e57600080fd5b506103547f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156105d257600080fd5b506102c06040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561061b57600080fd5b5061025861062a366004612e24565b611642565b34801561063b57600080fd5b5061025861064a3660046133c6565b61171d565b34801561065b57600080fd5b5061025861066a366004613409565b6119b9565b34801561067b57600080fd5b5061025861068a3660046130c3565b611ab1565b34801561069b57600080fd5b506000546102ed906001600160a01b031681565b3480156106bb57600080fd5b506103547f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061077657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061078781611af5565b6001600160a01b0382166107ae5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b0316156107f1576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61081b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611aff565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61085f611bec565b610867611c4a565b826000036108a1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166108c85760405163d92e233d60e01b815260040160405180910390fd5b6108d3338385611ccb565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c85858560405161091a939291906135ae565b60405180910390a361094b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61097b81611af5565b610983611bec565b61098b611c4a565b6001600160a01b0385166109b25760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d80600081146109ff576040519150601f19603f3d011682016040523d82523d6000602084013e610a04565b606091505b5050905080610a3f576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5ac1e0700000000000000000000000000000000000000000000000000000000081526001600160a01b03871690635ac1e07090610a84908690600401613658565b600060405180830381600087803b158015610a9e57600080fd5b505af1158015610ab2573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167ff196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b34888888604051610b00949392919061366b565b60405180910390a350610b3260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610b41611bec565b610b49611c4a565b6001600160a01b038416610b705760405163d92e233d60e01b815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97485858560405161091a939291906136a2565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610be381611af5565b610beb611bec565b6001600160a01b038516610c125760405163d92e233d60e01b815260040160405180910390fd5b6000610c1f868686611f2e565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546348787604051610c5e939291906136c8565b60405180910390a295945050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610ca981611af5565b61094b8383611aff565b6001600160a01b0381163314610cf5576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cff8282611fe1565b505050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610d2e81611af5565b610d36611bec565b610d3e611c4a565b84600003610d78576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616610d9f5760405163d92e233d60e01b815260040160405180910390fd5b610db36001600160a01b03881687876120a5565b6040517f5ac1e0700000000000000000000000000000000000000000000000000000000081526001600160a01b03871690635ac1e07090610df8908590600401613658565b600060405180830381600087803b158015610e1257600080fd5b505af1158015610e26573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167ff196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b87878787604051610e73949392919061366b565b60405180910390a3610ea460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ed981611af5565b610ee1611bec565b610ee9611c4a565b6001600160a01b038516610f105760405163d92e233d60e01b815260040160405180910390fd5b6060610f1e87878787612119565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610f5d939291906136c8565b60405180910390a29150610f9060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610fc381611af5565b610fcb61219c565b50565b610fd661222c565b610fdf826122fc565b610fe98282612307565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961101781611af5565b61101f611bec565b611027611c4a565b83600003611061576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0385166110885760405163d92e233d60e01b815260040160405180910390fd5b611092868661240d565b6110c8576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015611130573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115491906136e2565b61118a576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611195858484611f2e565b506111a0868661240d565b6111d6576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015611236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125a91906136ff565b9050801561126c5761126c878261249d565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b73828787876040516112b3939291906136c8565b60405180910390a3506112e560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60006112f76126c3565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b611324611bec565b61132c611c4a565b34600003611366576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661138d5760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146113da576040519150601f19603f3d011682016040523d82523d6000602084013e6113df565b606091505b505090508061141a576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600086604051611462939291906135ae565b60405180910390a350610fe960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61149c611bec565b6114a4611c4a565b346000036114de576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166115055760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611552576040519150601f19603f3d011682016040523d82523d6000602084013e611557565b606091505b5050905080611592576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008888886040516115de959493929190613718565b60405180910390a35061094b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61163a81611af5565b610fcb612725565b600061164d81611af5565b6001600160a01b0382166116745760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b0316156116b7576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116e17f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611aff565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117685750825b905060008267ffffffffffffffff1660011480156117855750303b155b905081158015611793575080155b156117ca576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561182b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061184857506001600160a01b038716155b156118665760405163d92e233d60e01b815260040160405180910390fd5b61186e61279e565b6118766127a6565b61187e61279e565b6118866127b6565b611891600087611aff565b506118bc7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611aff565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561191a7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611aff565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156119af5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b6119c1611bec565b6119c9611c4a565b84600003611a03576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611a2a5760405163d92e233d60e01b815260040160405180910390fd5b611a35338587611ccb565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8787878787604051611a80959493929190613718565b60405180910390a36112e560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611aeb81611af5565b61094b8383611fe1565b610fcb81336127c6565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611be2576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611b983390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610776565b6000915050610776565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c48576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cc5576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611e2f57611cf66001600160a01b038316843084612853565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8691906136e2565b611dbc576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611e1b57600080fd5b505af1158015610ea4573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015611e92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb691906136e2565b611eec576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610cff906001600160a01b038481169186911684612853565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060611f3a838361288c565b600080856001600160a01b0316348686604051611f5892919061375f565b60006040518083038185875af1925050503d8060008114611f95576040519150601f19603f3d011682016040523d82523d6000602084013e611f9a565b606091505b509150915081611fd6576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611be2576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610776565b6040516001600160a01b03838116602483015260448201839052610cff91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612911565b6060836001600160a01b031663676cc054348786866040518563ffffffff1660e01b815260040161214c9392919061376f565b60006040518083038185885af115801561216a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052612193919081019061379a565b95945050505050565b6121a461298d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806122c557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166122b97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c48576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610fe981611af5565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612361575060408051601f3d908101601f1916820190925261235e918101906136ff565b60015b6123a7576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612403576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161239e565b610cff83836129e8565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612479573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fda91906136e2565b6003546001600160a01b03908116908316036125ec576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561251f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254391906136e2565b612579576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156125d857600080fd5b505af11580156112e5573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561264f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267391906136e2565b6126a9576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610fe9906001600160a01b038481169116836120a5565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c48576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61272d611bec565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361220e565b611c48612a3e565b6127ae612a3e565b611c48612aa5565b6127be612a3e565b611c48612aad565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610fe9576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161239e565b6040516001600160a01b03848116602483015283811660448301526064820183905261094b9186918216906323b872dd906084016120d2565b60048110610fe95781357f98933fac000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610cff576040517fed69977500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006129266001600160a01b03841683612afe565b9050805160001415801561294b57508080602001905181019061294991906136e2565b155b15610cff576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161239e565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c48576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129f182612b0c565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612a3657610cff8282612bb4565b610fe9612c21565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c48576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f08612a3e565b612ab5612a3e565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6060611fda83836000612c59565b806001600160a01b03163b600003612b5b576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161239e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612bd19190613808565b600060405180830381855af49150503d8060008114612c0c576040519150601f19603f3d011682016040523d82523d6000602084013e612c11565b606091505b5091509150612193858383612d0f565b3415611c48576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081471015612c97576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161239e565b600080856001600160a01b03168486604051612cb39190613808565b60006040518083038185875af1925050503d8060008114612cf0576040519150601f19603f3d011682016040523d82523d6000602084013e612cf5565b606091505b5091509150612d05868383612d0f565b9695505050505050565b606082612d2457612d1f82612d84565b611fda565b8151158015612d3b57506001600160a01b0384163b155b15612d7d576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161239e565b5080611fda565b805115612d945780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612dd857600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611fda57600080fd5b80356001600160a01b0381168114612e1f57600080fd5b919050565b600060208284031215612e3657600080fd5b611fda82612e08565b600060a08284031215612e5157600080fd5b50919050565b60008060008060808587031215612e6d57600080fd5b612e7685612e08565b935060208501359250612e8b60408601612e08565b9150606085013567ffffffffffffffff811115612ea757600080fd5b612eb387828801612e3f565b91505092959194509250565b60008083601f840112612ed157600080fd5b50813567ffffffffffffffff811115612ee957600080fd5b602083019150836020828501011115612f0157600080fd5b9250929050565b600060808284031215612e5157600080fd5b60008060008060608587031215612f3057600080fd5b612f3985612e08565b9350602085013567ffffffffffffffff811115612f5557600080fd5b612f6187828801612ebf565b909450925050604085013567ffffffffffffffff811115612f8157600080fd5b612eb387828801612f08565b60008060008060608587031215612fa357600080fd5b612fac85612e08565b9350602085013567ffffffffffffffff811115612fc857600080fd5b612fd487828801612ebf565b909450925050604085013567ffffffffffffffff811115612ea757600080fd5b60008060006040848603121561300957600080fd5b61301284612e08565b9250602084013567ffffffffffffffff81111561302e57600080fd5b61303a86828701612ebf565b9497909650939450505050565b60005b8381101561306257818101518382015260200161304a565b50506000910152565b60008151808452613083816020860160208601613047565b601f01601f19169290920160200192915050565b602081526000611fda602083018461306b565b6000602082840312156130bc57600080fd5b5035919050565b600080604083850312156130d657600080fd5b823591506130e660208401612e08565b90509250929050565b60008060008060008060a0878903121561310857600080fd5b61311187612e08565b955061311f60208801612e08565b945060408701359350606087013567ffffffffffffffff81111561314257600080fd5b61314e89828a01612ebf565b909450925050608087013567ffffffffffffffff81111561316e57600080fd5b61317a89828a01612f08565b9150509295509295509295565b600080600080848603606081121561319e57600080fd5b60208112156131ac57600080fd5b508493506131bc60208601612e08565b9250604085013567ffffffffffffffff8111156131d857600080fd5b6131e487828801612ebf565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613248576132486131f0565b604052919050565b600067ffffffffffffffff82111561326a5761326a6131f0565b50601f01601f191660200190565b6000806040838503121561328b57600080fd5b61329483612e08565b9150602083013567ffffffffffffffff8111156132b057600080fd5b8301601f810185136132c157600080fd5b80356132d46132cf82613250565b61321f565b8181528660208385010111156132e957600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561332157600080fd5b61332a86612e08565b945061333860208701612e08565b935060408601359250606086013567ffffffffffffffff81111561335b57600080fd5b61336788828901612ebf565b969995985093965092949392505050565b6000806040838503121561338b57600080fd5b61339483612e08565b9150602083013567ffffffffffffffff8111156133b057600080fd5b6133bc85828601612e3f565b9150509250929050565b6000806000606084860312156133db57600080fd5b6133e484612e08565b92506133f260208501612e08565b915061340060408501612e08565b90509250925092565b60008060008060008060a0878903121561342257600080fd5b61342b87612e08565b95506020870135945061344060408801612e08565b9350606087013567ffffffffffffffff81111561345c57600080fd5b61346889828a01612ebf565b909450925050608087013567ffffffffffffffff81111561348857600080fd5b61317a89828a01612e3f565b8015158114610fcb57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126134d757600080fd5b830160208101925035905067ffffffffffffffff8111156134f757600080fd5b803603821315612f0157600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b0361354282612e08565b1682526000602082013561355581613494565b151560208401526001600160a01b0361357060408401612e08565b16604084015261358360608301836134a2565b60a0606086015261359860a086018284613506565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a06060820152600061219360a0830184613531565b6001600160a01b036135f582612e08565b1682526001600160a01b0361360c60208301612e08565b1660208301526000604082013567ffffffffffffffff811680821461363057600080fd5b60408501525061364360608301836134a2565b60806060860152612193608086018284613506565b602081526000611fda60208301846135e4565b848152606060208201526000613685606083018587613506565b828103604084015261369781856135e4565b979650505050505050565b6040815260006136b6604083018587613506565b8281036020840152612d058185613531565b838152604060208201526000612193604083018486613506565b6000602082840312156136f457600080fd5b8151611fda81613494565b60006020828403121561371157600080fd5b5051919050565b8581526001600160a01b0385166020820152608060408201526000613741608083018587613506565b82810360608401526137538185613531565b98975050505050505050565b8183823760009101908152919050565b6001600160a01b0361378085612e08565b168152604060208201526000612193604083018486613506565b6000602082840312156137ac57600080fd5b815167ffffffffffffffff8111156137c357600080fd5b8201601f810184136137d457600080fd5b80516137e26132cf82613250565b8181528560208385010111156137f757600080fd5b612193826020830160208601613047565b6000825161381a818460208701613047565b919091019291505056fea26469706673582212206b4ed273157abc30a8ae8438a103203505a4aeed9f8a7a8a88dada1a6225bf3c64736f6c634300081a0033"; type GatewayEVMUpgradeTestConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/GatewayEVM__factory.ts b/v2/types/factories/GatewayEVM__factory.ts index 98e7397b..b4289aac 100644 --- a/v2/types/factories/GatewayEVM__factory.ts +++ b/v2/types/factories/GatewayEVM__factory.ts @@ -434,6 +434,11 @@ const _abi = [ type: "tuple", internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -647,6 +652,11 @@ const _abi = [ type: "tuple", internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -1039,6 +1049,11 @@ const _abi = [ indexed: false, internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -1279,6 +1294,11 @@ const _abi = [ name: "NotAllowedToCallOnCall", inputs: [], }, + { + type: "error", + name: "NotAllowedToCallOnRevert", + inputs: [], + }, { type: "error", name: "NotInitializing", @@ -1329,7 +1349,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516138406100fd600039600081816121c3015281816121ec015261265a01526138406000f3fe6080604052600436106101fe5760003560e01c80635c975abb1161011d578063ad3cb1cc116100b0578063d0b492c31161007f578063dda79b7511610064578063dda79b751461067c578063e63ab1e91461069c578063f7ad60db146106d057600080fd5b8063d0b492c31461063c578063d547741f1461065c57600080fd5b8063ad3cb1cc14610593578063ae7a3a6f146105dc578063c0c53b8b146105fc578063d09e3b781461061c57600080fd5b80638456cb59116100ec5780638456cb59146104d057806391d14854146104e5578063a217fddf1461054a578063a783c7891461055f57600080fd5b80635c975abb1461043f5780635d62c86014610476578063726ac97c146104aa578063744b9b8b146104bd57600080fd5b806336568abe116101955780635131ab59116101645780635131ab59146103ca57806352d1902d146103ea57806357bec62f146103ff5780635b1125911461041f57600080fd5b806336568abe1461036f57806338e225271461038f5780633f4ba83a146103a25780634f1ef286146103b757600080fd5b80631cff79cd116101d15780631cff79cd1461029a57806321e093b1146102ba578063248a9ca3146102f25780632f2ff15d1461034f57600080fd5b806301ffc9a71461020357806310188aef14610238578063102614b01461025a5780631becceb41461027a575b600080fd5b34801561020f57600080fd5b5061022361021e366004612dc6565b6106e3565b60405190151581526020015b60405180910390f35b34801561024457600080fd5b50610258610253366004612e24565b61077c565b005b34801561026657600080fd5b50610258610275366004612e57565b610857565b34801561028657600080fd5b50610258610295366004612f08565b610951565b6102ad6102a8366004612f6f565b6109cf565b60405161022f9190613012565b3480156102c657600080fd5b506003546102da906001600160a01b031681565b6040516001600160a01b03909116815260200161022f565b3480156102fe57600080fd5b5061034161030d366004613025565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161022f565b34801561035b57600080fd5b5061025861036a36600461303e565b610a87565b34801561037b57600080fd5b5061025861038a36600461303e565b610acb565b6102ad61039d36600461306a565b610b1c565b3480156103ae57600080fd5b50610258610c08565b6102586103c536600461315b565b610c3d565b3480156103d657600080fd5b506102586103e53660046131ec565b610c5c565b3480156103f657600080fd5b50610341610f5c565b34801561040b57600080fd5b506002546102da906001600160a01b031681565b34801561042b57600080fd5b506001546102da906001600160a01b031681565b34801561044b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610223565b34801561048257600080fd5b506103417f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6102586104b836600461325b565b610f8b565b6102586104cb366004612f08565b611103565b3480156104dc57600080fd5b5061025861127f565b3480156104f157600080fd5b5061022361050036600461303e565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561055657600080fd5b50610341600081565b34801561056b57600080fd5b506103417f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561059f57600080fd5b506102ad6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b3480156105e857600080fd5b506102586105f7366004612e24565b6112b1565b34801561060857600080fd5b506102586106173660046132a9565b61138c565b34801561062857600080fd5b506102586106373660046132ec565b611628565b34801561064857600080fd5b50610258610657366004613396565b611720565b34801561066857600080fd5b5061025861067736600461303e565b6118c9565b34801561068857600080fd5b506000546102da906001600160a01b031681565b3480156106a857600080fd5b506103417f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102586106de366004613421565b61190d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061077657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061078781611af5565b6001600160a01b0382166107ae5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b0316156107f1576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61081b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611aff565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61085f611bec565b610867611c4a565b826000036108a1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166108c85760405163d92e233d60e01b815260040160405180910390fd5b6108d3338385611ccb565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c85858560405161091a939291906135ae565b60405180910390a361094b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b610959611bec565b610961611c4a565b6001600160a01b0384166109885760405163d92e233d60e01b815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97485858560405161091a939291906135e4565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109fb81611af5565b610a03611bec565b6001600160a01b038516610a2a5760405163d92e233d60e01b815260040160405180910390fd5b6000610a37868686611f2e565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610a769392919061360a565b60405180910390a295945050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610ac181611af5565b61094b8383611aff565b6001600160a01b0381163314610b0d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b178282611fe1565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b4881611af5565b610b50611bec565b610b58611c4a565b6001600160a01b038516610b7f5760405163d92e233d60e01b815260040160405180910390fd5b6060610b8d878787876120a5565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610bcc9392919061360a565b60405180910390a29150610bff60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c3281611af5565b610c3a612128565b50565b610c456121b8565b610c4e82612288565b610c588282612293565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610c8681611af5565b610c8e611bec565b610c96611c4a565b83600003610cd0576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610cf75760405163d92e233d60e01b815260040160405180910390fd5b610d018686612399565b610d37576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc39190613624565b610df9576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e04858484611f2e565b50610e0f8686612399565b610e45576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610ea5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec99190613641565b90508015610edb57610edb8782612429565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382878787604051610f229392919061360a565b60405180910390a350610f5460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000610f6661264f565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610f93611bec565b610f9b611c4a565b34600003610fd5576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610ffc5760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611049576040519150601f19603f3d011682016040523d82523d6000602084013e61104e565b606091505b5050905080611089576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c346000866040516110d1939291906135ae565b60405180910390a350610c5860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61110b611bec565b611113611c4a565b3460000361114d576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166111745760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146111c1576040519150601f19603f3d011682016040523d82523d6000602084013e6111c6565b606091505b5050905080611201576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600088888860405161124d95949392919061365a565b60405180910390a35061094b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6112a981611af5565b610c3a6126b1565b60006112bc81611af5565b6001600160a01b0382166112e35760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b031615611326576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113507f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611aff565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113d75750825b905060008267ffffffffffffffff1660011480156113f45750303b155b905081158015611402575080155b15611439576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561149a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b03881615806114b757506001600160a01b038716155b156114d55760405163d92e233d60e01b815260040160405180910390fd5b6114dd61272a565b6114e5612732565b6114ed61272a565b6114f5612742565b611500600087611aff565b5061152b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611aff565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a161790556115897f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611aff565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038916179055831561161e5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b611630611bec565b611638611c4a565b84600003611672576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166116995760405163d92e233d60e01b815260040160405180910390fd5b6116a4338587611ccb565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c87878787876040516116ef95949392919061365a565b60405180910390a3610f5460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961174a81611af5565b611752611bec565b61175a611c4a565b84600003611794576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166117bb5760405163d92e233d60e01b815260040160405180910390fd5b6117cf6001600160a01b0388168787612752565b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de0906118149085906004016136fb565b600060405180830381600087803b15801561182e57600080fd5b505af1158015611842573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b14368787878760405161188f949392919061370e565b60405180910390a36118c060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461190381611af5565b61094b8383611fe1565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61193781611af5565b61193f611bec565b611947611c4a565b6001600160a01b03851661196e5760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d80600081146119bb576040519150601f19603f3d011682016040523d82523d6000602084013e6119c0565b606091505b50509050806119fb576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063660b9de090611a409086906004016136fb565b600060405180830381600087803b158015611a5a57600080fd5b505af1158015611a6e573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167f1647880d5adf27692c774debf932b888ba15381ed4c4115a9eafeb68080b143634888888604051611abc949392919061370e565b60405180910390a350611aee60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610c3a81336127c6565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611be2576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611b983390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610776565b6000915050610776565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c48576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cc5576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611e2f57611cf66001600160a01b038316843084612853565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d869190613624565b611dbc576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611e1b57600080fd5b505af11580156118c0573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015611e92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb69190613624565b611eec576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610b17906001600160a01b038481169186911684612853565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060611f3a838361288c565b600080856001600160a01b0316348686604051611f58929190613745565b60006040518083038185875af1925050503d8060008114611f95576040519150601f19603f3d011682016040523d82523d6000602084013e611f9a565b606091505b509150915081611fd6576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611be2576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610776565b6060836001600160a01b031663676cc054348786866040518563ffffffff1660e01b81526004016120d893929190613755565b60006040518083038185885af11580156120f6573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261211f9190810190613780565b95945050505050565b612130612911565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061225157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166122457f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c48576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c5881611af5565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156122ed575060408051601f3d908101601f191682019092526122ea91810190613641565b60015b612333576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461238f576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161232a565b610b17838361296c565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612405573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fda9190613624565b6003546001600160a01b0390811690831603612578576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156124ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cf9190613624565b612505576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561256457600080fd5b505af1158015610f54573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156125db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ff9190613624565b612635576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610c58906001600160a01b03848116911683612752565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c48576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126b9611bec565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361219a565b611c486129c2565b61273a6129c2565b611c48612a29565b61274a6129c2565b611c48612a31565b6040516001600160a01b03838116602483015260448201839052610b1791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612a82565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610c58576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161232a565b6040516001600160a01b03848116602483015283811660448301526064820183905261094b9186918216906323b872dd9060840161277f565b60048110610c585781357f98933fac000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610b17576040517fed69977500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c48576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61297582612afe565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156129ba57610b178282612ba6565b610c58612c13565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c48576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f086129c2565b612a396129c2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6000612a976001600160a01b03841683612c4b565b90508051600014158015612abc575080806020019051810190612aba9190613624565b155b15610b17576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161232a565b806001600160a01b03163b600003612b4d576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161232a565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612bc391906137ee565b600060405180830381855af49150503d8060008114612bfe576040519150601f19603f3d011682016040523d82523d6000602084013e612c03565b606091505b509150915061211f858383612c59565b3415611c48576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611fda83836000612cce565b606082612c6e57612c6982612d84565b611fda565b8151158015612c8557506001600160a01b0384163b155b15612cc7576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161232a565b5080611fda565b606081471015612d0c576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161232a565b600080856001600160a01b03168486604051612d2891906137ee565b60006040518083038185875af1925050503d8060008114612d65576040519150601f19603f3d011682016040523d82523d6000602084013e612d6a565b606091505b5091509150612d7a868383612c59565b9695505050505050565b805115612d945780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612dd857600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611fda57600080fd5b80356001600160a01b0381168114612e1f57600080fd5b919050565b600060208284031215612e3657600080fd5b611fda82612e08565b600060a08284031215612e5157600080fd5b50919050565b60008060008060808587031215612e6d57600080fd5b612e7685612e08565b935060208501359250612e8b60408601612e08565b9150606085013567ffffffffffffffff811115612ea757600080fd5b612eb387828801612e3f565b91505092959194509250565b60008083601f840112612ed157600080fd5b50813567ffffffffffffffff811115612ee957600080fd5b602083019150836020828501011115612f0157600080fd5b9250929050565b60008060008060608587031215612f1e57600080fd5b612f2785612e08565b9350602085013567ffffffffffffffff811115612f4357600080fd5b612f4f87828801612ebf565b909450925050604085013567ffffffffffffffff811115612ea757600080fd5b600080600060408486031215612f8457600080fd5b612f8d84612e08565b9250602084013567ffffffffffffffff811115612fa957600080fd5b612fb586828701612ebf565b9497909650939450505050565b60005b83811015612fdd578181015183820152602001612fc5565b50506000910152565b60008151808452612ffe816020860160208601612fc2565b601f01601f19169290920160200192915050565b602081526000611fda6020830184612fe6565b60006020828403121561303757600080fd5b5035919050565b6000806040838503121561305157600080fd5b8235915061306160208401612e08565b90509250929050565b600080600080848603606081121561308157600080fd5b602081121561308f57600080fd5b5084935061309f60208601612e08565b9250604085013567ffffffffffffffff8111156130bb57600080fd5b6130c787828801612ebf565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561312b5761312b6130d3565b604052919050565b600067ffffffffffffffff82111561314d5761314d6130d3565b50601f01601f191660200190565b6000806040838503121561316e57600080fd5b61317783612e08565b9150602083013567ffffffffffffffff81111561319357600080fd5b8301601f810185136131a457600080fd5b80356131b76131b282613133565b613102565b8181528660208385010111156131cc57600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561320457600080fd5b61320d86612e08565b945061321b60208701612e08565b935060408601359250606086013567ffffffffffffffff81111561323e57600080fd5b61324a88828901612ebf565b969995985093965092949392505050565b6000806040838503121561326e57600080fd5b61327783612e08565b9150602083013567ffffffffffffffff81111561329357600080fd5b61329f85828601612e3f565b9150509250929050565b6000806000606084860312156132be57600080fd5b6132c784612e08565b92506132d560208501612e08565b91506132e360408501612e08565b90509250925092565b60008060008060008060a0878903121561330557600080fd5b61330e87612e08565b95506020870135945061332360408801612e08565b9350606087013567ffffffffffffffff81111561333f57600080fd5b61334b89828a01612ebf565b909450925050608087013567ffffffffffffffff81111561336b57600080fd5b61337789828a01612e3f565b9150509295509295509295565b600060608284031215612e5157600080fd5b60008060008060008060a087890312156133af57600080fd5b6133b887612e08565b95506133c660208801612e08565b945060408701359350606087013567ffffffffffffffff8111156133e957600080fd5b6133f589828a01612ebf565b909450925050608087013567ffffffffffffffff81111561341557600080fd5b61337789828a01613384565b6000806000806060858703121561343757600080fd5b61344085612e08565b9350602085013567ffffffffffffffff81111561345c57600080fd5b61346887828801612ebf565b909450925050604085013567ffffffffffffffff81111561348857600080fd5b612eb387828801613384565b8015158114610c3a57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126134d757600080fd5b830160208101925035905067ffffffffffffffff8111156134f757600080fd5b803603821315612f0157600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b0361354282612e08565b1682526000602082013561355581613494565b151560208401526001600160a01b0361357060408401612e08565b16604084015261358360608301836134a2565b60a0606086015261359860a086018284613506565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a06060820152600061211f60a0830184613531565b6040815260006135f8604083018587613506565b8281036020840152612d7a8185613531565b83815260406020820152600061211f604083018486613506565b60006020828403121561363657600080fd5b8151611fda81613494565b60006020828403121561365357600080fd5b5051919050565b8581526001600160a01b0385166020820152608060408201526000613683608083018587613506565b82810360608401526136958185613531565b98975050505050505050565b6001600160a01b036136b282612e08565b1682526000602082013567ffffffffffffffff81168082146136d357600080fd5b6020850152506136e660408301836134a2565b6060604086015261211f606086018284613506565b602081526000611fda60208301846136a1565b848152606060208201526000613728606083018587613506565b828103604084015261373a81856136a1565b979650505050505050565b8183823760009101908152919050565b6001600160a01b0361376685612e08565b16815260406020820152600061211f604083018486613506565b60006020828403121561379257600080fd5b815167ffffffffffffffff8111156137a957600080fd5b8201601f810184136137ba57600080fd5b80516137c86131b282613133565b8181528560208385010111156137dd57600080fd5b61211f826020830160208601612fc2565b60008251613800818460208701612fc2565b919091019291505056fea2646970667358221220fd3e928df264198521d0a241d1203b956a98fb9c29f4bda5117d3f46e4e8247e64736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516138d56100fd600039600081816122370152818161226001526126ce01526138d56000f3fe6080604052600436106101fe5760003560e01c806357bec62f1161011d578063a217fddf116100b0578063c0c53b8b1161007f578063d547741f11610064578063d547741f1461066f578063dda79b751461068f578063e63ab1e9146106af57600080fd5b8063c0c53b8b1461062f578063d09e3b781461064f57600080fd5b8063a217fddf1461057d578063a783c78914610592578063ad3cb1cc146105c6578063ae7a3a6f1461060f57600080fd5b8063726ac97c116100ec578063726ac97c146104dd578063744b9b8b146104f05780638456cb591461050357806391d148541461051857600080fd5b806357bec62f146104325780635b112591146104525780635c975abb146104725780635d62c860146104a957600080fd5b80632f2ff15d116101955780633f4ba83a116101645780633f4ba83a146103d55780634f1ef286146103ea5780635131ab59146103fd57806352d1902d1461041d57600080fd5b80632f2ff15d1461036257806336568abe1461038257806336c99f3b146103a257806338e22527146103c257600080fd5b80631becceb4116101d15780631becceb41461028d5780631cff79cd146102ad57806321e093b1146102cd578063248a9ca31461030557600080fd5b806301ffc9a71461020357806310188aef14610238578063102614b01461025a5780631b5ee25b1461027a575b600080fd5b34801561020f57600080fd5b5061022361021e366004612e41565b6106e3565b60405190151581526020015b60405180910390f35b34801561024457600080fd5b50610258610253366004612e9f565b61077c565b005b34801561026657600080fd5b50610258610275366004612ed2565b610857565b610258610288366004612f95565b610951565b34801561029957600080fd5b506102586102a8366004613008565b610b39565b6102c06102bb36600461306f565b610bb7565b60405161022f9190613112565b3480156102d957600080fd5b506003546102ed906001600160a01b031681565b6040516001600160a01b03909116815260200161022f565b34801561031157600080fd5b50610354610320366004613125565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161022f565b34801561036e57600080fd5b5061025861037d36600461313e565b610c6f565b34801561038e57600080fd5b5061025861039d36600461313e565b610cb3565b3480156103ae57600080fd5b506102586103bd36600461316a565b610d04565b6102c06103d0366004613202565b610ead565b3480156103e157600080fd5b50610258610f99565b6102586103f83660046132f3565b610fce565b34801561040957600080fd5b50610258610418366004613384565b610fed565b34801561042957600080fd5b506103546112ed565b34801561043e57600080fd5b506002546102ed906001600160a01b031681565b34801561045e57600080fd5b506001546102ed906001600160a01b031681565b34801561047e57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610223565b3480156104b557600080fd5b506103547f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6102586104eb3660046133f3565b61131c565b6102586104fe366004613008565b611494565b34801561050f57600080fd5b50610258611610565b34801561052457600080fd5b5061022361053336600461313e565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058957600080fd5b50610354600081565b34801561059e57600080fd5b506103547f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156105d257600080fd5b506102c06040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561061b57600080fd5b5061025861062a366004612e9f565b611642565b34801561063b57600080fd5b5061025861064a366004613441565b61171d565b34801561065b57600080fd5b5061025861066a366004613484565b6119b9565b34801561067b57600080fd5b5061025861068a36600461313e565b611ab1565b34801561069b57600080fd5b506000546102ed906001600160a01b031681565b3480156106bb57600080fd5b506103547f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061077657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061078781611af5565b6001600160a01b0382166107ae5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b0316156107f1576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61081b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611aff565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61085f611bec565b610867611c4a565b826000036108a1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166108c85760405163d92e233d60e01b815260040160405180910390fd5b6108d3338385611ccb565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c85858560405161091a93929190613629565b60405180910390a361094b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61097b81611af5565b610983611bec565b61098b611c4a565b6001600160a01b0385166109b25760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d80600081146109ff576040519150601f19603f3d011682016040523d82523d6000602084013e610a04565b606091505b5050905080610a3f576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5ac1e0700000000000000000000000000000000000000000000000000000000081526001600160a01b03871690635ac1e07090610a849086906004016136d3565b600060405180830381600087803b158015610a9e57600080fd5b505af1158015610ab2573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167ff196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b34888888604051610b0094939291906136e6565b60405180910390a350610b3260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b610b41611bec565b610b49611c4a565b6001600160a01b038416610b705760405163d92e233d60e01b815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97485858560405161091a9392919061371d565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610be381611af5565b610beb611bec565b6001600160a01b038516610c125760405163d92e233d60e01b815260040160405180910390fd5b6000610c1f868686611f2e565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610c5e93929190613743565b60405180910390a295945050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610ca981611af5565b61094b8383611aff565b6001600160a01b0381163314610cf5576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cff8282611fe1565b505050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610d2e81611af5565b610d36611bec565b610d3e611c4a565b84600003610d78576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616610d9f5760405163d92e233d60e01b815260040160405180910390fd5b610db36001600160a01b03881687876120a5565b6040517f5ac1e0700000000000000000000000000000000000000000000000000000000081526001600160a01b03871690635ac1e07090610df89085906004016136d3565b600060405180830381600087803b158015610e1257600080fd5b505af1158015610e26573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167ff196c7207ed90b5ece8dbf4d77864a91b1ccca28fe83e005b4969d7584b2b19b87878787604051610e7394939291906136e6565b60405180910390a3610ea460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610ed981611af5565b610ee1611bec565b610ee9611c4a565b6001600160a01b038516610f105760405163d92e233d60e01b815260040160405180910390fd5b6060610f1e87878787612119565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610f5d93929190613743565b60405180910390a29150610f9060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610fc381611af5565b610fcb61219c565b50565b610fd661222c565b610fdf826122fc565b610fe98282612307565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961101781611af5565b61101f611bec565b611027611c4a565b83600003611061576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0385166110885760405163d92e233d60e01b815260040160405180910390fd5b611092868661240d565b6110c8576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015611130573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611154919061375d565b61118a576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611195858484611f2e565b506111a0868661240d565b6111d6576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015611236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125a919061377a565b9050801561126c5761126c878261249d565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b73828787876040516112b393929190613743565b60405180910390a3506112e560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60006112f76126c3565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b611324611bec565b61132c611c4a565b34600003611366576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661138d5760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146113da576040519150601f19603f3d011682016040523d82523d6000602084013e6113df565b606091505b505090508061141a576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008660405161146293929190613629565b60405180910390a350610fe960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61149c611bec565b6114a4611c4a565b346000036114de576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166115055760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611552576040519150601f19603f3d011682016040523d82523d6000602084013e611557565b606091505b5050905080611592576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008888886040516115de959493929190613793565b60405180910390a35061094b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61163a81611af5565b610fcb612725565b600061164d81611af5565b6001600160a01b0382166116745760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b0316156116b7576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116e17f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611aff565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117685750825b905060008267ffffffffffffffff1660011480156117855750303b155b905081158015611793575080155b156117ca576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561182b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061184857506001600160a01b038716155b156118665760405163d92e233d60e01b815260040160405180910390fd5b61186e61279e565b6118766127a6565b61187e61279e565b6118866127b6565b611891600087611aff565b506118bc7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611aff565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561191a7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611aff565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156119af5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b6119c1611bec565b6119c9611c4a565b84600003611a03576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611a2a5760405163d92e233d60e01b815260040160405180910390fd5b611a35338587611ccb565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8787878787604051611a80959493929190613793565b60405180910390a36112e560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611aeb81611af5565b61094b8383611fe1565b610fcb81336127c6565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611be2576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611b983390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610776565b6000915050610776565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c48576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cc5576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611e2f57611cf66001600160a01b038316843084612853565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611d62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d86919061375d565b611dbc576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611e1b57600080fd5b505af1158015610ea4573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015611e92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb6919061375d565b611eec576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610cff906001600160a01b038481169186911684612853565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060611f3a838361288c565b600080856001600160a01b0316348686604051611f589291906137da565b60006040518083038185875af1925050503d8060008114611f95576040519150601f19603f3d011682016040523d82523d6000602084013e611f9a565b606091505b509150915081611fd6576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611be2576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610776565b6040516001600160a01b03838116602483015260448201839052610cff91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061298c565b6060836001600160a01b031663676cc054348786866040518563ffffffff1660e01b815260040161214c939291906137ea565b60006040518083038185885af115801561216a573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526121939190810190613815565b95945050505050565b6121a4612a08565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806122c557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166122b97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c48576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610fe981611af5565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612361575060408051601f3d908101601f1916820190925261235e9181019061377a565b60015b6123a7576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612403576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161239e565b610cff8383612a63565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612479573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fda919061375d565b6003546001600160a01b03908116908316036125ec576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af115801561251f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612543919061375d565b612579576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b1580156125d857600080fd5b505af11580156112e5573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561264f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612673919061375d565b6126a9576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610fe9906001600160a01b038481169116836120a5565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c48576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61272d611bec565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361220e565b611c48612ab9565b6127ae612ab9565b611c48612b20565b6127be612ab9565b611c48612b28565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610fe9576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161239e565b6040516001600160a01b03848116602483015283811660448301526064820183905261094b9186918216906323b872dd906084016120d2565b60048110610fe95781357f98933fac000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601612911576040517fed69977500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa53e1f90000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610cff576040517ff3459a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006129a16001600160a01b03841683612b79565b905080516000141580156129c65750808060200190518101906129c4919061375d565b155b15610cff576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161239e565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c48576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a6c82612b87565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612ab157610cff8282612c2f565b610fe9612c9c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c48576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f08612ab9565b612b30612ab9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6060611fda83836000612cd4565b806001600160a01b03163b600003612bd6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161239e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612c4c9190613883565b600060405180830381855af49150503d8060008114612c87576040519150601f19603f3d011682016040523d82523d6000602084013e612c8c565b606091505b5091509150612193858383612d8a565b3415611c48576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081471015612d12576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161239e565b600080856001600160a01b03168486604051612d2e9190613883565b60006040518083038185875af1925050503d8060008114612d6b576040519150601f19603f3d011682016040523d82523d6000602084013e612d70565b606091505b5091509150612d80868383612d8a565b9695505050505050565b606082612d9f57612d9a82612dff565b611fda565b8151158015612db657506001600160a01b0384163b155b15612df8576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161239e565b5080611fda565b805115612e0f5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612e5357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611fda57600080fd5b80356001600160a01b0381168114612e9a57600080fd5b919050565b600060208284031215612eb157600080fd5b611fda82612e83565b600060a08284031215612ecc57600080fd5b50919050565b60008060008060808587031215612ee857600080fd5b612ef185612e83565b935060208501359250612f0660408601612e83565b9150606085013567ffffffffffffffff811115612f2257600080fd5b612f2e87828801612eba565b91505092959194509250565b60008083601f840112612f4c57600080fd5b50813567ffffffffffffffff811115612f6457600080fd5b602083019150836020828501011115612f7c57600080fd5b9250929050565b600060808284031215612ecc57600080fd5b60008060008060608587031215612fab57600080fd5b612fb485612e83565b9350602085013567ffffffffffffffff811115612fd057600080fd5b612fdc87828801612f3a565b909450925050604085013567ffffffffffffffff811115612ffc57600080fd5b612f2e87828801612f83565b6000806000806060858703121561301e57600080fd5b61302785612e83565b9350602085013567ffffffffffffffff81111561304357600080fd5b61304f87828801612f3a565b909450925050604085013567ffffffffffffffff811115612f2257600080fd5b60008060006040848603121561308457600080fd5b61308d84612e83565b9250602084013567ffffffffffffffff8111156130a957600080fd5b6130b586828701612f3a565b9497909650939450505050565b60005b838110156130dd5781810151838201526020016130c5565b50506000910152565b600081518084526130fe8160208601602086016130c2565b601f01601f19169290920160200192915050565b602081526000611fda60208301846130e6565b60006020828403121561313757600080fd5b5035919050565b6000806040838503121561315157600080fd5b8235915061316160208401612e83565b90509250929050565b60008060008060008060a0878903121561318357600080fd5b61318c87612e83565b955061319a60208801612e83565b945060408701359350606087013567ffffffffffffffff8111156131bd57600080fd5b6131c989828a01612f3a565b909450925050608087013567ffffffffffffffff8111156131e957600080fd5b6131f589828a01612f83565b9150509295509295509295565b600080600080848603606081121561321957600080fd5b602081121561322757600080fd5b5084935061323760208601612e83565b9250604085013567ffffffffffffffff81111561325357600080fd5b61325f87828801612f3a565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156132c3576132c361326b565b604052919050565b600067ffffffffffffffff8211156132e5576132e561326b565b50601f01601f191660200190565b6000806040838503121561330657600080fd5b61330f83612e83565b9150602083013567ffffffffffffffff81111561332b57600080fd5b8301601f8101851361333c57600080fd5b803561334f61334a826132cb565b61329a565b81815286602083850101111561336457600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561339c57600080fd5b6133a586612e83565b94506133b360208701612e83565b935060408601359250606086013567ffffffffffffffff8111156133d657600080fd5b6133e288828901612f3a565b969995985093965092949392505050565b6000806040838503121561340657600080fd5b61340f83612e83565b9150602083013567ffffffffffffffff81111561342b57600080fd5b61343785828601612eba565b9150509250929050565b60008060006060848603121561345657600080fd5b61345f84612e83565b925061346d60208501612e83565b915061347b60408501612e83565b90509250925092565b60008060008060008060a0878903121561349d57600080fd5b6134a687612e83565b9550602087013594506134bb60408801612e83565b9350606087013567ffffffffffffffff8111156134d757600080fd5b6134e389828a01612f3a565b909450925050608087013567ffffffffffffffff81111561350357600080fd5b6131f589828a01612eba565b8015158114610fcb57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261355257600080fd5b830160208101925035905067ffffffffffffffff81111561357257600080fd5b803603821315612f7c57600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b036135bd82612e83565b168252600060208201356135d08161350f565b151560208401526001600160a01b036135eb60408401612e83565b1660408401526135fe606083018361351d565b60a0606086015261361360a086018284613581565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a06060820152600061219360a08301846135ac565b6001600160a01b0361367082612e83565b1682526001600160a01b0361368760208301612e83565b1660208301526000604082013567ffffffffffffffff81168082146136ab57600080fd5b6040850152506136be606083018361351d565b60806060860152612193608086018284613581565b602081526000611fda602083018461365f565b848152606060208201526000613700606083018587613581565b8281036040840152613712818561365f565b979650505050505050565b604081526000613731604083018587613581565b8281036020840152612d8081856135ac565b838152604060208201526000612193604083018486613581565b60006020828403121561376f57600080fd5b8151611fda8161350f565b60006020828403121561378c57600080fd5b5051919050565b8581526001600160a01b03851660208201526080604082015260006137bc608083018587613581565b82810360608401526137ce81856135ac565b98975050505050505050565b8183823760009101908152919050565b6001600160a01b036137fb85612e83565b168152604060208201526000612193604083018486613581565b60006020828403121561382757600080fd5b815167ffffffffffffffff81111561383e57600080fd5b8201601f8101841361384f57600080fd5b805161385d61334a826132cb565b81815285602083850101111561387257600080fd5b6121938260208301602086016130c2565b600082516138958184602087016130c2565b919091019291505056fea2646970667358221220b9b9841605fcf6973c8fbe9f339eac1c8e9b9903f4718806936530d8ec8337a264736f6c634300081a0033"; type GatewayEVMConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/GatewayZEVM__factory.ts b/v2/types/factories/GatewayZEVM__factory.ts index e089cd9c..a85f2d5c 100644 --- a/v2/types/factories/GatewayZEVM__factory.ts +++ b/v2/types/factories/GatewayZEVM__factory.ts @@ -347,6 +347,11 @@ const _abi = [ type: "tuple", internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -432,6 +437,11 @@ const _abi = [ type: "tuple", internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -1524,7 +1534,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613f266100fd6000396000818161282c015281816128550152612a2b0152613f266000f3fe6080604052600436106101dc5760003560e01c80634f1ef2861161010257806397a1cef111610095578063c39aca3711610064578063c39aca3714610681578063d547741f146106a1578063e63ab1e9146106c1578063f45346dc146106f557600080fd5b806397a1cef1146105d6578063a217fddf146105f6578063ad3cb1cc1461060b578063bcf7f32b1461066157600080fd5b80637b15118b116100d15780637b15118b1461051c5780637c0dcb5f1461053c5780638456cb591461055c57806391d148541461057157600080fd5b80634f1ef2861461049d57806352d1902d146104b05780635c975abb146104c5578063717d335f146104fc57600080fd5b8063248a9ca31161017a57806336568abe1161014957806336568abe146104285780633b283933146104485780633f4ba83a14610468578063485cc9551461047d57600080fd5b8063248a9ca3146103635780632722feee146103c05780632810ae63146103e85780632f2ff15d1461040857600080fd5b806306cb8983116101b657806306cb8983146102cb5780631cb5ea75146102eb57806321501a951461030b57806321e093b11461032b57600080fd5b806301ffc9a7146102565780630310eb761461028b578063048ae42c146102ab57600080fd5b36610251576101e9610715565b6000546001600160a01b0316331480159061021857503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561024f576040517fb3af013700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561026257600080fd5b50610276610271366004612f74565b610773565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b5061024f6102a6366004612fe3565b61080c565b3480156102b757600080fd5b5061024f6102c6366004613186565b610a7f565b3480156102d757600080fd5b5061024f6102e6366004613258565b610bf2565b3480156102f757600080fd5b5061024f610306366004613316565b610c57565b34801561031757600080fd5b5061024f6103263660046133b2565b610c90565b34801561033757600080fd5b5060005461034b906001600160a01b031681565b6040516001600160a01b039091168152602001610282565b34801561036f57600080fd5b506103b261037e36600461343e565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610282565b3480156103cc57600080fd5b5061034b73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103f457600080fd5b5061024f610403366004613457565b610e44565b34801561041457600080fd5b5061024f6104233660046134fc565b610f4e565b34801561043457600080fd5b5061024f6104433660046134fc565b610f98565b34801561045457600080fd5b5061024f61046336600461352c565b610fe9565b34801561047457600080fd5b5061024f611107565b34801561048957600080fd5b5061024f6104983660046135bf565b61113c565b61024f6104ab3660046135ed565b611378565b3480156104bc57600080fd5b506103b2611397565b3480156104d157600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610276565b34801561050857600080fd5b5061024f61051736600461363d565b6113c6565b34801561052857600080fd5b5061024f610537366004613683565b6114b5565b34801561054857600080fd5b5061024f6105573660046136f5565b6115dd565b34801561056857600080fd5b5061024f6117a7565b34801561057d57600080fd5b5061027661058c3660046134fc565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105e257600080fd5b5061024f6105f136600461376e565b6117d9565b34801561060257600080fd5b506103b2600081565b34801561061757600080fd5b506106546040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102829190613840565b34801561066d57600080fd5b5061024f61067c366004613853565b6118f3565b34801561068d57600080fd5b5061024f61069c366004613853565b611a0a565b3480156106ad57600080fd5b5061024f6106bc3660046134fc565b611c00565b3480156106cd57600080fd5b506103b27f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561070157600080fd5b5061024f6107103660046138f1565b611c44565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610771576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061080657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610859576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610861610715565b6001600160a01b038416158061087e57506001600160a01b038216155b1561089c5760405163d92e233d60e01b815260040160405180910390fd5b826000036108d6576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab148061090957506001600160a01b03821630145b15610940576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af11580156109a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cc9190613941565b610a02576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de090610a47908490600401613a0b565b600060405180830381600087803b158015610a6157600080fd5b505af1158015610a75573d6000803e3d6000fd5b5050505050505050565b610a87611e3a565b610a8f610715565b8651600003610ab15760405163d92e233d60e01b815260040160405180910390fd5b85600003610aeb576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610af8878785611ebb565b90506000336001600160a01b03167f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8d9190613a71565b6040805180820182528c8152600160208201529051610bb79695949392918f918f91908e90613b0b565b60405180910390a350610be960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610bfa611e3a565b610c02610715565b610c2686868686610c1836889003880188613b8d565b610c2187613be5565b6121be565b610c4f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b610c5f611e3a565b610c67610715565b610c268686868660405180604001604052808881526020016001151581525086610c2190613be5565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610cdd576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ce5610715565b6001600160a01b038316610d0c5760405163d92e233d60e01b815260040160405180910390fd5b83600003610d46576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480610d7957506001600160a01b03831630145b15610db0576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dba84846123e0565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610e0b928a921690899088908890600401613c8d565b600060405180830381600087803b158015610e2557600080fd5b505af1158015610e39573d6000803e3d6000fd5b505050505050505050565b610e4c611e3a565b610e54610715565b8651600003610e765760405163d92e233d60e01b815260040160405180910390fd5b85600003610eb0576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ece8673735b14bb79463307aacbed86daf3322b1e6226ab6123e0565b60008054604051879233927f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c92610f1d928d926001600160a01b0316918d919081908d908d908d908d90613d29565b60405180910390a3610be960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610f88816125ae565b610f9283836125b8565b50505050565b6001600160a01b0381163314610fda576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe482826126a5565b505050565b610ff1611e3a565b610ff9610715565b855160000361101b5760405163d92e233d60e01b815260040160405180910390fd5b84600003611055576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110738573735b14bb79463307aacbed86daf3322b1e6226ab6123e0565b60008054604080518082018252838152600160208201529051879333937f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c936110d6938d936001600160a01b03909316928d92909182918d918d91908d90613b0b565b60405180910390a3610c4f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a611131816125ae565b611139612769565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156111875750825b905060008267ffffffffffffffff1660011480156111a45750303b155b9050811580156111b2575080155b156111e9576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561124a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038716158061126757506001600160a01b038616155b156112855760405163d92e233d60e01b815260040160405180910390fd5b61128d6127f9565b6112956127f9565b61129d612801565b6112a5612811565b6112b06000876125b8565b506112db7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876125b8565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315610be95784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b611380612821565b611389826128f1565b61139382826128fc565b5050565b60006113a1612a20565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611413576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61141b610715565b6001600160a01b0382166114425760405163d92e233d60e01b815260040160405180910390fd5b6040517f660b9de00000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063660b9de090611487908490600401613a0b565b600060405180830381600087803b1580156114a157600080fd5b505af1158015610c4f573d6000803e3d6000fd5b6114bd611e3a565b6114c5610715565b86516000036114e75760405163d92e233d60e01b815260040160405180910390fd5b85600003611521576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061152f87878535611ebb565b90506000336001600160a01b03167f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c49190613a71565b8c8c8c8c604051610bb799989796959493929190613d29565b6115e5611e3a565b6115ed610715565b835160000361160f5760405163d92e233d60e01b815260040160405180910390fd5b82600003611649576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116558484612a82565b90506000336001600160a01b03167f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ea9190613a71565b60405180604001604052808c6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015611733573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117579190613a71565b81526001602090910152604051611775969594939291908c90613d81565b60405180910390a350610f9260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6117d1816125ae565b611139612af0565b6117e1611e3a565b6117e9610715565b835160000361180b5760405163d92e233d60e01b815260040160405180910390fd5b82600003611845576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118638373735b14bb79463307aacbed86daf3322b1e6226ab6123e0565b60008054604080518082018252838152600160208201529051859333937f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c936118c2938b936001600160a01b03909316928b9290918291908b90613d81565b60405180910390a3610f9260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611940576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611948610715565b6001600160a01b038516158061196557506001600160a01b038316155b156119835760405163d92e233d60e01b815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e906119d09089908990899088908890600401613c8d565b600060405180830381600087803b1580156119ea57600080fd5b505af11580156119fe573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611a57576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a5f610715565b6001600160a01b0385161580611a7c57506001600160a01b038316155b15611a9a5760405163d92e233d60e01b815260040160405180910390fd5b83600003611ad4576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480611b0757506001600160a01b03831630145b15611b3e576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bca9190613941565b611983576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c3a816125ae565b610f9283836126a5565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c91576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c99610715565b6001600160a01b0383161580611cb657506001600160a01b038116155b15611cd45760405163d92e233d60e01b815260040160405180910390fd5b81600003611d0e576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d4157506001600160a01b03811630145b15611d78576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e049190613941565b610fe4576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eb5576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611eee91815260200190565b6040805180830381865afa158015611f0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2e9190613e03565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611fb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd79190613941565b61200d576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015612079573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209d9190613941565b6120d3576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612133573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121579190613941565b61218d576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b85516000036121e05760405163d92e233d60e01b815260040160405180910390fd5b600083900361221b576040517fbb1b658000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81516040517ffc5fecd5000000000000000000000000000000000000000000000000000000008152600481019190915260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015612280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a49190613e03565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015612329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234d9190613941565b612383576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f306ee13f48319a123b222c69908e44dcf91abffc20cacc502e3cf5a4ff23e0e48a898989896040516123ce959493929190613e31565b60405180910390a35050505050505050565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015612450573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124749190613941565b6124aa576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561250957600080fd5b505af115801561251d573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461256e576040519150601f19603f3d011682016040523d82523d6000602084013e612573565b606091505b5050905080610fe4576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111398133612b69565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661269b576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556126513390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610806565b6000915050610806565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561269b576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610806565b612771612bf6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b610771612c51565b612809612c51565b610771612cb8565b612819612c51565b610771612d09565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806128ba57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166128ae7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610771576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611393816125ae565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612974575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261297191810190613a71565b60015b6129ba576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612a16576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016129b1565b610fe48383612d11565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610771576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006121918383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aeb9190613a71565b611ebb565b612af8610715565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336127db565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611393576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016129b1565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610771576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610771576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cc0612c51565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612198612c51565b612d1a82612d67565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612d5f57610fe48282612e0f565b611393612e85565b806001600160a01b03163b600003612db6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016129b1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612e2c9190613ed4565b600060405180830381855af49150503d8060008114612e67576040519150601f19603f3d011682016040523d82523d6000602084013e612e6c565b606091505b5091509150612e7c858383612ebd565b95945050505050565b3415610771576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612ed257612ecd82612f32565b612191565b8151158015612ee957506001600160a01b0384163b155b15612f2b576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016129b1565b5080612191565b805115612f425780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612f8657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461219157600080fd5b6001600160a01b038116811461113957600080fd5b600060608284031215612fdd57600080fd5b50919050565b60008060008060808587031215612ff957600080fd5b843561300481612fb6565b935060208501359250604085013561301b81612fb6565b9150606085013567ffffffffffffffff81111561303757600080fd5b61304387828801612fcb565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261308f57600080fd5b813567ffffffffffffffff8111156130a9576130a961304f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff811182821017156130f6576130f661304f565b60405281815283820160200185101561310e57600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f84011261313d57600080fd5b50813567ffffffffffffffff81111561315557600080fd5b60208301915083602082850101111561316d57600080fd5b9250929050565b600060a08284031215612fdd57600080fd5b600080600080600080600060c0888a0312156131a157600080fd5b873567ffffffffffffffff8111156131b857600080fd5b6131c48a828b0161307e565b9750506020880135955060408801356131dc81612fb6565b9450606088013567ffffffffffffffff8111156131f857600080fd5b6132048a828b0161312b565b9095509350506080880135915060a088013567ffffffffffffffff81111561322b57600080fd5b6132378a828b01613174565b91505092959891949750929550565b600060408284031215612fdd57600080fd5b60008060008060008060c0878903121561327157600080fd5b863567ffffffffffffffff81111561328857600080fd5b61329489828a0161307e565b96505060208701356132a581612fb6565b9450604087013567ffffffffffffffff8111156132c157600080fd5b6132cd89828a0161312b565b90955093506132e190508860608901613246565b915060a087013567ffffffffffffffff8111156132fd57600080fd5b61330989828a01613174565b9150509295509295509295565b60008060008060008060a0878903121561332f57600080fd5b863567ffffffffffffffff81111561334657600080fd5b61335289828a0161307e565b965050602087013561336381612fb6565b9450604087013567ffffffffffffffff81111561337f57600080fd5b61338b89828a0161312b565b90955093505060608701359150608087013567ffffffffffffffff8111156132fd57600080fd5b6000806000806000608086880312156133ca57600080fd5b853567ffffffffffffffff8111156133e157600080fd5b6133ed88828901612fcb565b95505060208601359350604086013561340581612fb6565b9250606086013567ffffffffffffffff81111561342157600080fd5b61342d8882890161312b565b969995985093965092949392505050565b60006020828403121561345057600080fd5b5035919050565b600080600080600080600060e0888a03121561347257600080fd5b873567ffffffffffffffff81111561348957600080fd5b6134958a828b0161307e565b9750506020880135955060408801359450606088013567ffffffffffffffff8111156134c057600080fd5b6134cc8a828b0161312b565b90955093506134e090508960808a01613246565b915060c088013567ffffffffffffffff81111561322b57600080fd5b6000806040838503121561350f57600080fd5b82359150602083013561352181612fb6565b809150509250929050565b60008060008060008060a0878903121561354557600080fd5b863567ffffffffffffffff81111561355c57600080fd5b61356889828a0161307e565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561359357600080fd5b61359f89828a0161312b565b909450925050608087013567ffffffffffffffff8111156132fd57600080fd5b600080604083850312156135d257600080fd5b82356135dd81612fb6565b9150602083013561352181612fb6565b6000806040838503121561360057600080fd5b823561360b81612fb6565b9150602083013567ffffffffffffffff81111561362757600080fd5b6136338582860161307e565b9150509250929050565b6000806040838503121561365057600080fd5b823561365b81612fb6565b9150602083013567ffffffffffffffff81111561367757600080fd5b61363385828601612fcb565b600080600080600080600060e0888a03121561369e57600080fd5b873567ffffffffffffffff8111156136b557600080fd5b6136c18a828b0161307e565b9750506020880135955060408801356136d981612fb6565b9450606088013567ffffffffffffffff8111156134c057600080fd5b6000806000806080858703121561370b57600080fd5b843567ffffffffffffffff81111561372257600080fd5b61372e8782880161307e565b94505060208501359250604085013561374681612fb6565b9150606085013567ffffffffffffffff81111561376257600080fd5b61304387828801613174565b6000806000806080858703121561378457600080fd5b843567ffffffffffffffff81111561379b57600080fd5b6137a78782880161307e565b9450506020850135925060408501359150606085013567ffffffffffffffff81111561376257600080fd5b60005b838110156137ed5781810151838201526020016137d5565b50506000910152565b6000815180845261380e8160208601602086016137d2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061219160208301846137f6565b60008060008060008060a0878903121561386c57600080fd5b863567ffffffffffffffff81111561388357600080fd5b61388f89828a01612fcb565b96505060208701356138a081612fb6565b94506040870135935060608701356138b781612fb6565b9250608087013567ffffffffffffffff8111156138d357600080fd5b6138df89828a0161312b565b979a9699509497509295939492505050565b60008060006060848603121561390657600080fd5b833561391181612fb6565b925060208401359150604084013561392881612fb6565b809150509250925092565b801515811461113957600080fd5b60006020828403121561395357600080fd5b815161219181613933565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261399357600080fd5b830160208101925035905067ffffffffffffffff8111156139b357600080fd5b80360382131561316d57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815260008235613a1c81612fb6565b6001600160a01b038116602084015250602083013567ffffffffffffffff8116808214613a4857600080fd5b8060408501525050613a5d604084018461395e565b606080850152612e7c6080850182846139c2565b600060208284031215613a8357600080fd5b5051919050565b60008135613a9781612fb6565b6001600160a01b031683526020820135613ab081613933565b151560208401526040820135613ac581612fb6565b6001600160a01b03166040840152613ae0606083018361395e565b60a06060860152613af560a0860182846139c2565b6080948501359590940194909452509092915050565b61012081526000613b2061012083018c6137f6565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a0840152613b548187896139c2565b855160c08501526020860151151560e085015290505b828103610100840152613b7d8185613a8a565b9c9b505050505050505050505050565b60006040828403128015613ba057600080fd5b506040805190810167ffffffffffffffff81118282101715613bc457613bc461304f565b604052823581526020830135613bd981613933565b60208201529392505050565b600060a08236031215613bf757600080fd5b60405160a0810167ffffffffffffffff81118282101715613c1a57613c1a61304f565b6040528235613c2881612fb6565b81526020830135613c3881613933565b60208201526040830135613c4b81612fb6565b6040820152606083013567ffffffffffffffff811115613c6a57600080fd5b613c763682860161307e565b606083015250608092830135928101929092525090565b608081526000613c9d878861395e565b60606080850152613cb260e0850182846139c2565b9150506020880135613cc381612fb6565b6001600160a01b0390811660a085015260408981013560c0860152908816602085015283018690528281036060840152613cfe8185876139c2565b98975050505050505050565b803582526020810135613d1c81613933565b8015156020840152505050565b61012081526000613d3e61012083018c6137f6565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a0840152613d728187896139c2565b9050613b6a60c0840186613d0a565b61012081526000613d9661012083018a6137f6565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a085015260008252613ddd60c0850187805182526020908101511515910152565b6020810161010085015250613df56020820185613a8a565b9a9950505050505050505050565b60008060408385031215613e1657600080fd5b8251613e2181612fb6565b6020939093015192949293505050565b60a081526000613e4460a08301886137f6565b8281036020840152613e578187896139c2565b85516040850152602086015115156060850152905082810360808401526001600160a01b0384511681526020840151151560208201526001600160a01b036040850151166040820152606084015160a06060830152613eb960a08301826137f6565b90506080850151608083015280925050509695505050505050565b60008251613ee68184602087016137d2565b919091019291505056fea264697066735822122073474441ffbbefd220cbebd592060114f9ed0f0a51b7c6cc33e9c60bfd7d321764736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613f566100fd6000396000818161282c015281816128550152612a2b0152613f566000f3fe6080604052600436106101dc5760003560e01c806352d1902d11610102578063ad3cb1cc11610095578063d547741f11610064578063d547741f14610681578063e63ab1e9146106a1578063e7d926b4146106d5578063f45346dc146106f557600080fd5b8063ad3cb1cc146105cb578063bcf7f32b14610621578063c39aca3714610641578063cd73d4c71461066157600080fd5b80638456cb59116100d15780638456cb591461051c57806391d148541461053157806397a1cef114610596578063a217fddf146105b657600080fd5b806352d1902d146104905780635c975abb146104a55780637b15118b146104dc5780637c0dcb5f146104fc57600080fd5b80632722feee1161017a5780633b283933116101495780633b283933146104285780633f4ba83a14610448578063485cc9551461045d5780634f1ef2861461047d57600080fd5b80632722feee146103a05780632810ae63146103c85780632f2ff15d146103e857806336568abe1461040857600080fd5b80631cb5ea75116101b65780631cb5ea75146102cb57806321501a95146102eb57806321e093b11461030b578063248a9ca31461034357600080fd5b806301ffc9a714610256578063048ae42c1461028b57806306cb8983146102ab57600080fd5b36610251576101e9610715565b6000546001600160a01b0316331480159061021857503373735b14bb79463307aacbed86daf3322b1e6226ab14155b1561024f576040517fb3af013700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b005b600080fd5b34801561026257600080fd5b50610276610271366004612f74565b610773565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b5061024f6102a6366004613108565b61080c565b3480156102b757600080fd5b5061024f6102c63660046131da565b61097f565b3480156102d757600080fd5b5061024f6102e6366004613298565b6109e4565b3480156102f757600080fd5b5061024f610306366004613346565b610a1d565b34801561031757600080fd5b5060005461032b906001600160a01b031681565b6040516001600160a01b039091168152602001610282565b34801561034f57600080fd5b5061039261035e3660046133d2565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610282565b3480156103ac57600080fd5b5061032b73735b14bb79463307aacbed86daf3322b1e6226ab81565b3480156103d457600080fd5b5061024f6103e33660046133eb565b610bd1565b3480156103f457600080fd5b5061024f610403366004613490565b610cdb565b34801561041457600080fd5b5061024f610423366004613490565b610d25565b34801561043457600080fd5b5061024f6104433660046134c0565b610d76565b34801561045457600080fd5b5061024f610e94565b34801561046957600080fd5b5061024f610478366004613553565b610ec9565b61024f61048b366004613581565b611105565b34801561049c57600080fd5b50610392611124565b3480156104b157600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610276565b3480156104e857600080fd5b5061024f6104f73660046135d1565b611153565b34801561050857600080fd5b5061024f610517366004613643565b61127b565b34801561052857600080fd5b5061024f611445565b34801561053d57600080fd5b5061027661054c366004613490565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105a257600080fd5b5061024f6105b13660046136c8565b611477565b3480156105c257600080fd5b50610392600081565b3480156105d757600080fd5b506106146040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b604051610282919061379a565b34801561062d57600080fd5b5061024f61063c3660046137ad565b611591565b34801561064d57600080fd5b5061024f61065c3660046137ad565b6116a8565b34801561066d57600080fd5b5061024f61067c36600461385d565b61189e565b34801561068d57600080fd5b5061024f61069c366004613490565b611b11565b3480156106ad57600080fd5b506103927f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156106e157600080fd5b5061024f6106f03660046138bd565b611b55565b34801561070157600080fd5b5061024f610710366004613903565b611c44565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610771576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061080657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610814611e3a565b61081c610715565b865160000361083e5760405163d92e233d60e01b815260040160405180910390fd5b85600003610878576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610885878785611ebb565b90506000336001600160a01b03167f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091a9190613945565b6040805180820182528c81526001602082015290516109449695949392918f918f91908e90613a9a565b60405180910390a35061097660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b610987611e3a565b61098f610715565b6109b3868686866109a536889003880188613b1c565b6109ae87613b74565b6121be565b6109dc60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6109ec611e3a565b6109f4610715565b6109b386868686604051806040016040528088815260200160011515815250866109ae90613b74565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a6a576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a72610715565b6001600160a01b038316610a995760405163d92e233d60e01b815260040160405180910390fd5b83600003610ad3576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab1480610b0657506001600160a01b03831630145b15610b3d576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b4784846123e0565b6000546040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b038086169263de43156e92610b98928a921690899088908890600401613c1c565b600060405180830381600087803b158015610bb257600080fd5b505af1158015610bc6573d6000803e3d6000fd5b505050505050505050565b610bd9611e3a565b610be1610715565b8651600003610c035760405163d92e233d60e01b815260040160405180910390fd5b85600003610c3d576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c5b8673735b14bb79463307aacbed86daf3322b1e6226ab6123e0565b60008054604051879233927f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c92610caa928d926001600160a01b0316918d919081908d908d908d908d90613cb8565b60405180910390a361097660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610d15816125ae565b610d1f83836125b8565b50505050565b6001600160a01b0381163314610d67576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d7182826126a5565b505050565b610d7e611e3a565b610d86610715565b8551600003610da85760405163d92e233d60e01b815260040160405180910390fd5b84600003610de2576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e008573735b14bb79463307aacbed86daf3322b1e6226ab6123e0565b60008054604080518082018252838152600160208201529051879333937f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c93610e63938d936001600160a01b03909316928d92909182918d918d91908d90613a9a565b60405180910390a36109dc60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ebe816125ae565b610ec6612769565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610f145750825b905060008267ffffffffffffffff166001148015610f315750303b155b905081158015610f3f575080155b15610f76576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610fd75784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0387161580610ff457506001600160a01b038616155b156110125760405163d92e233d60e01b815260040160405180910390fd5b61101a6127f9565b6110226127f9565b61102a612801565b611032612811565b61103d6000876125b8565b506110687f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876125b8565b50600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156109765784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b61110d612821565b611116826128f1565b61112082826128fc565b5050565b600061112e612a20565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b61115b611e3a565b611163610715565b86516000036111855760405163d92e233d60e01b815260040160405180910390fd5b856000036111bf576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111cd87878535611ebb565b90506000336001600160a01b03167f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c8a898b868c6001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561123e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112629190613945565b8c8c8c8c60405161094499989796959493929190613cb8565b611283611e3a565b61128b610715565b83516000036112ad5760405163d92e233d60e01b815260040160405180910390fd5b826000036112e7576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006112f38484612a82565b90506000336001600160a01b03167f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c87868886896001600160a01b0316634d8943bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113889190613945565b60405180604001604052808c6001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f59190613945565b81526001602090910152604051611413969594939291908c90613d10565b60405180910390a350610d1f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61146f816125ae565b610ec6612af0565b61147f611e3a565b611487610715565b83516000036114a95760405163d92e233d60e01b815260040160405180910390fd5b826000036114e3576040517f19c08f4900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115018373735b14bb79463307aacbed86daf3322b1e6226ab6123e0565b60008054604080518082018252838152600160208201529051859333937f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c93611560938b936001600160a01b03909316928b9290918291908b90613d10565b60405180910390a3610d1f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b3373735b14bb79463307aacbed86daf3322b1e6226ab146115de576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115e6610715565b6001600160a01b038516158061160357506001600160a01b038316155b156116215760405163d92e233d60e01b815260040160405180910390fd5b6040517fde43156e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063de43156e9061166e9089908990899088908890600401613c1c565b600060405180830381600087803b15801561168857600080fd5b505af115801561169c573d6000803e3d6000fd5b50505050505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146116f5576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116fd610715565b6001600160a01b038516158061171a57506001600160a01b038316155b156117385760405163d92e233d60e01b815260040160405180910390fd5b83600003611772576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831673735b14bb79463307aacbed86daf3322b1e6226ab14806117a557506001600160a01b03831630145b156117dc576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015611844573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118689190613d92565b611621576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373735b14bb79463307aacbed86daf3322b1e6226ab146118eb576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118f3610715565b6001600160a01b038416158061191057506001600160a01b038216155b1561192e5760405163d92e233d60e01b815260040160405180910390fd5b82600003611968576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821673735b14bb79463307aacbed86daf3322b1e6226ab148061199b57506001600160a01b03821630145b156119d2576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018590528516906347e7ef24906044016020604051808303816000875af1158015611a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5e9190613d92565b611a94576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5ac1e0700000000000000000000000000000000000000000000000000000000081526001600160a01b03831690635ac1e07090611ad9908490600401613daf565b600060405180830381600087803b158015611af357600080fd5b505af1158015611b07573d6000803e3d6000fd5b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611b4b816125ae565b610d1f83836126a5565b3373735b14bb79463307aacbed86daf3322b1e6226ab14611ba2576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611baa610715565b6001600160a01b038216611bd15760405163d92e233d60e01b815260040160405180910390fd5b6040517f5ac1e0700000000000000000000000000000000000000000000000000000000081526001600160a01b03831690635ac1e07090611c16908490600401613daf565b600060405180830381600087803b158015611c3057600080fd5b505af11580156109dc573d6000803e3d6000fd5b3373735b14bb79463307aacbed86daf3322b1e6226ab14611c91576040517f42c0407e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c99610715565b6001600160a01b0383161580611cb657506001600160a01b038116155b15611cd45760405163d92e233d60e01b815260040160405180910390fd5b81600003611d0e576040517f5d67094f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811673735b14bb79463307aacbed86daf3322b1e6226ab1480611d4157506001600160a01b03811630145b15611d78576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490528416906347e7ef24906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e049190613d92565b610d71576040517f47d19fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611eb5576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6000806000846001600160a01b031663fc5fecd5856040518263ffffffff1660e01b8152600401611eee91815260200190565b6040805180830381865afa158015611f0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2e9190613e33565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015611fb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd79190613d92565b61200d576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526001600160a01b038616906323b872dd906064016020604051808303816000875af1158015612079573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209d9190613d92565b6120d3576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018790526001600160a01b038616906342966c68906024016020604051808303816000875af1158015612133573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121579190613d92565b61218d576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b85516000036121e05760405163d92e233d60e01b815260040160405180910390fd5b600083900361221b576040517fbb1b658000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81516040517ffc5fecd5000000000000000000000000000000000000000000000000000000008152600481019190915260009081906001600160a01b0388169063fc5fecd5906024016040805180830381865afa158015612280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a49190613e33565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab60248201526044810182905291935091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015612329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234d9190613d92565b612383576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866001600160a01b0316336001600160a01b03167f306ee13f48319a123b222c69908e44dcf91abffc20cacc502e3cf5a4ff23e0e48a898989896040516123ce959493929190613e61565b60405180910390a35050505050505050565b6000546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015612450573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124749190613d92565b6124aa576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561250957600080fd5b505af115801561251d573d6000803e3d6000fd5b505050506000816001600160a01b03168360405160006040518083038185875af1925050503d806000811461256e576040519150601f19603f3d011682016040523d82523d6000602084013e612573565b606091505b5050905080610d71576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ec68133612b69565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1661269b576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556126513390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610806565b6000915050610806565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff161561269b576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610806565b612771612bf6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b610771612c51565b612809612c51565b610771612cb8565b612819612c51565b610771612d09565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806128ba57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166128ae7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610771576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611120816125ae565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612974575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261297191810190613945565b60015b6129ba576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612a16576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016129b1565b610d718383612d11565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610771576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006121918383846001600160a01b031663091d27886040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aeb9190613945565b611ebb565b612af8610715565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336127db565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611120576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016129b1565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610771576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610771576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612cc0612c51565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612198612c51565b612d1a82612d67565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612d5f57610d718282612e0f565b611120612e85565b806001600160a01b03163b600003612db6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016129b1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612e2c9190613f04565b600060405180830381855af49150503d8060008114612e67576040519150601f19603f3d011682016040523d82523d6000602084013e612e6c565b606091505b5091509150612e7c858383612ebd565b95945050505050565b3415610771576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606082612ed257612ecd82612f32565b612191565b8151158015612ee957506001600160a01b0384163b155b15612f2b576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016129b1565b5080612191565b805115612f425780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612f8657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461219157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112612ff657600080fd5b813567ffffffffffffffff81111561301057613010612fb6565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff8111828210171561305d5761305d612fb6565b60405281815283820160200185101561307557600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114610ec657600080fd5b60008083601f8401126130b957600080fd5b50813567ffffffffffffffff8111156130d157600080fd5b6020830191508360208285010111156130e957600080fd5b9250929050565b600060a0828403121561310257600080fd5b50919050565b600080600080600080600060c0888a03121561312357600080fd5b873567ffffffffffffffff81111561313a57600080fd5b6131468a828b01612fe5565b97505060208801359550604088013561315e81613092565b9450606088013567ffffffffffffffff81111561317a57600080fd5b6131868a828b016130a7565b9095509350506080880135915060a088013567ffffffffffffffff8111156131ad57600080fd5b6131b98a828b016130f0565b91505092959891949750929550565b60006040828403121561310257600080fd5b60008060008060008060c087890312156131f357600080fd5b863567ffffffffffffffff81111561320a57600080fd5b61321689828a01612fe5565b965050602087013561322781613092565b9450604087013567ffffffffffffffff81111561324357600080fd5b61324f89828a016130a7565b9095509350613263905088606089016131c8565b915060a087013567ffffffffffffffff81111561327f57600080fd5b61328b89828a016130f0565b9150509295509295509295565b60008060008060008060a087890312156132b157600080fd5b863567ffffffffffffffff8111156132c857600080fd5b6132d489828a01612fe5565b96505060208701356132e581613092565b9450604087013567ffffffffffffffff81111561330157600080fd5b61330d89828a016130a7565b90955093505060608701359150608087013567ffffffffffffffff81111561327f57600080fd5b60006060828403121561310257600080fd5b60008060008060006080868803121561335e57600080fd5b853567ffffffffffffffff81111561337557600080fd5b61338188828901613334565b95505060208601359350604086013561339981613092565b9250606086013567ffffffffffffffff8111156133b557600080fd5b6133c1888289016130a7565b969995985093965092949392505050565b6000602082840312156133e457600080fd5b5035919050565b600080600080600080600060e0888a03121561340657600080fd5b873567ffffffffffffffff81111561341d57600080fd5b6134298a828b01612fe5565b9750506020880135955060408801359450606088013567ffffffffffffffff81111561345457600080fd5b6134608a828b016130a7565b909550935061347490508960808a016131c8565b915060c088013567ffffffffffffffff8111156131ad57600080fd5b600080604083850312156134a357600080fd5b8235915060208301356134b581613092565b809150509250929050565b60008060008060008060a087890312156134d957600080fd5b863567ffffffffffffffff8111156134f057600080fd5b6134fc89828a01612fe5565b9650506020870135945060408701359350606087013567ffffffffffffffff81111561352757600080fd5b61353389828a016130a7565b909450925050608087013567ffffffffffffffff81111561327f57600080fd5b6000806040838503121561356657600080fd5b823561357181613092565b915060208301356134b581613092565b6000806040838503121561359457600080fd5b823561359f81613092565b9150602083013567ffffffffffffffff8111156135bb57600080fd5b6135c785828601612fe5565b9150509250929050565b600080600080600080600060e0888a0312156135ec57600080fd5b873567ffffffffffffffff81111561360357600080fd5b61360f8a828b01612fe5565b97505060208801359550604088013561362781613092565b9450606088013567ffffffffffffffff81111561345457600080fd5b6000806000806080858703121561365957600080fd5b843567ffffffffffffffff81111561367057600080fd5b61367c87828801612fe5565b94505060208501359250604085013561369481613092565b9150606085013567ffffffffffffffff8111156136b057600080fd5b6136bc878288016130f0565b91505092959194509250565b600080600080608085870312156136de57600080fd5b843567ffffffffffffffff8111156136f557600080fd5b61370187828801612fe5565b9450506020850135925060408501359150606085013567ffffffffffffffff8111156136b057600080fd5b60005b8381101561374757818101518382015260200161372f565b50506000910152565b6000815180845261376881602086016020860161372c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006121916020830184613750565b60008060008060008060a087890312156137c657600080fd5b863567ffffffffffffffff8111156137dd57600080fd5b6137e989828a01613334565b96505060208701356137fa81613092565b945060408701359350606087013561381181613092565b9250608087013567ffffffffffffffff81111561382d57600080fd5b61383989828a016130a7565b979a9699509497509295939492505050565b60006080828403121561310257600080fd5b6000806000806080858703121561387357600080fd5b843561387e81613092565b935060208501359250604085013561389581613092565b9150606085013567ffffffffffffffff8111156138b157600080fd5b6136bc8782880161384b565b600080604083850312156138d057600080fd5b82356138db81613092565b9150602083013567ffffffffffffffff8111156138f757600080fd5b6135c78582860161384b565b60008060006060848603121561391857600080fd5b833561392381613092565b925060208401359150604084013561393a81613092565b809150509250925092565b60006020828403121561395757600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8015158114610ec657600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126139ea57600080fd5b830160208101925035905067ffffffffffffffff811115613a0a57600080fd5b8036038213156130e957600080fd5b60008135613a2681613092565b6001600160a01b031683526020820135613a3f816139a7565b151560208401526040820135613a5481613092565b6001600160a01b03166040840152613a6f60608301836139b5565b60a06060860152613a8460a08601828461395e565b6080948501359590940194909452509092915050565b61012081526000613aaf61012083018c613750565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a0840152613ae381878961395e565b855160c08501526020860151151560e085015290505b828103610100840152613b0c8185613a19565b9c9b505050505050505050505050565b60006040828403128015613b2f57600080fd5b506040805190810167ffffffffffffffff81118282101715613b5357613b53612fb6565b604052823581526020830135613b68816139a7565b60208201529392505050565b600060a08236031215613b8657600080fd5b60405160a0810167ffffffffffffffff81118282101715613ba957613ba9612fb6565b6040528235613bb781613092565b81526020830135613bc7816139a7565b60208201526040830135613bda81613092565b6040820152606083013567ffffffffffffffff811115613bf957600080fd5b613c0536828601612fe5565b606083015250608092830135928101929092525090565b608081526000613c2c87886139b5565b60606080850152613c4160e08501828461395e565b9150506020880135613c5281613092565b6001600160a01b0390811660a085015260408981013560c0860152908816602085015283018690528281036060840152613c8d81858761395e565b98975050505050505050565b803582526020810135613cab816139a7565b8015156020840152505050565b61012081526000613ccd61012083018c613750565b6001600160a01b038b16602084015289604084015288606084015287608084015282810360a0840152613d0181878961395e565b9050613af960c0840186613c99565b61012081526000613d2561012083018a613750565b6001600160a01b03891660208401528760408401528660608401528560808401528281038060a085015260008252613d6c60c0850187805182526020908101511515910152565b6020810161010085015250613d846020820185613a19565b9a9950505050505050505050565b600060208284031215613da457600080fd5b8151612191816139a7565b6020815260008235613dc081613092565b6001600160a01b0381166020840152506020830135613dde81613092565b6001600160a01b038116604084015250604083013567ffffffffffffffff8116808214613e0a57600080fd5b8060608501525050613e1f60608401846139b5565b608080850152612e7c60a08501828461395e565b60008060408385031215613e4657600080fd5b8251613e5181613092565b6020939093015192949293505050565b60a081526000613e7460a0830188613750565b8281036020840152613e8781878961395e565b85516040850152602086015115156060850152905082810360808401526001600160a01b0384511681526020840151151560208201526001600160a01b036040850151166040820152606084015160a06060830152613ee960a0830182613750565b90506080850151608083015280925050509695505050505050565b60008251613f1681846020870161372c565b919091019291505056fea2646970667358221220a8dfa62236301cdcf36e8ee3551178d37b873be7a2682b1ac58513cd64f6bc2e64736f6c634300081a0033"; type GatewayZEVMConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/IERC20Custody.sol/IERC20CustodyEvents__factory.ts b/v2/types/factories/IERC20Custody.sol/IERC20CustodyEvents__factory.ts index eed20e3d..f1dbe883 100644 --- a/v2/types/factories/IERC20Custody.sol/IERC20CustodyEvents__factory.ts +++ b/v2/types/factories/IERC20Custody.sol/IERC20CustodyEvents__factory.ts @@ -156,6 +156,11 @@ const _abi = [ indexed: false, internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", diff --git a/v2/types/factories/IERC20Custody.sol/IERC20Custody__factory.ts b/v2/types/factories/IERC20Custody.sol/IERC20Custody__factory.ts index b1ae1ed9..5a3ec837 100644 --- a/v2/types/factories/IERC20Custody.sol/IERC20Custody__factory.ts +++ b/v2/types/factories/IERC20Custody.sol/IERC20Custody__factory.ts @@ -108,6 +108,11 @@ const _abi = [ type: "tuple", internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -276,6 +281,11 @@ const _abi = [ indexed: false, internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", diff --git a/v2/types/factories/IGatewayEVM.sol/IGatewayEVMErrors__factory.ts b/v2/types/factories/IGatewayEVM.sol/IGatewayEVMErrors__factory.ts index 548051bb..893c33b2 100644 --- a/v2/types/factories/IGatewayEVM.sol/IGatewayEVMErrors__factory.ts +++ b/v2/types/factories/IGatewayEVM.sol/IGatewayEVMErrors__factory.ts @@ -49,6 +49,11 @@ const _abi = [ name: "NotAllowedToCallOnCall", inputs: [], }, + { + type: "error", + name: "NotAllowedToCallOnRevert", + inputs: [], + }, { type: "error", name: "NotWhitelistedInCustody", diff --git a/v2/types/factories/IGatewayEVM.sol/IGatewayEVMEvents__factory.ts b/v2/types/factories/IGatewayEVM.sol/IGatewayEVMEvents__factory.ts index 50e744be..eecc8316 100644 --- a/v2/types/factories/IGatewayEVM.sol/IGatewayEVMEvents__factory.ts +++ b/v2/types/factories/IGatewayEVM.sol/IGatewayEVMEvents__factory.ts @@ -227,6 +227,11 @@ const _abi = [ indexed: false, internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", diff --git a/v2/types/factories/IGatewayEVM.sol/IGatewayEVM__factory.ts b/v2/types/factories/IGatewayEVM.sol/IGatewayEVM__factory.ts index 594bd485..7db4a89b 100644 --- a/v2/types/factories/IGatewayEVM.sol/IGatewayEVM__factory.ts +++ b/v2/types/factories/IGatewayEVM.sol/IGatewayEVM__factory.ts @@ -348,6 +348,11 @@ const _abi = [ type: "tuple", internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -426,6 +431,11 @@ const _abi = [ type: "tuple", internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -665,6 +675,11 @@ const _abi = [ indexed: false, internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -725,6 +740,11 @@ const _abi = [ name: "NotAllowedToCallOnCall", inputs: [], }, + { + type: "error", + name: "NotAllowedToCallOnRevert", + inputs: [], + }, { type: "error", name: "NotWhitelistedInCustody", diff --git a/v2/types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts b/v2/types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts index d67a3959..0316618c 100644 --- a/v2/types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts +++ b/v2/types/factories/IGatewayZEVM.sol/IGatewayZEVM__factory.ts @@ -283,6 +283,11 @@ const _abi = [ type: "tuple", internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -368,6 +373,11 @@ const _abi = [ type: "tuple", internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", diff --git a/v2/types/factories/IReceiverEVM.sol/IReceiverEVMEvents__factory.ts b/v2/types/factories/IReceiverEVM.sol/IReceiverEVMEvents__factory.ts index 481943e0..ccf304be 100644 --- a/v2/types/factories/IReceiverEVM.sol/IReceiverEVMEvents__factory.ts +++ b/v2/types/factories/IReceiverEVM.sol/IReceiverEVMEvents__factory.ts @@ -143,6 +143,11 @@ const _abi = [ indexed: false, internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", diff --git a/v2/types/factories/IZetaConnector.sol/IZetaConnectorEvents__factory.ts b/v2/types/factories/IZetaConnector.sol/IZetaConnectorEvents__factory.ts index 43da6ae5..d3ae0e8b 100644 --- a/v2/types/factories/IZetaConnector.sol/IZetaConnectorEvents__factory.ts +++ b/v2/types/factories/IZetaConnector.sol/IZetaConnectorEvents__factory.ts @@ -81,6 +81,11 @@ const _abi = [ indexed: false, internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", diff --git a/v2/types/factories/ReceiverEVM__factory.ts b/v2/types/factories/ReceiverEVM__factory.ts index 055c3656..eb9d389e 100644 --- a/v2/types/factories/ReceiverEVM__factory.ts +++ b/v2/types/factories/ReceiverEVM__factory.ts @@ -60,6 +60,11 @@ const _abi = [ type: "tuple", internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -314,6 +319,11 @@ const _abi = [ indexed: false, internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -385,7 +395,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080604052348015600f57600080fd5b506001600055610ec3806100246000396000f3fe60806040526004361061006e5760003560e01c80636ed701691161004b5780636ed70169146100e0578063c5131691146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063660b9de014610097578063676cc054146100b757005b3661007557005b005b34801561008357600080fd5b50610075610092366004610724565b610148565b3480156100a357600080fd5b506100756100b2366004610760565b6101de565b6100ca6100c536600461079b565b61021a565b6040516100d79190610896565b60405180910390f35b3480156100ec57600080fd5b5061007561024d565b34801561010157600080fd5b50610075610110366004610724565b610282565b6100756101233660046109ce565b61035d565b34801561013457600080fd5b50610075610143366004610aba565b6103a1565b6101506103d6565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610419565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b7f024f3ba167dca37cfa8409bf4c2f05a4d9c2d9b39a94d7a6c970352fabaa320e338260405161020f929190610bed565b60405180910390a150565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a19392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61028a6103d6565b6000610297600285610ccc565b9050806000036102d3576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102f573ffffffffffffffffffffffffffffffffffffffff8416338484610419565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610394959493929190610d07565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103949493929190610d91565b600260005403610412576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104ae9085906104b4565b50505050565b60006104d673ffffffffffffffffffffffffffffffffffffffff84168361054f565b905080516000141580156104fb5750808060200190518101906104f99190610e54565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061055d83836000610564565b9392505050565b6060814710156105a2576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610546565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105cb9190610e71565b60006040518083038185875af1925050503d8060008114610608576040519150601f19603f3d011682016040523d82523d6000602084013e61060d565b606091505b509150915061061d868383610627565b9695505050505050565b60608261063c57610637826106b6565b61055d565b8151158015610660575073ffffffffffffffffffffffffffffffffffffffff84163b155b156106af576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610546565b508061055d565b8051156106c65780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461071f57600080fd5b919050565b60008060006060848603121561073957600080fd5b83359250610749602085016106fb565b9150610757604085016106fb565b90509250925092565b60006020828403121561077257600080fd5b813567ffffffffffffffff81111561078957600080fd5b82016060818503121561055d57600080fd5b600080600083850360408112156107b157600080fd5b60208112156107bf57600080fd5b50839250602084013567ffffffffffffffff8111156107dd57600080fd5b8401601f810186136107ee57600080fd5b803567ffffffffffffffff81111561080557600080fd5b86602082840101111561081757600080fd5b939660209190910195509293505050565b60005b8381101561084357818101518382015260200161082b565b50506000910152565b60008151808452610864816020860160208601610828565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061055d602083018461084c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561091f5761091f6108a9565b604052919050565b600082601f83011261093857600080fd5b813567ffffffffffffffff811115610952576109526108a9565b61098360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108d8565b81815284602083860101111561099857600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106f857600080fd5b803561071f816109b5565b6000806000606084860312156109e357600080fd5b833567ffffffffffffffff8111156109fa57600080fd5b610a0686828701610927565b935050602084013591506040840135610a1e816109b5565b809150509250925092565b600067ffffffffffffffff821115610a4357610a436108a9565b5060051b60200190565b600082601f830112610a5e57600080fd5b8135610a71610a6c82610a29565b6108d8565b8082825260208201915060208360051b860101925085831115610a9357600080fd5b602085015b83811015610ab0578035835260209283019201610a98565b5095945050505050565b600080600060608486031215610acf57600080fd5b833567ffffffffffffffff811115610ae657600080fd5b8401601f81018613610af757600080fd5b8035610b05610a6c82610a29565b8082825260208201915060208360051b850101925088831115610b2757600080fd5b602084015b83811015610b6957803567ffffffffffffffff811115610b4b57600080fd5b610b5a8b602083890101610927565b84525060209283019201610b2c565b509550505050602084013567ffffffffffffffff811115610b8957600080fd5b610b9586828701610a4d565b925050610757604085016109c3565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2b836106fb565b1660408201526000602083013567ffffffffffffffff8116808214610c4f57600080fd5b6060840152506040830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610c8b57600080fd5b830160208101903567ffffffffffffffff811115610ca857600080fd5b803603821315610cb757600080fd5b6060608085015261061d60a085018284610ba4565b600082610d02577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d3c60a083018661084c565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610d87578151865260209586019590910190600101610d69565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e24577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e0f85835161084c565b94506020938401939190910190600101610dd5565b505050508281036040840152610e3a8186610d55565b915050610e4b606083018415159052565b95945050505050565b600060208284031215610e6657600080fd5b815161055d816109b5565b60008251610e83818460208701610828565b919091019291505056fea2646970667358221220d537f023478b5746f5f67760e722db6f4a51db89700ac69d6ba33759b8ac342f64736f6c634300081a0033"; + "0x6080604052348015600f57600080fd5b506001600055610eea806100246000396000f3fe60806040526004361061006e5760003560e01c80636ed701691161004b5780636ed70169146100e0578063c5131691146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a2146100775780635ac1e07014610097578063676cc054146100b757005b3661007557005b005b34801561008357600080fd5b50610075610092366004610724565b610148565b3480156100a357600080fd5b506100756100b2366004610760565b6101de565b6100ca6100c536600461079b565b61021a565b6040516100d79190610896565b60405180910390f35b3480156100ec57600080fd5b5061007561024d565b34801561010157600080fd5b50610075610110366004610724565b610282565b6100756101233660046109ce565b61035d565b34801561013457600080fd5b50610075610143366004610aba565b6103a1565b6101506103d6565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610419565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b7f8f39d9623d22cb24244fa4bf1219c32f0a8c7522a0978f7778ec6e376507e264338260405161020f929190610bed565b60405180910390a150565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a19392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61028a6103d6565b6000610297600285610cf3565b9050806000036102d3576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102f573ffffffffffffffffffffffffffffffffffffffff8416338484610419565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa3334858585604051610394959493929190610d2e565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103949493929190610db8565b600260005403610412576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104ae9085906104b4565b50505050565b60006104d673ffffffffffffffffffffffffffffffffffffffff84168361054f565b905080516000141580156104fb5750808060200190518101906104f99190610e7b565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061055d83836000610564565b9392505050565b6060814710156105a2576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610546565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105cb9190610e98565b60006040518083038185875af1925050503d8060008114610608576040519150601f19603f3d011682016040523d82523d6000602084013e61060d565b606091505b509150915061061d868383610627565b9695505050505050565b60608261063c57610637826106b6565b61055d565b8151158015610660575073ffffffffffffffffffffffffffffffffffffffff84163b155b156106af576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610546565b508061055d565b8051156106c65780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461071f57600080fd5b919050565b60008060006060848603121561073957600080fd5b83359250610749602085016106fb565b9150610757604085016106fb565b90509250925092565b60006020828403121561077257600080fd5b813567ffffffffffffffff81111561078957600080fd5b82016080818503121561055d57600080fd5b600080600083850360408112156107b157600080fd5b60208112156107bf57600080fd5b50839250602084013567ffffffffffffffff8111156107dd57600080fd5b8401601f810186136107ee57600080fd5b803567ffffffffffffffff81111561080557600080fd5b86602082840101111561081757600080fd5b939660209190910195509293505050565b60005b8381101561084357818101518382015260200161082b565b50506000910152565b60008151808452610864816020860160208601610828565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061055d602083018461084c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561091f5761091f6108a9565b604052919050565b600082601f83011261093857600080fd5b813567ffffffffffffffff811115610952576109526108a9565b61098360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108d8565b81815284602083860101111561099857600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106f857600080fd5b803561071f816109b5565b6000806000606084860312156109e357600080fd5b833567ffffffffffffffff8111156109fa57600080fd5b610a0686828701610927565b935050602084013591506040840135610a1e816109b5565b809150509250925092565b600067ffffffffffffffff821115610a4357610a436108a9565b5060051b60200190565b600082601f830112610a5e57600080fd5b8135610a71610a6c82610a29565b6108d8565b8082825260208201915060208360051b860101925085831115610a9357600080fd5b602085015b83811015610ab0578035835260209283019201610a98565b5095945050505050565b600080600060608486031215610acf57600080fd5b833567ffffffffffffffff811115610ae657600080fd5b8401601f81018613610af757600080fd5b8035610b05610a6c82610a29565b8082825260208201915060208360051b850101925088831115610b2757600080fd5b602084015b83811015610b6957803567ffffffffffffffff811115610b4b57600080fd5b610b5a8b602083890101610927565b84525060209283019201610b2c565b509550505050602084013567ffffffffffffffff811115610b8957600080fd5b610b9586828701610a4d565b925050610757604085016109c3565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2b836106fb565b16604082015273ffffffffffffffffffffffffffffffffffffffff610c52602084016106fb565b1660608201526000604083013567ffffffffffffffff8116808214610c7657600080fd5b6080840152506060830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1018112610cb257600080fd5b830160208101903567ffffffffffffffff811115610ccf57600080fd5b803603821315610cde57600080fd5b608060a085015261061d60c085018284610ba4565b600082610d29577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d6360a083018661084c565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610dae578151865260209586019590910190600101610d90565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e4b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e3685835161084c565b94506020938401939190910190600101610dfc565b505050508281036040840152610e618186610d7c565b915050610e72606083018415159052565b95945050505050565b600060208284031215610e8d57600080fd5b815161055d816109b5565b60008251610eaa818460208701610828565b919091019291505056fea264697066735822122075e241dc7d0b3cc5bb3ca3c583250993ad9bf6a64ef50849b87060df5ab2e8e364736f6c634300081a0033"; type ReceiverEVMConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/Revert.sol/Revertable__factory.ts b/v2/types/factories/Revert.sol/Revertable__factory.ts index 6a071ef5..998e296b 100644 --- a/v2/types/factories/Revert.sol/Revertable__factory.ts +++ b/v2/types/factories/Revert.sol/Revertable__factory.ts @@ -18,6 +18,11 @@ const _abi = [ type: "tuple", internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", diff --git a/v2/types/factories/SenderZEVM__factory.ts b/v2/types/factories/SenderZEVM__factory.ts index 2b105d32..62525637 100644 --- a/v2/types/factories/SenderZEVM__factory.ts +++ b/v2/types/factories/SenderZEVM__factory.ts @@ -120,7 +120,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526001602080840182905283850192909252835191820184526000808352606084019290925260808301829052905492517f048ae42c000000000000000000000000000000000000000000000000000000008152919273ffffffffffffffffffffffffffffffffffffffff169163048ae42c916102d7918c918c918c9189918990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a081018352610321808252600182840181905282850191909152835192830184526000808452606083019390935260808201839052915492517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201526024810183905293945092909188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea2646970667358221220792a5e1e201d0b1f639959350189e03421096c54285a3cac719abddeae7c88fa64736f6c634300081a0033"; + "0x6080604052348015600f57600080fd5b50604051610a2c380380610a2c833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b61099f8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b6100596100543660046105f5565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b2366004610695565b610313565b60008383836040516024016100ce93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b391166101758960026107bb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020991906107fb565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526103218082526001602080840182905283850192909252835191820184526000808352606084019290925260808301829052905492517f048ae42c000000000000000000000000000000000000000000000000000000008152919273ffffffffffffffffffffffffffffffffffffffff169163048ae42c916102d7918c918c918c9189918990600401610894565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050505050565b600083838360405160240161032a93929190610791565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a081018352610321808252600182840181905282850191909152835192830184526000808452606083019390935260808201839052915492517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201526024810183905293945092909188169063095ea7b3906044016020604051808303816000875af1158015610455573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047991906107fb565b506000546040517f1cb5ea7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690631cb5ea75906102d7908b908b90889087908990600401610902565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261051857600080fd5b81356020830160008067ffffffffffffffff841115610539576105396104d8565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610586576105866104d8565b60405283815290508082840187101561059e57600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105df57600080fd5b919050565b80151581146105f257600080fd5b50565b60008060008060008060c0878903121561060e57600080fd5b863567ffffffffffffffff81111561062557600080fd5b61063189828a01610507565b96505060208701359450610647604088016105bb565b9350606087013567ffffffffffffffff81111561066357600080fd5b61066f89828a01610507565b9350506080870135915060a0870135610687816105e4565b809150509295509295509295565b600080600080600060a086880312156106ad57600080fd5b853567ffffffffffffffff8111156106c457600080fd5b6106d088828901610507565b9550506106df602087016105bb565b9350604086013567ffffffffffffffff8111156106fb57600080fd5b61070788828901610507565b93505060608601359150608086013561071f816105e4565b809150509295509295909350565b6000815180845260005b8181101561075357602081850181015186830182015201610737565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006107a4606083018661072d565b602083019490945250901515604090910152919050565b808201808211156107f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561080d57600080fd5b8151610818816105e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a0606085015261088060a085018261072d565b608093840151949093019390935250919050565b60c0815260006108a760c083018961072d565b87602084015273ffffffffffffffffffffffffffffffffffffffff8716604084015282810360608401526108db818761072d565b905084608084015282810360a08401526108f5818561081f565b9998505050505050505050565b60a08152600061091560a083018861072d565b73ffffffffffffffffffffffffffffffffffffffff871660208401528281036040840152610943818761072d565b9050846060840152828103608084015261095d818561081f565b9897505050505050505056fea264697066735822122014b5ef93498637ee9a3f4d89a96843ea228d38a24ccae4d361ad086fb4a2ba2b64736f6c634300081a0033"; type SenderZEVMConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/SystemContract.sol/SystemContract__factory.ts b/v2/types/factories/SystemContract.sol/SystemContract__factory.ts index 5bda5400..c49ce340 100644 --- a/v2/types/factories/SystemContract.sol/SystemContract__factory.ts +++ b/v2/types/factories/SystemContract.sol/SystemContract__factory.ts @@ -439,7 +439,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea2646970667358221220e0645f0dc9560bf8a1975495bcc1a88ea921f354d9c6dd0b38d7de440cf329ed64736f6c634300081a0033"; + "0x60c060405234801561001057600080fd5b5060405161106f38038061106f83398101604081905261002f916100db565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461006357604051632b2add3d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0385811691909117909155828116608052811660a0526040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a150505061011e565b80516001600160a01b03811681146100d657600080fd5b919050565b6000806000606084860312156100f057600080fd5b6100f9846100bf565b9250610107602085016100bf565b9150610115604085016100bf565b90509250925092565b60805160a051610f2561014a60003960006101e50152600081816102b9015261045b0152610f256000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806397770dff11610097578063c63585cc11610066578063c63585cc14610273578063d7fd7afb14610286578063d936a012146102b4578063ee2815ba146102db57600080fd5b806397770dff1461021a578063a7cb05071461022d578063c39aca3714610240578063c62178ac1461025357600080fd5b8063513a9c05116100d3578063513a9c051461018a578063569541b9146101c0578063842da36d146101e057806391dd645f1461020757600080fd5b80630be15547146100fa5780631f0e251b1461015a5780633ce4a5bc1461016f575b600080fd5b610130610108366004610bd1565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016d610168366004610c13565b6102ee565b005b61013073735b14bb79463307aacbed86daf3322b1e6226ab81565b610130610198366004610bd1565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101309073ffffffffffffffffffffffffffffffffffffffff1681565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d610215366004610c35565b610402565b61016d610228366004610c13565b610526565b61016d61023b366004610c61565b610633565b61016d61024e366004610c83565b6106ce565b6004546101309073ffffffffffffffffffffffffffffffffffffffff1681565b610130610281366004610d53565b6108cd565b6102a6610294366004610bd1565b60006020819052908152604090205481565b604051908152602001610151565b6101307f000000000000000000000000000000000000000000000000000000000000000081565b61016d6102e9366004610c35565b610a02565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461033b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610388576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f3ade88e3922d64780e1bf4460d364c2970b69da813f9c0c07a1c187b5647636c906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461044f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600090610497907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16846108cd565b60008481526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251878152918201529192507f0ecec485166da6139b13bb7e033e9446e2d35348e80ebf1180d4afe2dba1704e910160405180910390a1505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610573576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e906020016103f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610680576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461071b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831673735b14bb79463307aacbed86daf3322b1e6226ab1480610768575073ffffffffffffffffffffffffffffffffffffffff831630145b1561079f576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f47e7ef2400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018690528616906347e7ef24906044016020604051808303816000875af1158015610814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108389190610d96565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063de43156e906108939089908990899088908890600401610e01565b600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b50505050505050505050565b60008060006108dc8585610ad3565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016109c29291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610a4f576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d91016106c2565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b3b576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610b75578284610b78565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610bca576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b600060208284031215610be357600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c0e57600080fd5b919050565b600060208284031215610c2557600080fd5b610c2e82610bea565b9392505050565b60008060408385031215610c4857600080fd5b82359150610c5860208401610bea565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b60008060008060008060a08789031215610c9c57600080fd5b863567ffffffffffffffff811115610cb357600080fd5b87016060818a031215610cc557600080fd5b9550610cd360208801610bea565b945060408701359350610ce860608801610bea565b9250608087013567ffffffffffffffff811115610d0457600080fd5b8701601f81018913610d1557600080fd5b803567ffffffffffffffff811115610d2c57600080fd5b896020828401011115610d3e57600080fd5b60208201935080925050509295509295509295565b600080600060608486031215610d6857600080fd5b610d7184610bea565b9250610d7f60208501610bea565b9150610d8d60408501610bea565b90509250925092565b600060208284031215610da857600080fd5b81518015158114610c2e57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018112610e3957600080fd5b870160208101903567ffffffffffffffff811115610e5657600080fd5b803603821315610e6557600080fd5b60606080850152610e7a60e085018284610db8565b91505073ffffffffffffffffffffffffffffffffffffffff610e9e60208a01610bea565b1660a0840152604088013560c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401528281036060840152610ee3818587610db8565b9897505050505050505056fea26469706673582212201b1a136275cbee5409c60f315f9fc4e6eecd668368ddacf6f2cfdcef88de5c5a64736f6c634300081a0033"; type SystemContractConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/SystemContractMock.sol/SystemContractMock__factory.ts b/v2/types/factories/SystemContractMock.sol/SystemContractMock__factory.ts index 245491dc..39418a3a 100644 --- a/v2/types/factories/SystemContractMock.sol/SystemContractMock__factory.ts +++ b/v2/types/factories/SystemContractMock.sol/SystemContractMock__factory.ts @@ -342,7 +342,7 @@ const _abi = [ ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220f5c4cae5cc505bc5e795bca446028bb75a72680a148baa4a180dc1a1714ebe3764736f6c634300081a0033"; + "0x608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea2646970667358221220658a03788e7c2558f3159d5347e48afa7ee297970854aae30cfc9aac2a0aa57d64736f6c634300081a0033"; type SystemContractMockConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/TestUniversalContract__factory.ts b/v2/types/factories/TestUniversalContract__factory.ts index bf32ca27..8986efeb 100644 --- a/v2/types/factories/TestUniversalContract__factory.ts +++ b/v2/types/factories/TestUniversalContract__factory.ts @@ -77,6 +77,11 @@ const _abi = [ type: "tuple", internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -145,6 +150,11 @@ const _abi = [ indexed: false, internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -168,7 +178,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080604052348015600f57600080fd5b5061061e8061001f6000396000f3fe60806040526004361061002a5760003560e01c8063660b9de014610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610140565b610073565b34801561005f57600080fd5b5061003161006e3660046101a6565b6100ad565b7f35a9324413457251c1059312318f6f1cec6bd0da4105d01315f3151b1e3a2c76816040516100a291906102a7565b60405180910390a150565b606081156100c4576100c1828401846103a2565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100ef8780610498565b6100ff60408a0160208b01610504565b8960400135338660405161011896959493929190610526565b60405180910390a1505050505050565b60006060828403121561013a57600080fd5b50919050565b60006020828403121561015257600080fd5b813567ffffffffffffffff81111561016957600080fd5b61017584828501610128565b949350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101a157600080fd5b919050565b6000806000806000608086880312156101be57600080fd5b853567ffffffffffffffff8111156101d557600080fd5b6101e188828901610128565b9550506101f06020870161017d565b935060408601359250606086013567ffffffffffffffff81111561021357600080fd5b8601601f8101881361022457600080fd5b803567ffffffffffffffff81111561023b57600080fd5b88602082840101111561024d57600080fd5b959894975092955050506020019190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff6102c98361017d565b1660208201526000602083013567ffffffffffffffff81168082146102ed57600080fd5b806040850152505060408301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261032a57600080fd5b830160208101903567ffffffffffffffff81111561034757600080fd5b80360382131561035657600080fd5b60608085015261036a60808501828461025e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156103b457600080fd5b813567ffffffffffffffff8111156103cb57600080fd5b8201601f810184136103dc57600080fd5b803567ffffffffffffffff8111156103f6576103f6610373565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561046257610462610373565b60405281815282820160200186101561047a57600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126104cd57600080fd5b83018035915067ffffffffffffffff8211156104e857600080fd5b6020019150368190038213156104fd57600080fd5b9250929050565b60006020828403121561051657600080fd5b61051f8261017d565b9392505050565b60a08152600061053a60a08301888a61025e565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156105a457602081870181015184830182015201610588565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168301019250505097965050505050505056fea2646970667358221220ff93d07870f1d8e50e4264dfe0294e91fdae9dea40dbbcba8170288316ad1a8464736f6c634300081a0033"; + "0x6080604052348015600f57600080fd5b506106308061001f6000396000f3fe60806040526004361061002a5760003560e01c80635ac1e07014610033578063de43156e1461005357005b3661003157005b005b34801561003f57600080fd5b5061003161004e366004610128565b610073565b34801561005f57600080fd5b5061003161006e366004610193565b6100ad565b7ff5d4d6ed1657736cfd625a04e0585c5def81b280f6bc1b7ed4add114e79f7e9a816040516100a29190610299565b60405180910390a150565b606081156100c4576100c1828401846103bb565b90505b7fcdc8ee677dc5ebe680fb18cebda5e26ba5ea1f0ba504a47e2a9a2ecb476dc98e6100ef87806104b1565b6100ff60408a0160208b0161051d565b8960400135338660405161011896959493929190610538565b60405180910390a1505050505050565b60006020828403121561013a57600080fd5b813567ffffffffffffffff81111561015157600080fd5b82016080818503121561016357600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461018e57600080fd5b919050565b6000806000806000608086880312156101ab57600080fd5b853567ffffffffffffffff8111156101c257600080fd5b8601606081890312156101d457600080fd5b94506101e26020870161016a565b935060408601359250606086013567ffffffffffffffff81111561020557600080fd5b8601601f8101881361021657600080fd5b803567ffffffffffffffff81111561022d57600080fd5b88602082840101111561023f57600080fd5b959894975092955050506020019190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff6102bb8361016a565b16602082015273ffffffffffffffffffffffffffffffffffffffff6102e26020840161016a565b1660408201526000604083013567ffffffffffffffff811680821461030657600080fd5b806060850152505060608301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261034357600080fd5b830160208101903567ffffffffffffffff81111561036057600080fd5b80360382131561036f57600080fd5b60808085015261038360a085018284610250565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156103cd57600080fd5b813567ffffffffffffffff8111156103e457600080fd5b8201601f810184136103f557600080fd5b803567ffffffffffffffff81111561040f5761040f61038c565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561047b5761047b61038c565b60405281815282820160200186101561049357600080fd5b81602084016020830137600091810160200191909152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126104e657600080fd5b83018035915067ffffffffffffffff82111561050157600080fd5b60200191503681900382131561051657600080fd5b9250929050565b60006020828403121561052f57600080fd5b6101638261016a565b60a08152600061054c60a08301888a610250565b73ffffffffffffffffffffffffffffffffffffffff8716602084015285604084015273ffffffffffffffffffffffffffffffffffffffff851660608401528281036080840152835180825260005b818110156105b65760208187018101518483018201520161059a565b5060006020828401015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168301019250505097965050505050505056fea264697066735822122023cfd100c0b5ffb64d0a74f749750529178249712786f8146b8cbbfeedf3ca8264736f6c634300081a0033"; type TestUniversalContractConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/UniversalContract.sol/UniversalContract__factory.ts b/v2/types/factories/UniversalContract.sol/UniversalContract__factory.ts index 1955f373..ed02f704 100644 --- a/v2/types/factories/UniversalContract.sol/UniversalContract__factory.ts +++ b/v2/types/factories/UniversalContract.sol/UniversalContract__factory.ts @@ -54,36 +54,6 @@ const _abi = [ outputs: [], stateMutability: "nonpayable", }, - { - type: "function", - name: "onRevert", - inputs: [ - { - name: "revertContext", - type: "tuple", - internalType: "struct RevertContext", - components: [ - { - name: "asset", - type: "address", - internalType: "address", - }, - { - name: "amount", - type: "uint64", - internalType: "uint64", - }, - { - name: "revertMessage", - type: "bytes", - internalType: "bytes", - }, - ], - }, - ], - outputs: [], - stateMutability: "nonpayable", - }, ] as const; export class UniversalContract__factory { diff --git a/v2/types/factories/ZetaConnectorBase__factory.ts b/v2/types/factories/ZetaConnectorBase__factory.ts index 47b37ccb..fd8dba49 100644 --- a/v2/types/factories/ZetaConnectorBase__factory.ts +++ b/v2/types/factories/ZetaConnectorBase__factory.ts @@ -310,6 +310,11 @@ const _abi = [ type: "tuple", internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -517,6 +522,11 @@ const _abi = [ indexed: false, internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", diff --git a/v2/types/factories/ZetaConnectorNative__factory.ts b/v2/types/factories/ZetaConnectorNative__factory.ts index cf2bedca..243cba45 100644 --- a/v2/types/factories/ZetaConnectorNative__factory.ts +++ b/v2/types/factories/ZetaConnectorNative__factory.ts @@ -347,6 +347,11 @@ const _abi = [ type: "tuple", internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -554,6 +559,11 @@ const _abi = [ indexed: false, internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -656,7 +666,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c060405234801561001057600080fd5b5060405161188c38038061188c83398101604081905261002f9161021a565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf60008261014e565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014e565b506101157f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361014e565b506101407f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014e565b50505050505050505061026e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101f45760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ac3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101f8565b5060005b92915050565b80516001600160a01b038116811461021557600080fd5b919050565b6000806000806080858703121561023057600080fd5b610239856101fe565b9350610247602086016101fe565b9250610255604086016101fe565b9150610263606086016101fe565b905092959194509250565b60805160a0516115b36102d9600039600081816101f7015281816104740152818161052501528181610644015281816107d80152818161088901526109710152600081816101ab01528181610496015281816104f8015281816107fa015261085c01526115b36000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635c975abb116100cd57806391d1485411610081578063a783c78911610066578063a783c78914610326578063d547741f1461034d578063e63ab1e91461036057600080fd5b806391d14854146102d8578063a217fddf1461031e57600080fd5b8063743e0c9b116100b2578063743e0c9b146102965780638456cb59146102a957806385f438c1146102b157600080fd5b80635c975abb146102785780635e3e9fef1461028357600080fd5b806321e093b1116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b806321e093b1146101f2578063248a9ca31461021957600080fd5b806301ffc9a714610156578063057e0f251461017e578063106e629014610193578063116191b6146101a6575b600080fd5b6101696101643660046110e4565b610387565b60405190151581526020015b60405180910390f35b61019161018c366004611198565b610420565b005b6101916101a1366004611230565b6105f0565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61023c610227366004611263565b60009081526002602052604090206001015490565b604051908152602001610175565b61019161025836600461127c565b6106cb565b61019161026b36600461127c565b6106f6565b61019161074f565b60015460ff16610169565b6101916102913660046112a8565b610784565b6101916102a4366004611263565b61094f565b610191610999565b61023c7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102e636600461127c565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61023c600081565b61023c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61019161035b36600461127c565b6109cb565b61023c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104286109f0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461045281610a33565b61045a610a3d565b6104bb73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000088610a7c565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610557907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a90600401611418565b600060405180830381600087803b15801561057157600080fd5b505af1158015610585573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c878787866040516105d59493929190611489565b60405180910390a2506105e86001600055565b505050505050565b6105f86109f0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062281610a33565b61062a610a3d565b61066b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a7c565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5846040516106b391815260200190565b60405180910390a2506106c66001600055565b505050565b6000828152600260205260409020600101546106e681610a33565b6106f08383610afd565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610745576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106c68282610bfd565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077981610a33565b610781610cbc565b50565b61078c6109f0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107b681610a33565b6107be610a3d565b61081f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a7c565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108b9907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114c0565b600060405180830381600087803b1580156108d357600080fd5b505af11580156108e7573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d86868660405161093593929190611512565b60405180910390a2506109486001600055565b5050505050565b610957610a3d565b61078173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d39565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109c381610a33565b610781610d7f565b6000828152600260205260409020600101546109e681610a33565b6106f08383610bfd565b600260005403610a2c576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107818133610dd8565b60015460ff1615610a7a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526106c691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e69565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bf557600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b933390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161041a565b50600061041a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bf557600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161041a565b610cc4610eff565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106f09186918216906323b872dd90608401610ab6565b610d87610a3d565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610d0f565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e65576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e8b73ffffffffffffffffffffffffffffffffffffffff841683610f3b565b90508051600014158015610eb0575080806020019051810190610eae919061152c565b155b156106c6576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e5c565b60015460ff16610a7a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f4983836000610f50565b9392505050565b606081471015610f8e576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e5c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610fb7919061154e565b60006040518083038185875af1925050503d8060008114610ff4576040519150601f19603f3d011682016040523d82523d6000602084013e610ff9565b606091505b5091509150611009868383611013565b9695505050505050565b60608261102857611023826110a2565b610f49565b815115801561104c575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561109b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e5c565b5080610f49565b8051156110b25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110f657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f4957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461114a57600080fd5b919050565b60008083601f84011261116157600080fd5b50813567ffffffffffffffff81111561117957600080fd5b60208301915083602082850101111561119157600080fd5b9250929050565b60008060008060008060a087890312156111b157600080fd5b6111ba87611126565b955060208701359450604087013567ffffffffffffffff8111156111dd57600080fd5b6111e989828a0161114f565b90955093505060608701359150608087013567ffffffffffffffff81111561121057600080fd5b87016060818a03121561122257600080fd5b809150509295509295509295565b60008060006060848603121561124557600080fd5b61124e84611126565b95602085013595506040909401359392505050565b60006020828403121561127557600080fd5b5035919050565b6000806040838503121561128f57600080fd5b8235915061129f60208401611126565b90509250929050565b6000806000806000608086880312156112c057600080fd5b6112c986611126565b945060208601359350604086013567ffffffffffffffff8111156112ec57600080fd5b6112f88882890161114f565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff61137182611126565b1682526000602082013567ffffffffffffffff811680821461139257600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126113ce57600080fd5b820160208101903567ffffffffffffffff8111156113eb57600080fd5b8036038213156113fa57600080fd5b6060604086015261140f60608601828461130a565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061146a60a08301858761130a565b828103608084015261147c8185611353565b9998505050505050505050565b8481526060602082015260006114a360608301858761130a565b82810360408401526114b58185611353565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114b560808301848661130a565b83815260406020820152600061140f60408301848661130a565b60006020828403121561153e57600080fd5b81518015158114610f4957600080fd5b6000825160005b8181101561156f5760208186018101518583015201611555565b50600092019182525091905056fea26469706673582212208568eb5447d9d0fee399f3e161164b36a7f43cc5bc13eb5835e3c9f436b2697664736f6c634300081a0033"; + "0x60c060405234801561001057600080fd5b506040516118b33803806118b383398101604081905261002f9161021a565b60016000819055805460ff19169055838383836001600160a01b038416158061005f57506001600160a01b038316155b8061007157506001600160a01b038216155b8061008357506001600160a01b038116155b156100a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100bf60008261014e565b506100ea7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361014e565b506101157f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361014e565b506101407f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261014e565b50505050505050505061026e565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101f45760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101ac3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101f8565b5060005b92915050565b80516001600160a01b038116811461021557600080fd5b919050565b6000806000806080858703121561023057600080fd5b610239856101fe565b9350610247602086016101fe565b9250610255604086016101fe565b9150610263606086016101fe565b905092959194509250565b60805160a0516115da6102d9600039600081816101e4015281816104740152818161054f01528181610600015281816107d801528181610889015261097101526000818161019801528181610571015281816105d3015281816107fa015261085c01526115da6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635c975abb116100cd57806391d1485411610081578063a783c78911610066578063a783c78914610326578063d547741f1461034d578063e63ab1e91461036057600080fd5b806391d14854146102d8578063a217fddf1461031e57600080fd5b8063743e0c9b116100b2578063743e0c9b146102965780638456cb59146102a957806385f438c1146102b157600080fd5b80635c975abb146102785780635e3e9fef1461028357600080fd5b8063248a9ca3116101245780632f2ff15d116101095780632f2ff15d1461024a57806336568abe1461025d5780633f4ba83a1461027057600080fd5b8063248a9ca3146102065780632ccb404d1461023757600080fd5b806301ffc9a714610156578063106e62901461017e578063116191b61461019357806321e093b1146101df575b600080fd5b6101696101643660046110e4565b610387565b60405190151581526020015b60405180910390f35b61019161018c36600461114f565b610420565b005b6101ba7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6101ba7f000000000000000000000000000000000000000000000000000000000000000081565b610229610214366004611182565b60009081526002602052604090206001015490565b604051908152602001610175565b6101916102453660046111e4565b6104fb565b61019161025836600461127c565b6106cb565b61019161026b36600461127c565b6106f6565b61019161074f565b60015460ff16610169565b6101916102913660046112a8565b610784565b6101916102a4366004611182565b61094f565b610191610999565b6102297f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6101696102e636600461127c565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610229600081565b6102297f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61019161035b36600461127c565b6109cb565b6102297f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061041a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6104286109f0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461045281610a33565b61045a610a3d565b61049b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168585610a7c565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5846040516104e391815260200190565b60405180910390a2506104f66001600055565b505050565b6105036109f0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461052d81610a33565b610535610a3d565b61059673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000088610a7c565b6040517f36c99f3b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b90610632907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161143f565b600060405180830381600087803b15801561064c57600080fd5b505af1158015610660573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167fa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b835378017878787866040516106b094939291906114b0565b60405180910390a2506106c36001600055565b505050505050565b6000828152600260205260409020600101546106e681610a33565b6106f08383610afd565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610745576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104f68282610bfd565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61077981610a33565b610781610cbc565b50565b61078c6109f0565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107b681610a33565b6107be610a3d565b61081f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000087610a7c565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab59906108b9907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016114e7565b600060405180830381600087803b1580156108d357600080fd5b505af11580156108e7573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d86868660405161093593929190611539565b60405180910390a2506109486001600055565b5050505050565b610957610a3d565b61078173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084610d39565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109c381610a33565b610781610d7f565b6000828152600260205260409020600101546109e681610a33565b6106f08383610bfd565b600260005403610a2c576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107818133610dd8565b60015460ff1615610a7a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526104f691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e69565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610bf557600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610b933390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161041a565b50600061041a565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610bf557600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161041a565b610cc4610eff565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526106f09186918216906323b872dd90608401610ab6565b610d87610a3d565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610d0f565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610e65576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602481018390526044015b60405180910390fd5b5050565b6000610e8b73ffffffffffffffffffffffffffffffffffffffff841683610f3b565b90508051600014158015610eb0575080806020019051810190610eae9190611553565b155b156104f6576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610e5c565b60015460ff16610a7a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060610f4983836000610f50565b9392505050565b606081471015610f8e576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610e5c565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051610fb79190611575565b60006040518083038185875af1925050503d8060008114610ff4576040519150601f19603f3d011682016040523d82523d6000602084013e610ff9565b606091505b5091509150611009868383611013565b9695505050505050565b60608261102857611023826110a2565b610f49565b815115801561104c575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561109b576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610e5c565b5080610f49565b8051156110b25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156110f657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f4957600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461114a57600080fd5b919050565b60008060006060848603121561116457600080fd5b61116d84611126565b95602085013595506040909401359392505050565b60006020828403121561119457600080fd5b5035919050565b60008083601f8401126111ad57600080fd5b50813567ffffffffffffffff8111156111c557600080fd5b6020830191508360208285010111156111dd57600080fd5b9250929050565b60008060008060008060a087890312156111fd57600080fd5b61120687611126565b955060208701359450604087013567ffffffffffffffff81111561122957600080fd5b61123589828a0161119b565b90955093505060608701359150608087013567ffffffffffffffff81111561125c57600080fd5b87016080818a03121561126e57600080fd5b809150509295509295509295565b6000806040838503121561128f57600080fd5b8235915061129f60208401611126565b90509250929050565b6000806000806000608086880312156112c057600080fd5b6112c986611126565b945060208601359350604086013567ffffffffffffffff8111156112ec57600080fd5b6112f88882890161119b565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff61137182611126565b16825273ffffffffffffffffffffffffffffffffffffffff61139560208301611126565b1660208301526000604082013567ffffffffffffffff81168082146113b957600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126113f557600080fd5b820160208101903567ffffffffffffffff81111561141257600080fd5b80360382131561142157600080fd5b6080606086015261143660808601828461130a565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061149160a08301858761130a565b82810360808401526114a38185611353565b9998505050505050505050565b8481526060602082015260006114ca60608301858761130a565b82810360408401526114dc8185611353565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006114dc60808301848661130a565b83815260406020820152600061143660408301848661130a565b60006020828403121561156557600080fd5b81518015158114610f4957600080fd5b6000825160005b81811015611596576020818601810151858301520161157c565b50600092019182525091905056fea2646970667358221220dc0c07f30c80680d98675e920337998abbeaccddeb0e3323337c2c843c731cd164736f6c634300081a0033"; type ZetaConnectorNativeConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/ZetaConnectorNonNative__factory.ts b/v2/types/factories/ZetaConnectorNonNative__factory.ts index b0a1e97f..bcf1f15b 100644 --- a/v2/types/factories/ZetaConnectorNonNative__factory.ts +++ b/v2/types/factories/ZetaConnectorNonNative__factory.ts @@ -373,6 +373,11 @@ const _abi = [ type: "tuple", internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -593,6 +598,11 @@ const _abi = [ indexed: false, internalType: "struct RevertContext", components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, { name: "asset", type: "address", @@ -662,7 +672,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c060405260001960035534801561001657600080fd5b5060405161178338038061178383398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516114ab6102d86000396000818161021d01528181610531015281816108290152818161099a01528181610aef0152610c110152600081816101d1015281816104a1015281816105040152818161079901526107fc01526114ab6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b8063248a9ca31161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b8063248a9ca31461023f5780632f2ff15d1461027057600080fd5b8063106e629011610160578063106e6290146101b9578063116191b6146101cc57806321e093b11461021857600080fd5b806301ffc9a71461017c578063057e0f25146101a4575b600080fd5b61018f61018a366004610fd3565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b236600461108e565b610462565b005b6101b76101c7366004611126565b6105fc565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b61026261024d366004611159565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761027e366004611172565b6106a1565b6101b7610291366004611172565b6106cc565b6101b7610725565b60015460ff1661018f565b6101b76102b736600461119e565b61075a565b6101b76102ca366004611159565b6108ef565b6101b76102dd366004611159565b61095d565b6101b7610a07565b6102627f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611172565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610262600081565b6102627f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611172565b610a39565b61026260035481565b6102627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610aa1565b61049c610aab565b6104c77f00000000000000000000000000000000000000000000000000000000000000008785610aea565b6040517fd0b492c300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d0b492c390610563907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a9060040161130e565b600060405180830381600087803b15801561057d57600080fd5b505af1158015610591573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167f52d8cccccf212da1f2b87140143958eb3bbf8a92e3833c50a8bf8a719a0da44c878787866040516105e1949392919061137f565b60405180910390a2506105f46001600055565b505050505050565b610604610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461062e81610aa1565b610636610aab565b610641848484610aea565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161068991815260200190565b60405180910390a25061069c6001600055565b505050565b6000828152600260205260409020600101546106bc81610aa1565b6106c68383610c72565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461071b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61069c8282610d72565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074f81610aa1565b610757610e31565b50565b610762610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078c81610aa1565b610794610aab565b6107bf7f00000000000000000000000000000000000000000000000000000000000000008684610aea565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610859907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016113b6565b600060405180830381600087803b15801561087357600080fd5b505af1158015610887573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d8686866040516108d593929190611408565b60405180910390a2506108e86001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61091981610aa1565b610921610aab565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610965610aab565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109f357600080fd5b505af11580156108e8573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3181610aa1565b610757610eae565b600082815260026020526040902060010154610a5481610aa1565b6106c68383610d72565b600260005403610a9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107578133610f07565b60015460ff1615610ae8576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7c9190611422565b610b86908461143b565b1115610bbe576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d083390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e39610f97565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610eb6610aab565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e84565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f93576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ae8576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fe557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461101557600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461104057600080fd5b919050565b60008083601f84011261105757600080fd5b50813567ffffffffffffffff81111561106f57600080fd5b60208301915083602082850101111561108757600080fd5b9250929050565b60008060008060008060a087890312156110a757600080fd5b6110b08761101c565b955060208701359450604087013567ffffffffffffffff8111156110d357600080fd5b6110df89828a01611045565b90955093505060608701359150608087013567ffffffffffffffff81111561110657600080fd5b87016060818a03121561111857600080fd5b809150509295509295509295565b60008060006060848603121561113b57600080fd5b6111448461101c565b95602085013595506040909401359392505050565b60006020828403121561116b57600080fd5b5035919050565b6000806040838503121561118557600080fd5b823591506111956020840161101c565b90509250929050565b6000806000806000608086880312156111b657600080fd5b6111bf8661101c565b945060208601359350604086013567ffffffffffffffff8111156111e257600080fd5b6111ee88828901611045565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff6112678261101c565b1682526000602082013567ffffffffffffffff811680821461128857600080fd5b6020850152506040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126112c457600080fd5b820160208101903567ffffffffffffffff8111156112e157600080fd5b8036038213156112f057600080fd5b60606040860152611305606086018284611200565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061136060a083018587611200565b82810360808401526113728185611249565b9998505050505050505050565b848152606060208201526000611399606083018587611200565b82810360408401526113ab8185611249565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113ab608083018486611200565b838152604060208201526000611305604083018486611200565b60006020828403121561143457600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212208052a0b07c987cb20e29d9c7c23109b8ff8b4b966ca2e18c207a88e5b4d79d4264736f6c634300081a0033"; + "0x60c060405260001960035534801561001657600080fd5b506040516117aa3803806117aa83398101604081905261003591610220565b60016000819055805460ff19169055838383836001600160a01b038416158061006557506001600160a01b038316155b8061007757506001600160a01b038216155b8061008957506001600160a01b038116155b156100a75760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03808516608052831660a0526100c5600082610154565b506100f07f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610154565b5061011b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610154565b506101467f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610154565b505050505050505050610274565b60008281526002602090815260408083206001600160a01b038516845290915281205460ff166101fa5760008381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101b23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101fe565b5060005b92915050565b80516001600160a01b038116811461021b57600080fd5b919050565b6000806000806080858703121561023657600080fd5b61023f85610204565b935061024d60208601610204565b925061025b60408601610204565b915061026960608601610204565b905092959194509250565b60805160a0516114d26102d86000396000818161020a015281816105d6015281816108290152818161099a01528181610aef0152610c110152600081816101be01528181610546015281816105a90152818161079901526107fc01526114d26000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80635e3e9fef116100d857806391d148541161008c578063d547741f11610066578063d547741f14610386578063d5abeb0114610399578063e63ab1e9146103a257600080fd5b806391d1485414610311578063a217fddf14610357578063a783c7891461035f57600080fd5b8063743e0c9b116100bd578063743e0c9b146102cf5780638456cb59146102e257806385f438c1146102ea57600080fd5b80635e3e9fef146102a95780636f8b44b0146102bc57600080fd5b80632ccb404d1161012f57806336568abe1161011457806336568abe146102835780633f4ba83a146102965780635c975abb1461029e57600080fd5b80632ccb404d1461025d5780632f2ff15d1461027057600080fd5b8063116191b611610160578063116191b6146101b957806321e093b114610205578063248a9ca31461022c57600080fd5b806301ffc9a71461017c578063106e6290146101a4575b600080fd5b61018f61018a366004610fd3565b6103c9565b60405190151581526020015b60405180910390f35b6101b76101b2366004611045565b610462565b005b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b6101e07f000000000000000000000000000000000000000000000000000000000000000081565b61024f61023a366004611078565b60009081526002602052604090206001015490565b60405190815260200161019b565b6101b761026b3660046110da565b610507565b6101b761027e366004611172565b6106a1565b6101b7610291366004611172565b6106cc565b6101b7610725565b60015460ff1661018f565b6101b76102b736600461119e565b61075a565b6101b76102ca366004611078565b6108ef565b6101b76102dd366004611078565b61095d565b6101b7610a07565b61024f7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b61018f61031f366004611172565b600091825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61024f600081565b61024f7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101b7610394366004611172565b610a39565b61024f60035481565b61024f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061045c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61046a610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461049481610aa1565b61049c610aab565b6104a7848484610aea565b8373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5846040516104ef91815260200190565b60405180910390a2506105026001600055565b505050565b61050f610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461053981610aa1565b610541610aab565b61056c7f00000000000000000000000000000000000000000000000000000000000000008785610aea565b6040517f36c99f3b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906336c99f3b90610608907f0000000000000000000000000000000000000000000000000000000000000000908b908b908b908b908a90600401611335565b600060405180830381600087803b15801561062257600080fd5b505af1158015610636573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167fa99787224bed6d592c223365ff0f91d203cd2eea00f6b1be8b0263b8353780178787878660405161068694939291906113a6565b60405180910390a2506106996001600055565b505050505050565b6000828152600260205260409020600101546106bc81610aa1565b6106c68383610c72565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461071b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105028282610d72565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61074f81610aa1565b610757610e31565b50565b610762610a5e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461078c81610aa1565b610794610aab565b6107bf7f00000000000000000000000000000000000000000000000000000000000000008684610aea565b6040517f5131ab5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635131ab5990610859907f0000000000000000000000000000000000000000000000000000000000000000908a908a908a908a906004016113dd565b600060405180830381600087803b15801561087357600080fd5b505af1158015610887573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d8686866040516108d59392919061142f565b60405180910390a2506108e86001600055565b5050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61091981610aa1565b610921610aab565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610965610aab565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b1580156109f357600080fd5b505af11580156108e8573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a3181610aa1565b610757610eae565b600082815260026020526040902060010154610a5481610aa1565b6106c68383610d72565b600260005403610a9a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6107578133610f07565b60015460ff1615610ae8576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7c9190611449565b610b869084611462565b1115610bbe576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f1e458bee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631e458bee90606401600060405180830381600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b50505050505050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d083390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161045c565b50600061045c565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d6a57600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161045c565b610e39610f97565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b610eb6610aab565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610e84565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f93576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440160405180910390fd5b5050565b60015460ff16610ae8576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215610fe557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461101557600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461104057600080fd5b919050565b60008060006060848603121561105a57600080fd5b6110638461101c565b95602085013595506040909401359392505050565b60006020828403121561108a57600080fd5b5035919050565b60008083601f8401126110a357600080fd5b50813567ffffffffffffffff8111156110bb57600080fd5b6020830191508360208285010111156110d357600080fd5b9250929050565b60008060008060008060a087890312156110f357600080fd5b6110fc8761101c565b955060208701359450604087013567ffffffffffffffff81111561111f57600080fd5b61112b89828a01611091565b90955093505060608701359150608087013567ffffffffffffffff81111561115257600080fd5b87016080818a03121561116457600080fd5b809150509295509295509295565b6000806040838503121561118557600080fd5b823591506111956020840161101c565b90509250929050565b6000806000806000608086880312156111b657600080fd5b6111bf8661101c565b945060208601359350604086013567ffffffffffffffff8111156111e257600080fd5b6111ee88828901611091565b96999598509660600135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff6112678261101c565b16825273ffffffffffffffffffffffffffffffffffffffff61128b6020830161101c565b1660208301526000604082013567ffffffffffffffff81168082146112af57600080fd5b6040850152506060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126112eb57600080fd5b820160208101903567ffffffffffffffff81111561130857600080fd5b80360382131561131757600080fd5b6080606086015261132c608086018284611200565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260a06060820152600061138760a083018587611200565b82810360808401526113998185611249565b9998505050505050505050565b8481526060602082015260006113c0606083018587611200565b82810360408401526113d28185611249565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201528360408201526080606082015260006113d2608083018486611200565b83815260406020820152600061132c604083018486611200565b60006020828403121561145b57600080fd5b5051919050565b8082018082111561045c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220276d75628e17e347d14c84f90b610fc13968efff6201b1233b79eeaa7cb742c964736f6c634300081a0033"; type ZetaConnectorNonNativeConstructorParams = | [signer?: Signer]