Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 33 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Send From | 17501405 | 439 days ago | IN | 0.00074827 ETH | 0.00378286 | ||||
Transfer Ownersh... | 16902543 | 523 days ago | IN | 0 ETH | 0.00039917 | ||||
Transfer Ownersh... | 16507437 | 579 days ago | IN | 0 ETH | 0.00039674 | ||||
Send From | 16249105 | 615 days ago | IN | 0.00080248 ETH | 0.00712657 | ||||
Send From | 16245414 | 615 days ago | IN | 0.00080248 ETH | 0.00276453 | ||||
Send From | 16122534 | 633 days ago | IN | 0.00079491 ETH | 0.00285998 | ||||
Send From | 15898878 | 664 days ago | IN | 0.00079491 ETH | 0.00411863 | ||||
Send From | 15890452 | 665 days ago | IN | 0.00079491 ETH | 0.00594737 | ||||
Send From | 15887197 | 665 days ago | IN | 0.00079491 ETH | 0.00320627 | ||||
Send From | 15864924 | 669 days ago | IN | 0.00079491 ETH | 0.00213056 | ||||
Send From | 15819571 | 675 days ago | IN | 0.00079491 ETH | 0.00502899 | ||||
Send From | 15802830 | 677 days ago | IN | 0.00079491 ETH | 0.00324632 | ||||
Send From | 15697819 | 692 days ago | IN | 0.00079491 ETH | 0.00401763 | ||||
Set Trusted Remo... | 15697814 | 692 days ago | IN | 0 ETH | 0.0016542 | ||||
Send From | 15482366 | 723 days ago | IN | 0.00079491 ETH | 0.00201404 | ||||
Send From | 15481208 | 724 days ago | IN | 0.00079491 ETH | 0.00130083 | ||||
Send From | 15468927 | 726 days ago | IN | 0.00079491 ETH | 0.0007253 | ||||
Send From | 15438073 | 730 days ago | IN | 0.00204019 ETH | 0.00485229 | ||||
Send From | 15425528 | 732 days ago | IN | 0.00092319 ETH | 0.00176994 | ||||
Send From | 15411433 | 735 days ago | IN | 0.00177381 ETH | 0.00228129 | ||||
Send From | 15387391 | 739 days ago | IN | 0.00098023 ETH | 0.00311287 | ||||
Send From | 15385993 | 739 days ago | IN | 0.0012943 ETH | 0.00151316 | ||||
Send From | 15369321 | 741 days ago | IN | 0.0014431 ETH | 0.0022913 | ||||
Send From | 15366065 | 742 days ago | IN | 0.00141601 ETH | 0.0049807 | ||||
Send From | 15358749 | 743 days ago | IN | 0.00108519 ETH | 0.00196954 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
17501405 | 439 days ago | 0.00074827 ETH | ||||
16249105 | 615 days ago | 0.00080248 ETH | ||||
16245414 | 615 days ago | 0.00080248 ETH | ||||
16122534 | 633 days ago | 0.00079491 ETH | ||||
15898878 | 664 days ago | 0.00079491 ETH | ||||
15890452 | 665 days ago | 0.00079491 ETH | ||||
15887197 | 665 days ago | 0.00079491 ETH | ||||
15864924 | 669 days ago | 0.00079491 ETH | ||||
15819571 | 675 days ago | 0.00079491 ETH | ||||
15802830 | 677 days ago | 0.00079491 ETH | ||||
15697819 | 692 days ago | 0.00079491 ETH | ||||
15482366 | 723 days ago | 0.00079491 ETH | ||||
15481208 | 724 days ago | 0.00079491 ETH | ||||
15468927 | 726 days ago | 0.00079491 ETH | ||||
15438073 | 730 days ago | 0.00204019 ETH | ||||
15425528 | 732 days ago | 0.00092319 ETH | ||||
15411433 | 735 days ago | 0.00177381 ETH | ||||
15387391 | 739 days ago | 0.00098023 ETH | ||||
15385993 | 739 days ago | 0.0012943 ETH | ||||
15369321 | 741 days ago | 0.0014431 ETH | ||||
15366065 | 742 days ago | 0.00141601 ETH | ||||
15358749 | 743 days ago | 0.00108519 ETH | ||||
15356186 | 743 days ago | 0.00160035 ETH | ||||
15353885 | 744 days ago | 0.00183092 ETH | ||||
15352579 | 744 days ago | 0.00164595 ETH |
Loading...
Loading
Contract Name:
BubbleBridgeEth
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-14 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/LzBridge/interfaces/ILayerZeroReceiver.sol pragma solidity >=0.5.0; interface ILayerZeroReceiver { // @notice LayerZero endpoint will invoke this function to deliver the message on the destination // @param _srcChainId - the source endpoint identifier // @param _srcAddress - the source sending contract address from the source chain // @param _nonce - the ordered message nonce // @param _payload - the signed payload is the UA bytes has encoded to be sent function lzReceive(uint16 _srcChainId, bytes calldata _srcAddress, uint64 _nonce, bytes calldata _payload) external; } // File contracts/LzBridge/interfaces/ILayerZeroUserApplicationConfig.sol pragma solidity >=0.5.0; interface ILayerZeroUserApplicationConfig { // @notice set the configuration of the LayerZero messaging library of the specified version // @param _version - messaging library version // @param _chainId - the chainId for the pending config change // @param _configType - type of configuration. every messaging library has its own convention. // @param _config - configuration in the bytes. can encode arbitrary content. function setConfig(uint16 _version, uint16 _chainId, uint _configType, bytes calldata _config) external; // @notice set the send() LayerZero messaging library version to _version // @param _version - new messaging library version function setSendVersion(uint16 _version) external; // @notice set the lzReceive() LayerZero messaging library version to _version // @param _version - new messaging library version function setReceiveVersion(uint16 _version) external; // @notice Only when the UA needs to resume the message flow in blocking mode and clear the stored payload // @param _srcChainId - the chainId of the source chain // @param _srcAddress - the contract address of the source contract at the source chain function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external; } // File contracts/LzBridge/interfaces/ILayerZeroEndpoint.sol pragma solidity >=0.5.0; interface ILayerZeroEndpoint is ILayerZeroUserApplicationConfig { // @notice send a LayerZero message to the specified address at a LayerZero endpoint. // @param _dstChainId - the destination chain identifier // @param _destination - the address on destination chain (in bytes). address length/format may vary by chains // @param _payload - a custom bytes payload to send to the destination contract // @param _refundAddress - if the source transaction is cheaper than the amount of value passed, refund the additional amount to this address // @param _zroPaymentAddress - the address of the ZRO token holder who would pay for the transaction // @param _adapterParams - parameters for custom functionality. e.g. receive airdropped native gas from the relayer on destination function send(uint16 _dstChainId, bytes calldata _destination, bytes calldata _payload, address payable _refundAddress, address _zroPaymentAddress, bytes calldata _adapterParams) external payable; // @notice used by the messaging library to publish verified payload // @param _srcChainId - the source chain identifier // @param _srcAddress - the source contract (as bytes) at the source chain // @param _dstAddress - the address on destination chain // @param _nonce - the unbound message ordering nonce // @param _gasLimit - the gas limit for external contract execution // @param _payload - verified payload to send to the destination contract function receivePayload(uint16 _srcChainId, bytes calldata _srcAddress, address _dstAddress, uint64 _nonce, uint _gasLimit, bytes calldata _payload) external; // @notice get the inboundNonce of a lzApp from a source chain which could be EVM or non-EVM chain // @param _srcChainId - the source chain identifier // @param _srcAddress - the source chain contract address function getInboundNonce(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (uint64); // @notice get the outboundNonce from this source chain which, consequently, is always an EVM // @param _srcAddress - the source chain contract address function getOutboundNonce(uint16 _dstChainId, address _srcAddress) external view returns (uint64); // @notice gets a quote in source native gas, for the amount that send() requires to pay for message delivery // @param _dstChainId - the destination chain identifier // @param _userApplication - the user app address on this EVM chain // @param _payload - the custom message to send over LayerZero // @param _payInZRO - if false, user app pays the protocol fee in native token // @param _adapterParam - parameters for the adapter service, e.g. send some dust native token to dstChain function estimateFees(uint16 _dstChainId, address _userApplication, bytes calldata _payload, bool _payInZRO, bytes calldata _adapterParam) external view returns (uint nativeFee, uint zroFee); // @notice get this Endpoint's immutable source identifier function getChainId() external view returns (uint16); // @notice the interface to retry failed message on this Endpoint destination // @param _srcChainId - the source chain identifier // @param _srcAddress - the source chain contract address // @param _payload - the payload to be retried function retryPayload(uint16 _srcChainId, bytes calldata _srcAddress, bytes calldata _payload) external; // @notice query if any STORED payload (message blocking) at the endpoint. // @param _srcChainId - the source chain identifier // @param _srcAddress - the source chain contract address function hasStoredPayload(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (bool); // @notice query if the _libraryAddress is valid for sending msgs. // @param _userApplication - the user app address on this EVM chain function getSendLibraryAddress(address _userApplication) external view returns (address); // @notice query if the _libraryAddress is valid for receiving msgs. // @param _userApplication - the user app address on this EVM chain function getReceiveLibraryAddress(address _userApplication) external view returns (address); // @notice query if the non-reentrancy guard for send() is on // @return true if the guard is on. false otherwise function isSendingPayload() external view returns (bool); // @notice query if the non-reentrancy guard for receive() is on // @return true if the guard is on. false otherwise function isReceivingPayload() external view returns (bool); // @notice get the configuration of the LayerZero messaging library of the specified version // @param _version - messaging library version // @param _chainId - the chainId for the pending config change // @param _userApplication - the contract address of the user application // @param _configType - type of configuration. every messaging library has its own convention. function getConfig(uint16 _version, uint16 _chainId, address _userApplication, uint _configType) external view returns (bytes memory); // @notice get the send() LayerZero messaging library version // @param _userApplication - the contract address of the user application function getSendVersion(address _userApplication) external view returns (uint16); // @notice get the lzReceive() LayerZero messaging library version // @param _userApplication - the contract address of the user application function getReceiveVersion(address _userApplication) external view returns (uint16); } // File contracts/LzBridge/lib/LzApp.sol pragma solidity ^0.8.0; /* * a generic LzReceiver implementation */ abstract contract LzApp is Ownable, ILayerZeroReceiver, ILayerZeroUserApplicationConfig { ILayerZeroEndpoint public immutable lzEndpoint; mapping(uint16 => bytes) public trustedRemoteLookup; event SetTrustedRemote(uint16 _srcChainId, bytes _srcAddress); constructor(address _endpoint) { lzEndpoint = ILayerZeroEndpoint(_endpoint); } function lzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) public virtual override { // lzReceive must be called by the endpoint for security require(_msgSender() == address(lzEndpoint), "LzApp: invalid endpoint caller"); bytes memory trustedRemote = trustedRemoteLookup[_srcChainId]; // if will still block the message pathway from (srcChainId, srcAddress). should not receive message from untrusted remote. require(_srcAddress.length == trustedRemote.length && keccak256(_srcAddress) == keccak256(trustedRemote), "LzApp: invalid source sending contract"); _blockingLzReceive(_srcChainId, _srcAddress, _nonce, _payload); } // abstract function - the default behaviour of LayerZero is blocking. See: NonblockingLzApp if you dont need to enforce ordered messaging function _blockingLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) internal virtual; function _lzSend(uint16 _dstChainId, bytes memory _payload, address payable _refundAddress, address _zroPaymentAddress, bytes memory _adapterParams) internal virtual { bytes memory trustedRemote = trustedRemoteLookup[_dstChainId]; require(trustedRemote.length != 0, "LzApp: destination chain is not a trusted source"); lzEndpoint.send{value: msg.value}(_dstChainId, trustedRemote, _payload, _refundAddress, _zroPaymentAddress, _adapterParams); } //---------------------------UserApplication config---------------------------------------- function getConfig(uint16 _version, uint16 _chainId, address, uint _configType) external view returns (bytes memory) { return lzEndpoint.getConfig(_version, _chainId, address(this), _configType); } // generic config for LayerZero user Application function setConfig(uint16 _version, uint16 _chainId, uint _configType, bytes calldata _config) external override onlyOwner { lzEndpoint.setConfig(_version, _chainId, _configType, _config); } function setSendVersion(uint16 _version) external override onlyOwner { lzEndpoint.setSendVersion(_version); } function setReceiveVersion(uint16 _version) external override onlyOwner { lzEndpoint.setReceiveVersion(_version); } function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external override onlyOwner { lzEndpoint.forceResumeReceive(_srcChainId, _srcAddress); } // allow owner to set it multiple times. function setTrustedRemote(uint16 _srcChainId, bytes calldata _srcAddress) external onlyOwner { trustedRemoteLookup[_srcChainId] = _srcAddress; emit SetTrustedRemote(_srcChainId, _srcAddress); } //--------------------------- VIEW FUNCTION ---------------------------------------- function isTrustedRemote(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (bool) { bytes memory trustedSource = trustedRemoteLookup[_srcChainId]; return keccak256(trustedSource) == keccak256(_srcAddress); } } // File contracts/LzBridge/lib/NonblockingLzApp.sol pragma solidity ^0.8.0; /* * the default LayerZero messaging behaviour is blocking, i.e. any failed message will block the channel * this abstract class try-catch all fail messages and store locally for future retry. hence, non-blocking * NOTE: if the srcAddress is not configured properly, it will still block the message pathway from (srcChainId, srcAddress) */ abstract contract NonblockingLzApp is LzApp { constructor(address _endpoint) LzApp(_endpoint) {} mapping(uint16 => mapping(bytes => mapping(uint64 => bytes32))) public failedMessages; event MessageFailed(uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes _payload); // overriding the virtual function in LzReceiver function _blockingLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) internal virtual override { // try-catch all errors/exceptions try this.nonblockingLzReceive(_srcChainId, _srcAddress, _nonce, _payload) { // do nothing } catch { // error / exception failedMessages[_srcChainId][_srcAddress][_nonce] = keccak256(_payload); emit MessageFailed(_srcChainId, _srcAddress, _nonce, _payload); } } function nonblockingLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) public virtual { // only internal transaction require(_msgSender() == address(this), "NonblockingLzApp: caller must be LzApp"); _nonblockingLzReceive(_srcChainId, _srcAddress, _nonce, _payload); } //@notice override this function function _nonblockingLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) internal virtual; function retryMessage(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) public payable virtual { // assert there is message to retry bytes32 payloadHash = failedMessages[_srcChainId][_srcAddress][_nonce]; require(payloadHash != bytes32(0), "NonblockingLzApp: no stored message"); require(keccak256(_payload) == payloadHash, "NonblockingLzApp: invalid payload"); // clear the stored message failedMessages[_srcChainId][_srcAddress][_nonce] = bytes32(0); // execute the message. revert if it fails again _nonblockingLzReceive(_srcChainId, _srcAddress, _nonce, _payload); } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File contracts/LzBridge/interfaces/IOFTCore.sol pragma solidity ^0.8.0; /** * @dev Interface of the IOFT core standard */ interface IOFTCore is IERC165 { /** * @dev estimate send token `_tokenId` to (`_dstChainId`, `_toAddress`) * _dstChainId - L0 defined chain id to send tokens too * _toAddress - dynamic bytes array which contains the address to whom you are sending tokens to on the dstChain * _amount - amount of the tokens to transfer * _useZro - indicates to use zro to pay L0 fees * _adapterParam - flexible bytes array to indicate messaging adapter services in L0 */ function estimateSendFee(uint16 _dstChainId, bytes calldata _toAddress, uint _amount, bool _useZro, bytes calldata _adapterParams) external view returns (uint nativeFee, uint zroFee); /** * @dev send `_amount` amount of token to (`_dstChainId`, `_toAddress`) from msg.sender * `_dstChainId` the destination chain identifier * `_toAddress` can be any size depending on the `dstChainId`. * `_amount` the quantity of tokens in wei * `_refundAddress` the address LayerZero refunds if too much message fee is sent * `_zroPaymentAddress` set to address(0x0) if not paying in ZRO (LayerZero Token) * `_adapterParams` is a flexible bytes array to indicate messaging adapter services */ function sendFrom(uint16 _dstChainId, bytes calldata _toAddress, uint _amount, address payable _refundAddress, address _zroPaymentAddress, bytes calldata _adapterParams) external payable; /** * @dev Emitted when `_amount` tokens are moved from the `_sender` to (`_dstChainId`, `_toAddress`) * `_nonce` is the outbound nonce */ event SendToChain(address indexed _sender, uint16 indexed _dstChainId, bytes indexed _toAddress, uint _amount, uint64 _nonce); /** * @dev Emitted when `_amount` tokens are received from `_srcChainId` into the `_toAddress` on the local chain. * `_nonce` is the inbound nonce. */ event ReceiveFromChain(uint16 indexed _srcChainId, bytes indexed _srcAddress, address indexed _toAddress, uint _amount, uint64 _nonce); } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File contracts/LzBridge/lib/OFTCore.sol pragma solidity ^0.8.0; abstract contract OFTCore is NonblockingLzApp, ERC165, IOFTCore { constructor(address _lzEndpoint) NonblockingLzApp(_lzEndpoint) {} function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IOFTCore).interfaceId || super.supportsInterface(interfaceId); } function estimateSendFee(uint16 _dstChainId, bytes memory _toAddress, uint _amount, bool _useZro, bytes memory _adapterParams) public view virtual override returns (uint nativeFee, uint zroFee) { // mock the payload for send() bytes memory payload = abi.encode(_toAddress, _amount); return lzEndpoint.estimateFees(_dstChainId, address(this), payload, _useZro, _adapterParams); } function sendFrom(uint16 _dstChainId, bytes memory _toAddress, uint _amount, address payable _refundAddress, address _zroPaymentAddress, bytes memory _adapterParams) public payable virtual override { _send(msg.sender, _dstChainId, _toAddress, _amount, _refundAddress, _zroPaymentAddress, _adapterParams); } function _nonblockingLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) internal virtual override { // decode and load the toAddress (bytes memory toAddressBytes, uint amount) = abi.decode(_payload, (bytes, uint)); address toAddress; assembly { toAddress := mload(add(toAddressBytes, 20)) } _creditTo(_srcChainId, toAddress, amount); emit ReceiveFromChain(_srcChainId, _srcAddress, toAddress, amount, _nonce); } function _send(address _from, uint16 _dstChainId, bytes memory _toAddress, uint _amount, address payable _refundAddress, address _zroPaymentAddress, bytes memory _adapterParams) internal virtual { _debitFrom(_from, _dstChainId, _toAddress, _amount); bytes memory payload = abi.encode(_toAddress, _amount); _lzSend(_dstChainId, payload, _refundAddress, _zroPaymentAddress, _adapterParams); uint64 nonce = lzEndpoint.getOutboundNonce(_dstChainId, address(this)); emit SendToChain(_from, _dstChainId, _toAddress, _amount, nonce); } function _debitFrom(address _from, uint16 _dstChainId, bytes memory _toAddress, uint _amount) internal virtual; function _creditTo(uint16 _srcChainId, address _toAddress, uint _amount) internal virtual; } // File contracts/LzBridge/BubbleBridgeEth.sol pragma solidity ^0.8.0; interface IBubbles is IERC20 { function burn(uint256 amount) external; function mint(address recipient, uint256 amount) external; } contract BubbleBridgeEth is OFTCore { IERC20 public Bubbles; constructor(address _lzEndpoint, address _bubbles) OFTCore(_lzEndpoint) { Bubbles = IERC20(_bubbles); } function _debitFrom(address _from, uint16, bytes memory, uint _amount) internal virtual override { uint256 currentAllowance = Bubbles.allowance(_from, address(this)); if (currentAllowance != type(uint256).max) { require(currentAllowance >= _amount, "ERC20: insufficient allowance"); } Bubbles.transferFrom(_from, address(this), _amount); IBubbles(address(Bubbles)).burn(_amount); } function _creditTo(uint16, address _toAddress, uint _amount) internal virtual override { IBubbles(address(Bubbles)).mint(_toAddress, _amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_lzEndpoint","type":"address"},{"internalType":"address","name":"_bubbles","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"MessageFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":true,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":true,"internalType":"address","name":"_toAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"}],"name":"ReceiveFromChain","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_sender","type":"address"},{"indexed":true,"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"indexed":true,"internalType":"bytes","name":"_toAddress","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"}],"name":"SendToChain","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"}],"name":"SetTrustedRemote","type":"event"},{"inputs":[],"name":"Bubbles","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"_toAddress","type":"bytes"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_useZro","type":"bool"},{"internalType":"bytes","name":"_adapterParams","type":"bytes"}],"name":"estimateSendFee","outputs":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"zroFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint64","name":"","type":"uint64"}],"name":"failedMessages","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"}],"name":"forceResumeReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"},{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"_configType","type":"uint256"}],"name":"getConfig","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"}],"name":"isTrustedRemote","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lzEndpoint","outputs":[{"internalType":"contract ILayerZeroEndpoint","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"nonblockingLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"retryMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"_toAddress","type":"bytes"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address payable","name":"_refundAddress","type":"address"},{"internalType":"address","name":"_zroPaymentAddress","type":"address"},{"internalType":"bytes","name":"_adapterParams","type":"bytes"}],"name":"sendFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"},{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"_configType","type":"uint256"},{"internalType":"bytes","name":"_config","type":"bytes"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"setReceiveVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"setSendVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"}],"name":"setTrustedRemote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"trustedRemoteLookup","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b5060405162002206380380620022068339810160408190526200003491620000e0565b818080620000423362000073565b6001600160a01b03908116608052600380546001600160a01b03191694909116939093179092555062000118915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000db57600080fd5b919050565b60008060408385031215620000f457600080fd5b620000ff83620000c3565b91506200010f60208401620000c3565b90509250929050565b60805161209362000173600039600081816103a901528181610461015281816106ef0152818161078a01528181610819015281816109a901528181610b9d01528181610ede01528181611241015261168b01526120936000f3fe60806040526004361061015e5760003560e01c8063715018a6116100c0578063cbed8b9c11610074578063eb8d72b711610059578063eb8d72b7146103fe578063f2fde38b1461041e578063f5ecbdbc1461043e57600080fd5b8063cbed8b9c146103cb578063d1deba1f146103eb57600080fd5b806377d15311116100a557806377d15311146103665780638da5cb5b14610379578063b353aaa71461039757600080fd5b8063715018a6146103245780637533d7881461033957600080fd5b80632a205e3d1161011757806342d65a8d116100fc57806342d65a8d146102875780635b8c41e6146102a757806366ad5c8a1461030457600080fd5b80632a205e3d146102325780633d8b38f61461026757600080fd5b806305d6f0911161014857806305d6f091146101ba57806307e0db17146101f257806310ddb1371461021257600080fd5b80621d35671461016357806301ffc9a714610185575b600080fd5b34801561016f57600080fd5b5061018361017e366004611891565b61045e565b005b34801561019157600080fd5b506101a56101a036600461191a565b61061c565b60405190151581526020015b60405180910390f35b3480156101c657600080fd5b506003546101da906001600160a01b031681565b6040516001600160a01b0390911681526020016101b1565b3480156101fe57600080fd5b5061018361020d366004611963565b6106b5565b34801561021e57600080fd5b5061018361022d366004611963565b610750565b34801561023e57600080fd5b5061025261024d36600461198c565b6107c1565b604080519283526020830191909152016101b1565b34801561027357600080fd5b506101a5610282366004611a68565b6108a5565b34801561029357600080fd5b506101836102a2366004611a68565b610971565b3480156102b357600080fd5b506102f66102c2366004611abb565b6002602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b6040519081526020016101b1565b34801561031057600080fd5b5061018361031f366004611891565b610a19565b34801561033057600080fd5b50610183610aa0565b34801561034557600080fd5b50610359610354366004611963565b610ab4565b6040516101b19190611b75565b610183610374366004611b9d565b610b4e565b34801561038557600080fd5b506000546001600160a01b03166101da565b3480156103a357600080fd5b506101da7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103d757600080fd5b506101836103e6366004611c43565b610b65565b6101836103f9366004611891565b610c13565b34801561040a57600080fd5b50610183610419366004611a68565b610d9d565b34801561042a57600080fd5b50610183610439366004611cb2565b610e04565b34801561044a57600080fd5b50610359610459366004611ccf565b610e94565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146104db5760405162461bcd60e51b815260206004820152601e60248201527f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c6572000060448201526064015b60405180910390fd5b61ffff8416600090815260016020526040812080546104f990611d1c565b80601f016020809104026020016040519081016040528092919081815260200182805461052590611d1c565b80156105725780601f1061054757610100808354040283529160200191610572565b820191906000526020600020905b81548152906001019060200180831161055557829003601f168201915b5050505050905080518451148015610597575080805190602001208480519060200120145b6106095760405162461bcd60e51b815260206004820152602660248201527f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016104d2565b61061585858585610f5e565b5050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5df10d2c0000000000000000000000000000000000000000000000000000000014806106af57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6106bd611069565b6040517f07e0db1700000000000000000000000000000000000000000000000000000000815261ffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906307e0db17906024015b600060405180830381600087803b15801561073c57600080fd5b505af1158015610615573d6000803e3d6000fd5b610758611069565b6040517f10ddb13700000000000000000000000000000000000000000000000000000000815261ffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906310ddb13790602401610722565b600080600086866040516020016107d9929190611d57565b60408051601f19818403018152908290527f40a7bb1000000000000000000000000000000000000000000000000000000000825291506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906340a7bb1090610856908b90309086908b908b90600401611d79565b6040805180830381865afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190611dcb565b92509250509550959350505050565b61ffff8316600090815260016020526040812080548291906108c690611d1c565b80601f01602080910402602001604051908101604052809291908181526020018280546108f290611d1c565b801561093f5780601f106109145761010080835404028352916020019161093f565b820191906000526020600020905b81548152906001019060200180831161092257829003601f168201915b505050505090508383604051610956929190611def565b60405180910390208180519060200120149150509392505050565b610979611069565b6040517f42d65a8d0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342d65a8d906109e290869086908690600401611e28565b600060405180830381600087803b1580156109fc57600080fd5b505af1158015610a10573d6000803e3d6000fd5b50505050505050565b333014610a8e5760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d75737420626560448201527f204c7a417070000000000000000000000000000000000000000000000000000060648201526084016104d2565b610a9a848484846110c3565b50505050565b610aa8611069565b610ab2600061115f565b565b60016020526000908152604090208054610acd90611d1c565b80601f0160208091040260200160405190810160405280929190818152602001828054610af990611d1c565b8015610b465780601f10610b1b57610100808354040283529160200191610b46565b820191906000526020600020905b815481529060010190602001808311610b2957829003601f168201915b505050505081565b610b5d338787878787876111c7565b505050505050565b610b6d611069565b6040517fcbed8b9c0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cbed8b9c90610bda9088908890889088908890600401611e46565b600060405180830381600087803b158015610bf457600080fd5b505af1158015610c08573d6000803e3d6000fd5b505050505050505050565b61ffff84166000908152600260205260408082209051610c34908690611e7f565b908152604080516020928190038301902067ffffffffffffffff861660009081529252902054905080610ccf5760405162461bcd60e51b815260206004820152602360248201527f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360448201527f616765000000000000000000000000000000000000000000000000000000000060648201526084016104d2565b815160208301208114610d4a5760405162461bcd60e51b815260206004820152602160248201527f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f6160448201527f640000000000000000000000000000000000000000000000000000000000000060648201526084016104d2565b61ffff85166000908152600260205260408082209051610d6b908790611e7f565b908152604080516020928190038301902067ffffffffffffffff871660009081529252902055610615858585856110c3565b610da5611069565b61ffff83166000908152600160205260409020610dc3908383611706565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab838383604051610df793929190611e28565b60405180910390a1505050565b610e0c611069565b6001600160a01b038116610e885760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104d2565b610e918161115f565b50565b6040517ff5ecbdbc00000000000000000000000000000000000000000000000000000000815261ffff808616600483015284166024820152306044820152606481018290526060907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f5ecbdbc90608401600060405180830381865afa158015610f2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f559190810190611ee8565b95945050505050565b6040517f66ad5c8a00000000000000000000000000000000000000000000000000000000815230906366ad5c8a90610fa0908790879087908790600401611f1d565b600060405180830381600087803b158015610fba57600080fd5b505af1925050508015610fcb575060015b610a9a578080519060200120600260008661ffff1661ffff168152602001908152602001600020846040516110009190611e7f565b90815260408051918290036020908101832067ffffffffffffffff87166000908152915220919091557fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d9061105c908690869086908690611f1d565b60405180910390a1610a9a565b6000546001600160a01b03163314610ab25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d2565b600080828060200190518101906110da9190611f5c565b601482015191935091506110ef878284611329565b806001600160a01b0316866040516111079190611e7f565b6040805191829003822085835267ffffffffffffffff891660208401529161ffff8b16917f64e10c37f404d128982dce114f5d233c14c5c7f6d8db93099e3d99dacb9e27ba910160405180910390a450505050505050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6111d38787878761137b565b600085856040516020016111e8929190611d57565b60405160208183030381529060405290506112068782868686611545565b6040517f7a14574800000000000000000000000000000000000000000000000000000000815261ffff881660048201523060248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637a14574890604401602060405180830381865afa158015611290573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b49190611fa3565b9050866040516112c49190611e7f565b6040805191829003822088835267ffffffffffffffff841660208401529161ffff8b16916001600160a01b038d16917f024797cc77ce15dc717112d54fb1df125fdfd8c81344fb046c5e074427ce1543910160405180910390a4505050505050505050565b6003546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260248201849052909116906340c10f19906044016109e2565b6003546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152306024830152600092169063dd62ed3e90604401602060405180830381865afa1580156113e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114099190611fc0565b9050600019811461146457818110156114645760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d2565b6003546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015230602483015260448201859052909116906323b872dd906064016020604051808303816000875af11580156114d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fa9190611fd9565b506003546040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b03909116906342966c6890602401610bda565b61ffff85166000908152600160205260408120805461156390611d1c565b80601f016020809104026020016040519081016040528092919081815260200182805461158f90611d1c565b80156115dc5780601f106115b1576101008083540402835291602001916115dc565b820191906000526020600020905b8154815290600101906020018083116115bf57829003601f168201915b5050505050905080516000141561165b5760405162461bcd60e51b815260206004820152603060248201527f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060448201527f61207472757374656420736f757263650000000000000000000000000000000060648201526084016104d2565b6040517fc58031000000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c58031009034906116cc908a9086908b908b908b908b90600401611ff6565b6000604051808303818588803b1580156116e557600080fd5b505af11580156116f9573d6000803e3d6000fd5b5050505050505050505050565b82805461171290611d1c565b90600052602060002090601f016020900481019282611734576000855561177a565b82601f1061174d5782800160ff1982351617855561177a565b8280016001018555821561177a579182015b8281111561177a57823582559160200191906001019061175f565b5061178692915061178a565b5090565b5b80821115611786576000815560010161178b565b803561ffff811681146117b157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156117f5576117f56117b6565b604052919050565b600067ffffffffffffffff821115611817576118176117b6565b50601f01601f191660200190565b600082601f83011261183657600080fd5b8135611849611844826117fd565b6117cc565b81815284602083860101111561185e57600080fd5b816020850160208301376000918101602001919091529392505050565b67ffffffffffffffff81168114610e9157600080fd5b600080600080608085870312156118a757600080fd5b6118b08561179f565b9350602085013567ffffffffffffffff808211156118cd57600080fd5b6118d988838901611825565b9450604087013591506118eb8261187b565b9092506060860135908082111561190157600080fd5b5061190e87828801611825565b91505092959194509250565b60006020828403121561192c57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461195c57600080fd5b9392505050565b60006020828403121561197557600080fd5b61195c8261179f565b8015158114610e9157600080fd5b600080600080600060a086880312156119a457600080fd5b6119ad8661179f565b9450602086013567ffffffffffffffff808211156119ca57600080fd5b6119d689838a01611825565b955060408801359450606088013591506119ef8261197e565b90925060808701359080821115611a0557600080fd5b50611a1288828901611825565b9150509295509295909350565b60008083601f840112611a3157600080fd5b50813567ffffffffffffffff811115611a4957600080fd5b602083019150836020828501011115611a6157600080fd5b9250929050565b600080600060408486031215611a7d57600080fd5b611a868461179f565b9250602084013567ffffffffffffffff811115611aa257600080fd5b611aae86828701611a1f565b9497909650939450505050565b600080600060608486031215611ad057600080fd5b611ad98461179f565b9250602084013567ffffffffffffffff811115611af557600080fd5b611b0186828701611825565b9250506040840135611b128161187b565b809150509250925092565b60005b83811015611b38578181015183820152602001611b20565b83811115610a9a5750506000910152565b60008151808452611b61816020860160208601611b1d565b601f01601f19169290920160200192915050565b60208152600061195c6020830184611b49565b6001600160a01b0381168114610e9157600080fd5b60008060008060008060c08789031215611bb657600080fd5b611bbf8761179f565b9550602087013567ffffffffffffffff80821115611bdc57600080fd5b611be88a838b01611825565b96506040890135955060608901359150611c0182611b88565b909350608088013590611c1382611b88565b90925060a08801359080821115611c2957600080fd5b50611c3689828a01611825565b9150509295509295509295565b600080600080600060808688031215611c5b57600080fd5b611c648661179f565b9450611c726020870161179f565b935060408601359250606086013567ffffffffffffffff811115611c9557600080fd5b611ca188828901611a1f565b969995985093965092949392505050565b600060208284031215611cc457600080fd5b813561195c81611b88565b60008060008060808587031215611ce557600080fd5b611cee8561179f565b9350611cfc6020860161179f565b92506040850135611d0c81611b88565b9396929550929360600135925050565b600181811c90821680611d3057607f821691505b60208210811415611d5157634e487b7160e01b600052602260045260246000fd5b50919050565b604081526000611d6a6040830185611b49565b90508260208301529392505050565b61ffff861681526001600160a01b038516602082015260a060408201526000611da560a0830186611b49565b84151560608401528281036080840152611dbf8185611b49565b98975050505050505050565b60008060408385031215611dde57600080fd5b505080516020909101519092909150565b8183823760009101908152919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b61ffff84168152604060208201526000610f55604083018486611dff565b600061ffff808816835280871660208401525084604083015260806060830152611e74608083018486611dff565b979650505050505050565b60008251611e91818460208701611b1d565b9190910192915050565b600082601f830112611eac57600080fd5b8151611eba611844826117fd565b818152846020838601011115611ecf57600080fd5b611ee0826020830160208701611b1d565b949350505050565b600060208284031215611efa57600080fd5b815167ffffffffffffffff811115611f1157600080fd5b611ee084828501611e9b565b61ffff85168152608060208201526000611f3a6080830186611b49565b67ffffffffffffffff851660408401528281036060840152611e748185611b49565b60008060408385031215611f6f57600080fd5b825167ffffffffffffffff811115611f8657600080fd5b611f9285828601611e9b565b925050602083015190509250929050565b600060208284031215611fb557600080fd5b815161195c8161187b565b600060208284031215611fd257600080fd5b5051919050565b600060208284031215611feb57600080fd5b815161195c8161197e565b61ffff8716815260c06020820152600061201360c0830188611b49565b82810360408401526120258188611b49565b6001600160a01b0387811660608601528616608085015283810360a085015290506120508185611b49565b999850505050505050505056fea2646970667358221220e5573cdb2fc66ff9236006a620eb0f981277e8613343be5c683c8f46d95a809a64736f6c634300080a003300000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd67500000000000000000000000058f46f627c88a3b217abc80563b9a726abb873ba
Deployed Bytecode
0x60806040526004361061015e5760003560e01c8063715018a6116100c0578063cbed8b9c11610074578063eb8d72b711610059578063eb8d72b7146103fe578063f2fde38b1461041e578063f5ecbdbc1461043e57600080fd5b8063cbed8b9c146103cb578063d1deba1f146103eb57600080fd5b806377d15311116100a557806377d15311146103665780638da5cb5b14610379578063b353aaa71461039757600080fd5b8063715018a6146103245780637533d7881461033957600080fd5b80632a205e3d1161011757806342d65a8d116100fc57806342d65a8d146102875780635b8c41e6146102a757806366ad5c8a1461030457600080fd5b80632a205e3d146102325780633d8b38f61461026757600080fd5b806305d6f0911161014857806305d6f091146101ba57806307e0db17146101f257806310ddb1371461021257600080fd5b80621d35671461016357806301ffc9a714610185575b600080fd5b34801561016f57600080fd5b5061018361017e366004611891565b61045e565b005b34801561019157600080fd5b506101a56101a036600461191a565b61061c565b60405190151581526020015b60405180910390f35b3480156101c657600080fd5b506003546101da906001600160a01b031681565b6040516001600160a01b0390911681526020016101b1565b3480156101fe57600080fd5b5061018361020d366004611963565b6106b5565b34801561021e57600080fd5b5061018361022d366004611963565b610750565b34801561023e57600080fd5b5061025261024d36600461198c565b6107c1565b604080519283526020830191909152016101b1565b34801561027357600080fd5b506101a5610282366004611a68565b6108a5565b34801561029357600080fd5b506101836102a2366004611a68565b610971565b3480156102b357600080fd5b506102f66102c2366004611abb565b6002602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b6040519081526020016101b1565b34801561031057600080fd5b5061018361031f366004611891565b610a19565b34801561033057600080fd5b50610183610aa0565b34801561034557600080fd5b50610359610354366004611963565b610ab4565b6040516101b19190611b75565b610183610374366004611b9d565b610b4e565b34801561038557600080fd5b506000546001600160a01b03166101da565b3480156103a357600080fd5b506101da7f00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd67581565b3480156103d757600080fd5b506101836103e6366004611c43565b610b65565b6101836103f9366004611891565b610c13565b34801561040a57600080fd5b50610183610419366004611a68565b610d9d565b34801561042a57600080fd5b50610183610439366004611cb2565b610e04565b34801561044a57600080fd5b50610359610459366004611ccf565b610e94565b337f00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd6756001600160a01b0316146104db5760405162461bcd60e51b815260206004820152601e60248201527f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c6572000060448201526064015b60405180910390fd5b61ffff8416600090815260016020526040812080546104f990611d1c565b80601f016020809104026020016040519081016040528092919081815260200182805461052590611d1c565b80156105725780601f1061054757610100808354040283529160200191610572565b820191906000526020600020905b81548152906001019060200180831161055557829003601f168201915b5050505050905080518451148015610597575080805190602001208480519060200120145b6106095760405162461bcd60e51b815260206004820152602660248201527f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016104d2565b61061585858585610f5e565b5050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5df10d2c0000000000000000000000000000000000000000000000000000000014806106af57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6106bd611069565b6040517f07e0db1700000000000000000000000000000000000000000000000000000000815261ffff821660048201527f00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd6756001600160a01b0316906307e0db17906024015b600060405180830381600087803b15801561073c57600080fd5b505af1158015610615573d6000803e3d6000fd5b610758611069565b6040517f10ddb13700000000000000000000000000000000000000000000000000000000815261ffff821660048201527f00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd6756001600160a01b0316906310ddb13790602401610722565b600080600086866040516020016107d9929190611d57565b60408051601f19818403018152908290527f40a7bb1000000000000000000000000000000000000000000000000000000000825291506001600160a01b037f00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd67516906340a7bb1090610856908b90309086908b908b90600401611d79565b6040805180830381865afa158015610872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108969190611dcb565b92509250509550959350505050565b61ffff8316600090815260016020526040812080548291906108c690611d1c565b80601f01602080910402602001604051908101604052809291908181526020018280546108f290611d1c565b801561093f5780601f106109145761010080835404028352916020019161093f565b820191906000526020600020905b81548152906001019060200180831161092257829003601f168201915b505050505090508383604051610956929190611def565b60405180910390208180519060200120149150509392505050565b610979611069565b6040517f42d65a8d0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd67516906342d65a8d906109e290869086908690600401611e28565b600060405180830381600087803b1580156109fc57600080fd5b505af1158015610a10573d6000803e3d6000fd5b50505050505050565b333014610a8e5760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d75737420626560448201527f204c7a417070000000000000000000000000000000000000000000000000000060648201526084016104d2565b610a9a848484846110c3565b50505050565b610aa8611069565b610ab2600061115f565b565b60016020526000908152604090208054610acd90611d1c565b80601f0160208091040260200160405190810160405280929190818152602001828054610af990611d1c565b8015610b465780601f10610b1b57610100808354040283529160200191610b46565b820191906000526020600020905b815481529060010190602001808311610b2957829003601f168201915b505050505081565b610b5d338787878787876111c7565b505050505050565b610b6d611069565b6040517fcbed8b9c0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675169063cbed8b9c90610bda9088908890889088908890600401611e46565b600060405180830381600087803b158015610bf457600080fd5b505af1158015610c08573d6000803e3d6000fd5b505050505050505050565b61ffff84166000908152600260205260408082209051610c34908690611e7f565b908152604080516020928190038301902067ffffffffffffffff861660009081529252902054905080610ccf5760405162461bcd60e51b815260206004820152602360248201527f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360448201527f616765000000000000000000000000000000000000000000000000000000000060648201526084016104d2565b815160208301208114610d4a5760405162461bcd60e51b815260206004820152602160248201527f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f6160448201527f640000000000000000000000000000000000000000000000000000000000000060648201526084016104d2565b61ffff85166000908152600260205260408082209051610d6b908790611e7f565b908152604080516020928190038301902067ffffffffffffffff871660009081529252902055610615858585856110c3565b610da5611069565b61ffff83166000908152600160205260409020610dc3908383611706565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab838383604051610df793929190611e28565b60405180910390a1505050565b610e0c611069565b6001600160a01b038116610e885760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104d2565b610e918161115f565b50565b6040517ff5ecbdbc00000000000000000000000000000000000000000000000000000000815261ffff808616600483015284166024820152306044820152606481018290526060907f00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd6756001600160a01b03169063f5ecbdbc90608401600060405180830381865afa158015610f2d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f559190810190611ee8565b95945050505050565b6040517f66ad5c8a00000000000000000000000000000000000000000000000000000000815230906366ad5c8a90610fa0908790879087908790600401611f1d565b600060405180830381600087803b158015610fba57600080fd5b505af1925050508015610fcb575060015b610a9a578080519060200120600260008661ffff1661ffff168152602001908152602001600020846040516110009190611e7f565b90815260408051918290036020908101832067ffffffffffffffff87166000908152915220919091557fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d9061105c908690869086908690611f1d565b60405180910390a1610a9a565b6000546001600160a01b03163314610ab25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d2565b600080828060200190518101906110da9190611f5c565b601482015191935091506110ef878284611329565b806001600160a01b0316866040516111079190611e7f565b6040805191829003822085835267ffffffffffffffff891660208401529161ffff8b16917f64e10c37f404d128982dce114f5d233c14c5c7f6d8db93099e3d99dacb9e27ba910160405180910390a450505050505050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6111d38787878761137b565b600085856040516020016111e8929190611d57565b60405160208183030381529060405290506112068782868686611545565b6040517f7a14574800000000000000000000000000000000000000000000000000000000815261ffff881660048201523060248201526000907f00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd6756001600160a01b031690637a14574890604401602060405180830381865afa158015611290573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b49190611fa3565b9050866040516112c49190611e7f565b6040805191829003822088835267ffffffffffffffff841660208401529161ffff8b16916001600160a01b038d16917f024797cc77ce15dc717112d54fb1df125fdfd8c81344fb046c5e074427ce1543910160405180910390a4505050505050505050565b6003546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260248201849052909116906340c10f19906044016109e2565b6003546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152306024830152600092169063dd62ed3e90604401602060405180830381865afa1580156113e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114099190611fc0565b9050600019811461146457818110156114645760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d2565b6003546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015230602483015260448201859052909116906323b872dd906064016020604051808303816000875af11580156114d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fa9190611fd9565b506003546040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b03909116906342966c6890602401610bda565b61ffff85166000908152600160205260408120805461156390611d1c565b80601f016020809104026020016040519081016040528092919081815260200182805461158f90611d1c565b80156115dc5780601f106115b1576101008083540402835291602001916115dc565b820191906000526020600020905b8154815290600101906020018083116115bf57829003601f168201915b5050505050905080516000141561165b5760405162461bcd60e51b815260206004820152603060248201527f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060448201527f61207472757374656420736f757263650000000000000000000000000000000060648201526084016104d2565b6040517fc58031000000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675169063c58031009034906116cc908a9086908b908b908b908b90600401611ff6565b6000604051808303818588803b1580156116e557600080fd5b505af11580156116f9573d6000803e3d6000fd5b5050505050505050505050565b82805461171290611d1c565b90600052602060002090601f016020900481019282611734576000855561177a565b82601f1061174d5782800160ff1982351617855561177a565b8280016001018555821561177a579182015b8281111561177a57823582559160200191906001019061175f565b5061178692915061178a565b5090565b5b80821115611786576000815560010161178b565b803561ffff811681146117b157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156117f5576117f56117b6565b604052919050565b600067ffffffffffffffff821115611817576118176117b6565b50601f01601f191660200190565b600082601f83011261183657600080fd5b8135611849611844826117fd565b6117cc565b81815284602083860101111561185e57600080fd5b816020850160208301376000918101602001919091529392505050565b67ffffffffffffffff81168114610e9157600080fd5b600080600080608085870312156118a757600080fd5b6118b08561179f565b9350602085013567ffffffffffffffff808211156118cd57600080fd5b6118d988838901611825565b9450604087013591506118eb8261187b565b9092506060860135908082111561190157600080fd5b5061190e87828801611825565b91505092959194509250565b60006020828403121561192c57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461195c57600080fd5b9392505050565b60006020828403121561197557600080fd5b61195c8261179f565b8015158114610e9157600080fd5b600080600080600060a086880312156119a457600080fd5b6119ad8661179f565b9450602086013567ffffffffffffffff808211156119ca57600080fd5b6119d689838a01611825565b955060408801359450606088013591506119ef8261197e565b90925060808701359080821115611a0557600080fd5b50611a1288828901611825565b9150509295509295909350565b60008083601f840112611a3157600080fd5b50813567ffffffffffffffff811115611a4957600080fd5b602083019150836020828501011115611a6157600080fd5b9250929050565b600080600060408486031215611a7d57600080fd5b611a868461179f565b9250602084013567ffffffffffffffff811115611aa257600080fd5b611aae86828701611a1f565b9497909650939450505050565b600080600060608486031215611ad057600080fd5b611ad98461179f565b9250602084013567ffffffffffffffff811115611af557600080fd5b611b0186828701611825565b9250506040840135611b128161187b565b809150509250925092565b60005b83811015611b38578181015183820152602001611b20565b83811115610a9a5750506000910152565b60008151808452611b61816020860160208601611b1d565b601f01601f19169290920160200192915050565b60208152600061195c6020830184611b49565b6001600160a01b0381168114610e9157600080fd5b60008060008060008060c08789031215611bb657600080fd5b611bbf8761179f565b9550602087013567ffffffffffffffff80821115611bdc57600080fd5b611be88a838b01611825565b96506040890135955060608901359150611c0182611b88565b909350608088013590611c1382611b88565b90925060a08801359080821115611c2957600080fd5b50611c3689828a01611825565b9150509295509295509295565b600080600080600060808688031215611c5b57600080fd5b611c648661179f565b9450611c726020870161179f565b935060408601359250606086013567ffffffffffffffff811115611c9557600080fd5b611ca188828901611a1f565b969995985093965092949392505050565b600060208284031215611cc457600080fd5b813561195c81611b88565b60008060008060808587031215611ce557600080fd5b611cee8561179f565b9350611cfc6020860161179f565b92506040850135611d0c81611b88565b9396929550929360600135925050565b600181811c90821680611d3057607f821691505b60208210811415611d5157634e487b7160e01b600052602260045260246000fd5b50919050565b604081526000611d6a6040830185611b49565b90508260208301529392505050565b61ffff861681526001600160a01b038516602082015260a060408201526000611da560a0830186611b49565b84151560608401528281036080840152611dbf8185611b49565b98975050505050505050565b60008060408385031215611dde57600080fd5b505080516020909101519092909150565b8183823760009101908152919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b61ffff84168152604060208201526000610f55604083018486611dff565b600061ffff808816835280871660208401525084604083015260806060830152611e74608083018486611dff565b979650505050505050565b60008251611e91818460208701611b1d565b9190910192915050565b600082601f830112611eac57600080fd5b8151611eba611844826117fd565b818152846020838601011115611ecf57600080fd5b611ee0826020830160208701611b1d565b949350505050565b600060208284031215611efa57600080fd5b815167ffffffffffffffff811115611f1157600080fd5b611ee084828501611e9b565b61ffff85168152608060208201526000611f3a6080830186611b49565b67ffffffffffffffff851660408401528281036060840152611e748185611b49565b60008060408385031215611f6f57600080fd5b825167ffffffffffffffff811115611f8657600080fd5b611f9285828601611e9b565b925050602083015190509250929050565b600060208284031215611fb557600080fd5b815161195c8161187b565b600060208284031215611fd257600080fd5b5051919050565b600060208284031215611feb57600080fd5b815161195c8161197e565b61ffff8716815260c06020820152600061201360c0830188611b49565b82810360408401526120258188611b49565b6001600160a01b0387811660608601528616608085015283810360a085015290506120508185611b49565b999850505050505050505056fea2646970667358221220e5573cdb2fc66ff9236006a620eb0f981277e8613343be5c683c8f46d95a809a64736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd67500000000000000000000000058f46f627c88a3b217abc80563b9a726abb873ba
-----Decoded View---------------
Arg [0] : _lzEndpoint (address): 0x66A71Dcef29A0fFBDBE3c6a460a3B5BC225Cd675
Arg [1] : _bubbles (address): 0x58f46F627C88a3b217abc80563B9a726abB873ba
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
Arg [1] : 00000000000000000000000058f46f627c88a3b217abc80563b9a726abb873ba
Deployed Bytecode Sourcemap
27422:813:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14800:730;;;;;;;;;;-1:-1:-1;14800:730:0;;;;;:::i;:::-;;:::i;:::-;;24873:215;;;;;;;;;;-1:-1:-1;24873:215:0;;;;;:::i;:::-;;:::i;:::-;;;2691:14:1;;2684:22;2666:41;;2654:2;2639:18;24873:215:0;;;;;;;;27465:21;;;;;;;;;;-1:-1:-1;27465:21:0;;;;-1:-1:-1;;;;;27465:21:0;;;;;;-1:-1:-1;;;;;2895:55:1;;;2877:74;;2865:2;2850:18;27465:21:0;2718:239:1;16886:123:0;;;;;;;;;;-1:-1:-1;16886:123:0;;;;;:::i;:::-;;:::i;17017:129::-;;;;;;;;;;-1:-1:-1;17017:129:0;;;;;:::i;:::-;;:::i;25096:410::-;;;;;;;;;;-1:-1:-1;25096:410:0;;;;;:::i;:::-;;:::i;:::-;;;;4263:25:1;;;4319:2;4304:18;;4297:34;;;;4236:18;25096:410:0;4089:248:1;17702:250:0;;;;;;;;;;-1:-1:-1;17702:250:0;;;;;:::i;:::-;;:::i;17154:178::-;;;;;;;;;;-1:-1:-1;17154:178:0;;;;;:::i;:::-;;:::i;18503:85::-;;;;;;;;;;-1:-1:-1;18503:85:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5856:25:1;;;5844:2;5829:18;18503:85:0;5710:177:1;19285:342:0;;;;;;;;;;-1:-1:-1;19285:342:0;;;;;:::i;:::-;;:::i;5641:103::-;;;;;;;;;;;;;:::i;14570:51::-;;;;;;;;;;-1:-1:-1;14570:51:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;25514:320::-;;;;;;:::i;:::-;;:::i;4993:87::-;;;;;;;;;;-1:-1:-1;5039:7:0;5066:6;-1:-1:-1;;;;;5066:6:0;4993:87;;14515:46;;;;;;;;;;;;;;;16674:204;;;;;;;;;;-1:-1:-1;16674:204:0;;;;;:::i;:::-;;:::i;19813:681::-;;;;;;:::i;:::-;;:::i;17386:216::-;;;;;;;;;;-1:-1:-1;17386:216:0;;;;;:::i;:::-;;:::i;5899:201::-;;;;;;;;;;-1:-1:-1;5899:201:0;;;;;:::i;:::-;;:::i;16401:211::-;;;;;;;;;;-1:-1:-1;16401:211:0;;;;;:::i;:::-;;:::i;14800:730::-;3618:10;15036;-1:-1:-1;;;;;15012:35:0;;15004:78;;;;-1:-1:-1;;;15004:78:0;;9843:2:1;15004:78:0;;;9825:21:1;9882:2;9862:18;;;9855:30;9921:32;9901:18;;;9894:60;9971:18;;15004:78:0;;;;;;;;;15124:32;;;15095:26;15124:32;;;:19;:32;;;;;15095:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15330:13;:20;15308:11;:18;:42;:96;;;;;15390:13;15380:24;;;;;;15364:11;15354:22;;;;;;:50;15308:96;15300:147;;;;-1:-1:-1;;;15300:147:0;;10644:2:1;15300:147:0;;;10626:21:1;10683:2;10663:18;;;10656:30;10722:34;10702:18;;;10695:62;10793:8;10773:18;;;10766:36;10819:19;;15300:147:0;10442:402:1;15300:147:0;15460:62;15479:11;15492;15505:6;15513:8;15460:18;:62::i;:::-;14927:603;14800:730;;;;:::o;24873:215::-;24975:4;24999:41;;;25014:26;24999:41;;:81;;-1:-1:-1;24612:25:0;24597:40;;;;25044:36;24992:88;24873:215;-1:-1:-1;;24873:215:0:o;16886:123::-;4879:13;:11;:13::i;:::-;16966:35:::1;::::0;;;;11023:6:1;11011:19;;16966:35:0::1;::::0;::::1;10993:38:1::0;16966:10:0::1;-1:-1:-1::0;;;;;16966:25:0::1;::::0;::::1;::::0;10966:18:1;;16966:35:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;17017:129:::0;4879:13;:11;:13::i;:::-;17100:38:::1;::::0;;;;11023:6:1;11011:19;;17100:38:0::1;::::0;::::1;10993::1::0;17100:10:0::1;-1:-1:-1::0;;;;;17100:28:0::1;::::0;::::1;::::0;10966:18:1;;17100:38:0::1;10849:188:1::0;25096:410:0;25261:14;25277:11;25341:20;25375:10;25387:7;25364:31;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;25364:31:0;;;;;;;;;;25413:85;;;25364:31;-1:-1:-1;;;;;;25413:10:0;:23;;;;:85;;25437:11;;25458:4;;25364:31;;25474:7;;25483:14;;25413:85;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25406:92;;;;;25096:410;;;;;;;;:::o;17702:250::-;17844:32;;;17798:4;17844:32;;;:19;:32;;;;;17815:61;;17798:4;;17844:32;17815:61;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17932:11;;17922:22;;;;;;;:::i;:::-;;;;;;;;17904:13;17894:24;;;;;;:50;17887:57;;;17702:250;;;;;:::o;17154:178::-;4879:13;:11;:13::i;:::-;17269:55:::1;::::0;;;;-1:-1:-1;;;;;17269:10:0::1;:29;::::0;::::1;::::0;:55:::1;::::0;17299:11;;17312;;;;17269:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17154:178:::0;;;:::o;19285:342::-;3618:10;19495:4;19471:29;19463:80;;;;-1:-1:-1;;;19463:80:0;;13333:2:1;19463:80:0;;;13315:21:1;13372:2;13352:18;;;13345:30;13411:34;13391:18;;;13384:62;13482:8;13462:18;;;13455:36;13508:19;;19463:80:0;13131:402:1;19463:80:0;19554:65;19576:11;19589;19602:6;19610:8;19554:21;:65::i;:::-;19285:342;;;;:::o;5641:103::-;4879:13;:11;:13::i;:::-;5706:30:::1;5733:1;5706:18;:30::i;:::-;5641:103::o:0;14570:51::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25514:320::-;25723:103;25729:10;25741:11;25754:10;25766:7;25775:14;25791:18;25811:14;25723:5;:103::i;:::-;25514:320;;;;;;:::o;16674:204::-;4879:13;:11;:13::i;:::-;16808:62:::1;::::0;;;;-1:-1:-1;;;;;16808:10:0::1;:20;::::0;::::1;::::0;:62:::1;::::0;16829:8;;16839;;16849:11;;16862:7;;;;16808:62:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16674:204:::0;;;;;:::o;19813:681::-;20020:27;;;19998:19;20020:27;;;:14;:27;;;;;;:40;;;;20048:11;;20020:40;:::i;:::-;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;-1:-1:-1;20020:48:0;20079:73;;;;-1:-1:-1;;;20079:73:0;;14522:2:1;20079:73:0;;;14504:21:1;14561:2;14541:18;;;14534:30;14600:34;14580:18;;;14573:62;14671:5;14651:18;;;14644:33;14694:19;;20079:73:0;14320:399:1;20079:73:0;20171:19;;;;;;:34;;20163:80;;;;-1:-1:-1;;;20163:80:0;;14926:2:1;20163:80:0;;;14908:21:1;14965:2;14945:18;;;14938:30;15004:34;14984:18;;;14977:62;15075:3;15055:18;;;15048:31;15096:19;;20163:80:0;14724:397:1;20163:80:0;20291:27;;;20350:1;20291:27;;;:14;:27;;;;;;:40;;;;20319:11;;20291:40;:::i;:::-;;;;;;;;;;;;;;;;:48;;;;;;;;;;;:61;20421:65;20443:11;20456;20291:48;20477:8;20421:21;:65::i;17386:216::-;4879:13;:11;:13::i;:::-;17490:32:::1;::::0;::::1;;::::0;;;:19:::1;:32;::::0;;;;:46:::1;::::0;17525:11;;17490:46:::1;:::i;:::-;;17552:42;17569:11;17582;;17552:42;;;;;;;;:::i;:::-;;;;;;;;17386:216:::0;;;:::o;5899:201::-;4879:13;:11;:13::i;:::-;-1:-1:-1;;;;;5988:22:0;::::1;5980:73;;;::::0;-1:-1:-1;;;5980:73:0;;15328:2:1;5980:73:0::1;::::0;::::1;15310:21:1::0;15367:2;15347:18;;;15340:30;15406:34;15386:18;;;15379:62;15477:8;15457:18;;;15450:36;15503:19;;5980:73:0::1;15126:402:1::0;5980:73:0::1;6064:28;6083:8;6064:18;:28::i;:::-;5899:201:::0;:::o;16401:211::-;16536:68;;;;;15770:6:1;15803:15;;;16536:68:0;;;15785:34:1;15855:15;;15835:18;;;15828:43;16585:4:0;15887:18:1;;;15880:83;15979:18;;;15972:34;;;16504:12:0;;16536:10;-1:-1:-1;;;;;16536:20:0;;;;15732:19:1;;16536:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16536:68:0;;;;;;;;;;;;:::i;:::-;16529:75;16401:211;-1:-1:-1;;;;;16401:211:0:o;18749:528::-;18946:69;;;;;:4;;:25;;:69;;18972:11;;18985;;18998:6;;19006:8;;18946:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18942:328;;19172:8;19162:19;;;;;;19111:14;:27;19126:11;19111:27;;;;;;;;;;;;;;;19139:11;19111:40;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:48;;;;;;;;;;:70;;;;19201:57;;;;19215:11;;19228;;19152:6;;19249:8;;19201:57;:::i;:::-;;;;;;;;18942:328;;5158:132;5039:7;5066:6;-1:-1:-1;;;;;5066:6:0;3618:10;5222:23;5214:68;;;;-1:-1:-1;;;5214:68:0;;17552:2:1;5214:68:0;;;17534:21:1;;;17571:18;;;17564:30;17630:34;17610:18;;;17603:62;17682:18;;5214:68:0;17350:356:1;25842:539:0;26037:27;26066:11;26092:8;26081:35;;;;;;;;;;;;:::i;:::-;26218:2;26198:23;;26192:30;26036:80;;-1:-1:-1;26036:80:0;-1:-1:-1;26245:41:0;26255:11;26192:30;26036:80;26245:9;:41::i;:::-;26347:9;-1:-1:-1;;;;;26304:69:0;26334:11;26304:69;;;;;;:::i;:::-;;;;;;;;;;18284:25:1;;;18357:18;18345:31;;18340:2;18325:18;;18318:59;26304:69:0;;;;;;;18257:18:1;26304:69:0;;;;;;;25983:398;;;25842:539;;;;:::o;6260:191::-;6334:16;6353:6;;-1:-1:-1;;;;;6370:17:0;;;;;;;;;;6403:40;;6353:6;;;;;;;6403:40;;6334:16;6403:40;6323:128;6260:191;:::o;26389:582::-;26595:51;26606:5;26613:11;26626:10;26638:7;26595:10;:51::i;:::-;26659:20;26693:10;26705:7;26682:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26659:54;;26724:81;26732:11;26745:7;26754:14;26770:18;26790:14;26724:7;:81::i;:::-;26833:55;;;;;18590:6:1;18578:19;;26833:55:0;;;18560:38:1;26882:4:0;18614:18:1;;;18607:83;26818:12:0;;26833:10;-1:-1:-1;;;;;26833:27:0;;;;18533:18:1;;26833:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26818:70;;26936:10;26904:59;;;;;;:::i;:::-;;;;;;;;;;18284:25:1;;;18357:18;18345:31;;18340:2;18325:18;;18318:59;26904::0;;;;;-1:-1:-1;;;;;26904:59:0;;;;;18257:18:1;26904:59:0;;;;;;;26584:387;;26389:582;;;;;;;:::o;28074:158::-;28189:7;;28172:52;;;;;-1:-1:-1;;;;;19147:55:1;;;28172:52:0;;;19129:74:1;19219:18;;;19212:34;;;28189:7:0;;;;28172:31;;19102:18:1;;28172:52:0;18955:297:1;27620:446:0;27755:7;;:39;;;;;-1:-1:-1;;;;;19510:15:1;;;27755:39:0;;;19492:34:1;27788:4:0;19542:18:1;;;19535:43;27728:24:0;;27755:7;;:17;;19404:18:1;;27755:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27728:66;;-1:-1:-1;;27809:16:0;:37;27805:139;;27891:7;27871:16;:27;;27863:69;;;;-1:-1:-1;;;27863:69:0;;19980:2:1;27863:69:0;;;19962:21:1;20019:2;19999:18;;;19992:30;20058:31;20038:18;;;20031:59;20107:18;;27863:69:0;19778:353:1;27863:69:0;27956:7;;:51;;;;;-1:-1:-1;;;;;20417:15:1;;;27956:51:0;;;20399:34:1;27992:4:0;20449:18:1;;;20442:43;20501:18;;;20494:34;;;27956:7:0;;;;:20;;20311:18:1;;27956:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;28035:7:0;;28018:40;;;;;;;;5856:25:1;;;-1:-1:-1;;;;;28035:7:0;;;;28018:31;;5829:18:1;;28018:40:0;5710:177:1;15819:477:0;16025:32;;;15996:26;16025:32;;;:19;:32;;;;;15996:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16076:13;:20;16100:1;16076:25;;16068:86;;;;-1:-1:-1;;;16068:86:0;;21173:2:1;16068:86:0;;;21155:21:1;21212:2;21192:18;;;21185:30;21251:34;21231:18;;;21224:62;21322:18;21302;;;21295:46;21358:19;;16068:86:0;20971:412:1;16068:86:0;16165:123;;;;;-1:-1:-1;;;;;16165:10:0;:15;;;;16188:9;;16165:123;;16199:11;;16212:13;;16227:8;;16237:14;;16253:18;;16273:14;;16165:123;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15985:311;15819:477;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:159:1;81:20;;141:6;130:18;;120:29;;110:57;;163:1;160;153:12;110:57;14:159;;;:::o;178:184::-;-1:-1:-1;;;227:1:1;220:88;327:4;324:1;317:15;351:4;348:1;341:15;367:275;438:2;432:9;503:2;484:13;;-1:-1:-1;;480:27:1;468:40;;538:18;523:34;;559:22;;;520:62;517:88;;;585:18;;:::i;:::-;621:2;614:22;367:275;;-1:-1:-1;367:275:1:o;647:186::-;695:4;728:18;720:6;717:30;714:56;;;750:18;;:::i;:::-;-1:-1:-1;816:2:1;795:15;-1:-1:-1;;791:29:1;822:4;787:40;;647:186::o;838:462::-;880:5;933:3;926:4;918:6;914:17;910:27;900:55;;951:1;948;941:12;900:55;987:6;974:20;1018:48;1034:31;1062:2;1034:31;:::i;:::-;1018:48;:::i;:::-;1091:2;1082:7;1075:19;1137:3;1130:4;1125:2;1117:6;1113:15;1109:26;1106:35;1103:55;;;1154:1;1151;1144:12;1103:55;1219:2;1212:4;1204:6;1200:17;1193:4;1184:7;1180:18;1167:55;1267:1;1242:16;;;1260:4;1238:27;1231:38;;;;1246:7;838:462;-1:-1:-1;;;838:462:1:o;1305:129::-;1390:18;1383:5;1379:30;1372:5;1369:41;1359:69;;1424:1;1421;1414:12;1439:745;1541:6;1549;1557;1565;1618:3;1606:9;1597:7;1593:23;1589:33;1586:53;;;1635:1;1632;1625:12;1586:53;1658:28;1676:9;1658:28;:::i;:::-;1648:38;;1737:2;1726:9;1722:18;1709:32;1760:18;1801:2;1793:6;1790:14;1787:34;;;1817:1;1814;1807:12;1787:34;1840:49;1881:7;1872:6;1861:9;1857:22;1840:49;:::i;:::-;1830:59;;1939:2;1928:9;1924:18;1911:32;1898:45;;1952:30;1976:5;1952:30;:::i;:::-;2001:5;;-1:-1:-1;2059:2:1;2044:18;;2031:32;;2075:16;;;2072:36;;;2104:1;2101;2094:12;2072:36;;2127:51;2170:7;2159:8;2148:9;2144:24;2127:51;:::i;:::-;2117:61;;;1439:745;;;;;;;:::o;2189:332::-;2247:6;2300:2;2288:9;2279:7;2275:23;2271:32;2268:52;;;2316:1;2313;2306:12;2268:52;2355:9;2342:23;2405:66;2398:5;2394:78;2387:5;2384:89;2374:117;;2487:1;2484;2477:12;2374:117;2510:5;2189:332;-1:-1:-1;;;2189:332:1:o;2962:184::-;3020:6;3073:2;3061:9;3052:7;3048:23;3044:32;3041:52;;;3089:1;3086;3079:12;3041:52;3112:28;3130:9;3112:28;:::i;3151:118::-;3237:5;3230:13;3223:21;3216:5;3213:32;3203:60;;3259:1;3256;3249:12;3274:810;3383:6;3391;3399;3407;3415;3468:3;3456:9;3447:7;3443:23;3439:33;3436:53;;;3485:1;3482;3475:12;3436:53;3508:28;3526:9;3508:28;:::i;:::-;3498:38;;3587:2;3576:9;3572:18;3559:32;3610:18;3651:2;3643:6;3640:14;3637:34;;;3667:1;3664;3657:12;3637:34;3690:49;3731:7;3722:6;3711:9;3707:22;3690:49;:::i;:::-;3680:59;;3786:2;3775:9;3771:18;3758:32;3748:42;;3840:2;3829:9;3825:18;3812:32;3799:45;;3853:28;3875:5;3853:28;:::i;:::-;3900:5;;-1:-1:-1;3958:3:1;3943:19;;3930:33;;3975:16;;;3972:36;;;4004:1;4001;3994:12;3972:36;;4027:51;4070:7;4059:8;4048:9;4044:24;4027:51;:::i;:::-;4017:61;;;3274:810;;;;;;;;:::o;4342:347::-;4393:8;4403:6;4457:3;4450:4;4442:6;4438:17;4434:27;4424:55;;4475:1;4472;4465:12;4424:55;-1:-1:-1;4498:20:1;;4541:18;4530:30;;4527:50;;;4573:1;4570;4563:12;4527:50;4610:4;4602:6;4598:17;4586:29;;4662:3;4655:4;4646:6;4638;4634:19;4630:30;4627:39;4624:59;;;4679:1;4676;4669:12;4624:59;4342:347;;;;;:::o;4694:481::-;4772:6;4780;4788;4841:2;4829:9;4820:7;4816:23;4812:32;4809:52;;;4857:1;4854;4847:12;4809:52;4880:28;4898:9;4880:28;:::i;:::-;4870:38;;4959:2;4948:9;4944:18;4931:32;4986:18;4978:6;4975:30;4972:50;;;5018:1;5015;5008:12;4972:50;5057:58;5107:7;5098:6;5087:9;5083:22;5057:58;:::i;:::-;4694:481;;5134:8;;-1:-1:-1;5031:84:1;;-1:-1:-1;;;;4694:481:1:o;5180:525::-;5264:6;5272;5280;5333:2;5321:9;5312:7;5308:23;5304:32;5301:52;;;5349:1;5346;5339:12;5301:52;5372:28;5390:9;5372:28;:::i;:::-;5362:38;;5451:2;5440:9;5436:18;5423:32;5478:18;5470:6;5467:30;5464:50;;;5510:1;5507;5500:12;5464:50;5533:49;5574:7;5565:6;5554:9;5550:22;5533:49;:::i;:::-;5523:59;;;5632:2;5621:9;5617:18;5604:32;5645:30;5669:5;5645:30;:::i;:::-;5694:5;5684:15;;;5180:525;;;;;:::o;5892:258::-;5964:1;5974:113;5988:6;5985:1;5982:13;5974:113;;;6064:11;;;6058:18;6045:11;;;6038:39;6010:2;6003:10;5974:113;;;6105:6;6102:1;6099:13;6096:48;;;-1:-1:-1;;6140:1:1;6122:16;;6115:27;5892:258::o;6155:257::-;6196:3;6234:5;6228:12;6261:6;6256:3;6249:19;6277:63;6333:6;6326:4;6321:3;6317:14;6310:4;6303:5;6299:16;6277:63;:::i;:::-;6394:2;6373:15;-1:-1:-1;;6369:29:1;6360:39;;;;6401:4;6356:50;;6155:257;-1:-1:-1;;6155:257:1:o;6417:217::-;6564:2;6553:9;6546:21;6527:4;6584:44;6624:2;6613:9;6609:18;6601:6;6584:44;:::i;6639:162::-;-1:-1:-1;;;;;6726:5:1;6722:54;6715:5;6712:65;6702:93;;6791:1;6788;6781:12;6806:982;6935:6;6943;6951;6959;6967;6975;7028:3;7016:9;7007:7;7003:23;6999:33;6996:53;;;7045:1;7042;7035:12;6996:53;7068:28;7086:9;7068:28;:::i;:::-;7058:38;;7147:2;7136:9;7132:18;7119:32;7170:18;7211:2;7203:6;7200:14;7197:34;;;7227:1;7224;7217:12;7197:34;7250:49;7291:7;7282:6;7271:9;7267:22;7250:49;:::i;:::-;7240:59;;7346:2;7335:9;7331:18;7318:32;7308:42;;7400:2;7389:9;7385:18;7372:32;7359:45;;7413:39;7446:5;7413:39;:::i;:::-;7471:5;;-1:-1:-1;7528:3:1;7513:19;;7500:33;;7542:41;7500:33;7542:41;:::i;:::-;7602:7;;-1:-1:-1;7662:3:1;7647:19;;7634:33;;7679:16;;;7676:36;;;7708:1;7705;7698:12;7676:36;;7731:51;7774:7;7763:8;7752:9;7748:24;7731:51;:::i;:::-;7721:61;;;6806:982;;;;;;;;:::o;8281:622::-;8376:6;8384;8392;8400;8408;8461:3;8449:9;8440:7;8436:23;8432:33;8429:53;;;8478:1;8475;8468:12;8429:53;8501:28;8519:9;8501:28;:::i;:::-;8491:38;;8548:37;8581:2;8570:9;8566:18;8548:37;:::i;:::-;8538:47;;8632:2;8621:9;8617:18;8604:32;8594:42;;8687:2;8676:9;8672:18;8659:32;8714:18;8706:6;8703:30;8700:50;;;8746:1;8743;8736:12;8700:50;8785:58;8835:7;8826:6;8815:9;8811:22;8785:58;:::i;:::-;8281:622;;;;-1:-1:-1;8281:622:1;;-1:-1:-1;8862:8:1;;8759:84;8281:622;-1:-1:-1;;;8281:622:1:o;8908:255::-;8967:6;9020:2;9008:9;8999:7;8995:23;8991:32;8988:52;;;9036:1;9033;9026:12;8988:52;9075:9;9062:23;9094:39;9127:5;9094:39;:::i;9168:468::-;9252:6;9260;9268;9276;9329:3;9317:9;9308:7;9304:23;9300:33;9297:53;;;9346:1;9343;9336:12;9297:53;9369:28;9387:9;9369:28;:::i;:::-;9359:38;;9416:37;9449:2;9438:9;9434:18;9416:37;:::i;:::-;9406:47;;9503:2;9492:9;9488:18;9475:32;9516:39;9549:5;9516:39;:::i;:::-;9168:468;;;;-1:-1:-1;9574:5:1;;9626:2;9611:18;9598:32;;-1:-1:-1;;9168:468:1:o;10000:437::-;10079:1;10075:12;;;;10122;;;10143:61;;10197:4;10189:6;10185:17;10175:27;;10143:61;10250:2;10242:6;10239:14;10219:18;10216:38;10213:218;;;-1:-1:-1;;;10284:1:1;10277:88;10388:4;10385:1;10378:15;10416:4;10413:1;10406:15;10213:218;;10000:437;;;:::o;11042:288::-;11217:2;11206:9;11199:21;11180:4;11237:44;11277:2;11266:9;11262:18;11254:6;11237:44;:::i;:::-;11229:52;;11317:6;11312:2;11301:9;11297:18;11290:34;11042:288;;;;;:::o;11335:663::-;11616:6;11608;11604:19;11593:9;11586:38;-1:-1:-1;;;;;11664:6:1;11660:55;11655:2;11644:9;11640:18;11633:83;11752:3;11747:2;11736:9;11732:18;11725:31;11567:4;11779:45;11819:3;11808:9;11804:19;11796:6;11779:45;:::i;:::-;11874:6;11867:14;11860:22;11855:2;11844:9;11840:18;11833:50;11932:9;11924:6;11920:22;11914:3;11903:9;11899:19;11892:51;11960:32;11985:6;11977;11960:32;:::i;:::-;11952:40;11335:663;-1:-1:-1;;;;;;;;11335:663:1:o;12003:245::-;12082:6;12090;12143:2;12131:9;12122:7;12118:23;12114:32;12111:52;;;12159:1;12156;12149:12;12111:52;-1:-1:-1;;12182:16:1;;12238:2;12223:18;;;12217:25;12182:16;;12217:25;;-1:-1:-1;12003:245:1:o;12253:271::-;12436:6;12428;12423:3;12410:33;12392:3;12462:16;;12487:13;;;12462:16;12253:271;-1:-1:-1;12253:271:1:o;12529:266::-;12617:6;12612:3;12605:19;12669:6;12662:5;12655:4;12650:3;12646:14;12633:43;-1:-1:-1;12721:1:1;12696:16;;;12714:4;12692:27;;;12685:38;;;;12777:2;12756:15;;;-1:-1:-1;;12752:29:1;12743:39;;;12739:50;;12529:266::o;12800:326::-;12995:6;12987;12983:19;12972:9;12965:38;13039:2;13034;13023:9;13019:18;13012:30;12946:4;13059:61;13116:2;13105:9;13101:18;13093:6;13085;13059:61;:::i;13538:498::-;13738:4;13767:6;13812:2;13804:6;13800:15;13789:9;13782:34;13864:2;13856:6;13852:15;13847:2;13836:9;13832:18;13825:43;;13904:6;13899:2;13888:9;13884:18;13877:34;13947:3;13942:2;13931:9;13927:18;13920:31;13968:62;14025:3;14014:9;14010:19;14002:6;13994;13968:62;:::i;:::-;13960:70;13538:498;-1:-1:-1;;;;;;;13538:498:1:o;14041:274::-;14170:3;14208:6;14202:13;14224:53;14270:6;14265:3;14258:4;14250:6;14246:17;14224:53;:::i;:::-;14293:16;;;;;14041:274;-1:-1:-1;;14041:274:1:o;16017:428::-;16070:5;16123:3;16116:4;16108:6;16104:17;16100:27;16090:55;;16141:1;16138;16131:12;16090:55;16170:6;16164:13;16201:48;16217:31;16245:2;16217:31;:::i;16201:48::-;16274:2;16265:7;16258:19;16320:3;16313:4;16308:2;16300:6;16296:15;16292:26;16289:35;16286:55;;;16337:1;16334;16327:12;16286:55;16350:64;16411:2;16404:4;16395:7;16391:18;16384:4;16376:6;16372:17;16350:64;:::i;:::-;16432:7;16017:428;-1:-1:-1;;;;16017:428:1:o;16450:335::-;16529:6;16582:2;16570:9;16561:7;16557:23;16553:32;16550:52;;;16598:1;16595;16588:12;16550:52;16631:9;16625:16;16664:18;16656:6;16653:30;16650:50;;;16696:1;16693;16686:12;16650:50;16719:60;16771:7;16762:6;16751:9;16747:22;16719:60;:::i;16790:555::-;17047:6;17039;17035:19;17024:9;17017:38;17091:3;17086:2;17075:9;17071:18;17064:31;16998:4;17118:45;17158:3;17147:9;17143:19;17135:6;17118:45;:::i;:::-;17211:18;17203:6;17199:31;17194:2;17183:9;17179:18;17172:59;17279:9;17271:6;17267:22;17262:2;17251:9;17247:18;17240:50;17307:32;17332:6;17324;17307:32;:::i;17711:396::-;17799:6;17807;17860:2;17848:9;17839:7;17835:23;17831:32;17828:52;;;17876:1;17873;17866:12;17828:52;17909:9;17903:16;17942:18;17934:6;17931:30;17928:50;;;17974:1;17971;17964:12;17928:50;17997:60;18049:7;18040:6;18029:9;18025:22;17997:60;:::i;:::-;17987:70;;;18097:2;18086:9;18082:18;18076:25;18066:35;;17711:396;;;;;:::o;18701:249::-;18770:6;18823:2;18811:9;18802:7;18798:23;18794:32;18791:52;;;18839:1;18836;18829:12;18791:52;18871:9;18865:16;18890:30;18914:5;18890:30;:::i;19589:184::-;19659:6;19712:2;19700:9;19691:7;19687:23;19683:32;19680:52;;;19728:1;19725;19718:12;19680:52;-1:-1:-1;19751:16:1;;19589:184;-1:-1:-1;19589:184:1:o;20539:245::-;20606:6;20659:2;20647:9;20638:7;20634:23;20630:32;20627:52;;;20675:1;20672;20665:12;20627:52;20707:9;20701:16;20726:28;20748:5;20726:28;:::i;21388:860::-;21737:6;21729;21725:19;21714:9;21707:38;21781:3;21776:2;21765:9;21761:18;21754:31;21688:4;21808:45;21848:3;21837:9;21833:19;21825:6;21808:45;:::i;:::-;21901:9;21893:6;21889:22;21884:2;21873:9;21869:18;21862:50;21935:32;21960:6;21952;21935:32;:::i;:::-;-1:-1:-1;;;;;22064:15:1;;;22059:2;22044:18;;22037:43;22117:15;;22111:3;22096:19;;22089:44;22170:22;;;22164:3;22149:19;;22142:51;21921:46;-1:-1:-1;22210:32:1;21921:46;22227:6;22210:32;:::i;:::-;22202:40;21388:860;-1:-1:-1;;;;;;;;;21388:860:1:o
Swarm Source
ipfs://e5573cdb2fc66ff9236006a620eb0f981277e8613343be5c683c8f46d95a809a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.