Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 11690718 | 1337 days ago | IN | 0 ETH | 0.09678748 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
LnErc20Bridge
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-01-20 */ // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSAUpgradeable { /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { // Check the signature length if (signature.length != 65) { revert("ECDSA: invalid signature length"); } // Divide the signature in r, s and v variables bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. // solhint-disable-next-line no-inline-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. require( uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, "ECDSA: invalid signature 's' value" ); require(v == 27 || v == 28, "ECDSA: invalid signature 'v' value"); // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); require(signer != address(0), "ECDSA: invalid signature"); return signer; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * replicates the behavior of the * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`] * JSON-RPC method. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } } interface IMintBurnToken { function mint(address account, uint256 amount) external; function burn(address account, uint256 amount) external; } /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { require(_initializing || _isConstructor() || !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function _isConstructor() private view returns (bool) { // extcodesize checks the size of the code stored in an address, and // address returns the current address. Since the code is still not // deployed when running a constructor, any checks on its code size will // yield zero, making it an effective way to detect if a contract is // under construction or not. address self = address(this); uint256 cs; // solhint-disable-next-line no-inline-assembly assembly { cs := extcodesize(self) } return cs == 0; } } /** * @title LnAdminUpgradeable * * @dev This is an upgradeable version of `LnAdmin` by replacing the constructor with * an initializer and reserving storage slots. */ contract LnAdminUpgradeable is Initializable { event CandidateChanged(address oldCandidate, address newCandidate); event AdminChanged(address oldAdmin, address newAdmin); address public admin; address public candidate; function __LnAdminUpgradeable_init(address _admin) public initializer { require(_admin != address(0), "LnAdminUpgradeable: zero address"); admin = _admin; emit AdminChanged(address(0), _admin); } function setCandidate(address _candidate) external onlyAdmin { address old = candidate; candidate = _candidate; emit CandidateChanged(old, candidate); } function becomeAdmin() external { require(msg.sender == candidate, "LnAdminUpgradeable: only candidate can become admin"); address old = admin; admin = candidate; emit AdminChanged(old, admin); } modifier onlyAdmin { require((msg.sender == admin), "LnAdminUpgradeable: only the contract admin can perform this action"); _; } // Reserved storage space to allow for layout changes in the future. uint256[48] private __gap; } /** * @title LnErc20Bridge * * @dev An upgradeable contract for moving ERC20 tokens across blockchains. An * off-chain relayer is responsible for signing proofs of deposits to be used on destination * chains of the transactions. A multi-relayer set up can be used for enhanced security and * decentralization. * * @dev The relayer should wait for finality on the source chain before generating a deposit * proof. Otherwise a double-spending attack is possible. * * @dev The bridge can operate in two different modes for each token: transfer mode and mint/burn * mode, depending on the nature of the token. * * @dev Note that transaction hashes shall NOT be used for re-entrance prevention as doing * so will result in false negatives when multiple transfers are made in a single * transaction (with the use of contracts). * * @dev Chain IDs in this contract currently refer to the ones introduced in EIP-155. However, * a list of custom IDs might be used instead when non-EVM compatible chains are added. */ contract LnErc20Bridge is LnAdminUpgradeable { using ECDSAUpgradeable for bytes32; /** * @dev Emits when a deposit is made. * * @dev Addresses are represented with bytes32 to maximize compatibility with * non-Ethereum-compatible blockchains. * * @param srcChainId Chain ID of the source blockchain (current chain) * @param destChainId Chain ID of the destination blockchain * @param depositId Unique ID of the deposit on the current chain * @param depositor Address of the account on the current chain that made the deposit * @param recipient Address of the account on the destination chain that will receive the amount * @param currency A bytes32-encoded universal currency key * @param amount Amount of tokens being deposited to recipient's address. */ event TokenDeposited( uint256 srcChainId, uint256 destChainId, uint256 depositId, bytes32 depositor, bytes32 recipient, bytes32 currency, uint256 amount ); event TokenWithdrawn( uint256 srcChainId, uint256 destChainId, uint256 depositId, bytes32 depositor, bytes32 recipient, bytes32 currency, uint256 amount ); event RelayerChanged(address oldRelayer, address newRelayer); event TokenAdded(bytes32 tokenKey, address tokenAddress, uint8 lockType); event TokenRemoved(bytes32 tokenKey); event ChainSupportForTokenAdded(bytes32 tokenKey, uint256 chainId); event ChainSupportForTokenDropped(bytes32 tokenKey, uint256 chainId); struct TokenInfo { address tokenAddress; uint8 lockType; } uint256 public currentChainId; address public relayer; uint256 public depositCount; mapping(bytes32 => TokenInfo) public tokenInfos; mapping(bytes32 => mapping(uint256 => bool)) public tokenSupportedOnChain; mapping(uint256 => mapping(uint256 => bool)) public withdrawnDeposits; bytes32 public DOMAIN_SEPARATOR; // For EIP-712 bytes32 public constant DEPOSIT_TYPEHASH = keccak256( "Deposit(uint256 srcChainId,uint256 destChainId,uint256 depositId,bytes32 depositor,bytes32 recipient,bytes32 currency,uint256 amount)" ); uint8 public constant TOKEN_LOCK_TYPE_TRANSFER = 1; uint8 public constant TOKEN_LOCK_TYPE_MINT_BURN = 2; bytes4 private constant TRANSFER_SELECTOR = bytes4(keccak256(bytes("transfer(address,uint256)"))); bytes4 private constant TRANSFERFROM_SELECTOR = bytes4(keccak256(bytes("transferFrom(address,address,uint256)"))); function getTokenAddress(bytes32 tokenKey) public view returns (address) { return tokenInfos[tokenKey].tokenAddress; } function getTokenLockType(bytes32 tokenKey) public view returns (uint8) { return tokenInfos[tokenKey].lockType; } function isTokenSupportedOnChain(bytes32 tokenKey, uint256 chainId) public view returns (bool) { return tokenSupportedOnChain[tokenKey][chainId]; } function __LnErc20Bridge_init(address _relayer, address _admin) public initializer { __LnAdminUpgradeable_init(_admin); _setRelayer(_relayer); uint256 chainId; assembly { chainId := chainid() } currentChainId = chainId; DOMAIN_SEPARATOR = keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes("Linear")), keccak256(bytes("1")), chainId, address(this) ) ); } function setRelayer(address _relayer) external onlyAdmin { _setRelayer(_relayer); } function addToken( bytes32 tokenKey, address tokenAddress, uint8 lockType ) external onlyAdmin { require(tokenInfos[tokenKey].tokenAddress == address(0), "LnErc20Bridge: token already exists"); require(tokenAddress != address(0), "LnErc20Bridge: zero address"); require( lockType == TOKEN_LOCK_TYPE_TRANSFER || lockType == TOKEN_LOCK_TYPE_MINT_BURN, "LnErc20Bridge: unknown token lock type" ); tokenInfos[tokenKey] = TokenInfo({tokenAddress: tokenAddress, lockType: lockType}); emit TokenAdded(tokenKey, tokenAddress, lockType); } function removeToken(bytes32 tokenKey) external onlyAdmin { require(tokenInfos[tokenKey].tokenAddress != address(0), "LnErc20Bridge: token does not exists"); delete tokenInfos[tokenKey]; emit TokenRemoved(tokenKey); } function addChainSupportForToken(bytes32 tokenKey, uint256 chainId) external onlyAdmin { require(!tokenSupportedOnChain[tokenKey][chainId], "LnErc20Bridge: already supported"); tokenSupportedOnChain[tokenKey][chainId] = true; emit ChainSupportForTokenAdded(tokenKey, chainId); } function dropChainSupportForToken(bytes32 tokenKey, uint256 chainId) external onlyAdmin { require(tokenSupportedOnChain[tokenKey][chainId], "LnErc20Bridge: not supported"); tokenSupportedOnChain[tokenKey][chainId] = false; emit ChainSupportForTokenDropped(tokenKey, chainId); } function deposit( bytes32 token, uint256 amount, uint256 destChainId, bytes32 recipient ) external { TokenInfo memory tokenInfo = tokenInfos[token]; require(tokenInfo.tokenAddress != address(0), "LnErc20Bridge: token not found"); require(amount > 0, "LnErc20Bridge: amount must be positive"); require(destChainId != currentChainId, "LnErc20Bridge: dest must be different from src"); require(isTokenSupportedOnChain(token, destChainId), "LnErc20Bridge: token not supported on chain"); require(recipient != 0, "LnErc20Bridge: zero address"); depositCount = depositCount + 1; if (tokenInfo.lockType == TOKEN_LOCK_TYPE_TRANSFER) { safeTransferFrom(tokenInfo.tokenAddress, msg.sender, address(this), amount); } else if (tokenInfo.lockType == TOKEN_LOCK_TYPE_MINT_BURN) { IMintBurnToken(tokenInfo.tokenAddress).burn(msg.sender, amount); } else { require(false, "LnErc20Bridge: unknown token lock type"); } emit TokenDeposited( currentChainId, destChainId, depositCount, bytes32(uint256(msg.sender)), recipient, token, amount ); } function withdraw( uint256 srcChainId, uint256 destChainId, uint256 depositId, bytes32 depositor, bytes32 recipient, bytes32 currency, uint256 amount, bytes calldata signature ) external { require(destChainId == currentChainId, "LnErc20Bridge: wrong chain"); require(!withdrawnDeposits[srcChainId][depositId], "LnErc20Bridge: already withdrawn"); require(recipient != 0, "LnErc20Bridge: zero address"); require(amount > 0, "LnErc20Bridge: amount must be positive"); TokenInfo memory tokenInfo = tokenInfos[currency]; require(tokenInfo.tokenAddress != address(0), "LnErc20Bridge: token not found"); // Verify EIP-712 signature bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR, keccak256( abi.encode( DEPOSIT_TYPEHASH, srcChainId, destChainId, depositId, depositor, recipient, currency, amount ) ) ) ); address recoveredAddress = digest.recover(signature); require(recoveredAddress == relayer, "LnErc20Bridge: invalid signature"); withdrawnDeposits[srcChainId][depositId] = true; address decodedRecipient = address(uint160(uint256(recipient))); if (tokenInfo.lockType == TOKEN_LOCK_TYPE_TRANSFER) { safeTransfer(tokenInfo.tokenAddress, decodedRecipient, amount); } else if (tokenInfo.lockType == TOKEN_LOCK_TYPE_MINT_BURN) { IMintBurnToken(tokenInfo.tokenAddress).mint(decodedRecipient, amount); } else { require(false, "LnErc20Bridge: unknown token lock type"); } emit TokenWithdrawn(srcChainId, destChainId, depositId, depositor, recipient, currency, amount); } function _setRelayer(address _relayer) private { require(_relayer != address(0), "LnErc20Bridge: zero address"); require(_relayer != relayer, "LnErc20Bridge: relayer not changed"); address oldRelayer = relayer; relayer = _relayer; emit RelayerChanged(oldRelayer, relayer); } function safeTransfer( address token, address recipient, uint256 amount ) private { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(TRANSFER_SELECTOR, recipient, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), "LnErc20Bridge: transfer failed"); } function safeTransferFrom( address token, address sender, address recipient, uint256 amount ) private { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(TRANSFERFROM_SELECTOR, sender, recipient, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), "LnErc20Bridge: transfer from failed"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldCandidate","type":"address"},{"indexed":false,"internalType":"address","name":"newCandidate","type":"address"}],"name":"CandidateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"tokenKey","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"ChainSupportForTokenAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"tokenKey","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"ChainSupportForTokenDropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldRelayer","type":"address"},{"indexed":false,"internalType":"address","name":"newRelayer","type":"address"}],"name":"RelayerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"tokenKey","type":"bytes32"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint8","name":"lockType","type":"uint8"}],"name":"TokenAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"srcChainId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"destChainId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"depositId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"depositor","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"recipient","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"currency","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"tokenKey","type":"bytes32"}],"name":"TokenRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"srcChainId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"destChainId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"depositId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"depositor","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"recipient","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"currency","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenWithdrawn","type":"event"},{"inputs":[],"name":"DEPOSIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_LOCK_TYPE_MINT_BURN","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_LOCK_TYPE_TRANSFER","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"__LnAdminUpgradeable_init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_relayer","type":"address"},{"internalType":"address","name":"_admin","type":"address"}],"name":"__LnErc20Bridge_init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"tokenKey","type":"bytes32"},{"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"addChainSupportForToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"tokenKey","type":"bytes32"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint8","name":"lockType","type":"uint8"}],"name":"addToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"becomeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"candidate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"token","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"destChainId","type":"uint256"},{"internalType":"bytes32","name":"recipient","type":"bytes32"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"tokenKey","type":"bytes32"},{"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"dropChainSupportForToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"tokenKey","type":"bytes32"}],"name":"getTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"tokenKey","type":"bytes32"}],"name":"getTokenLockType","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"tokenKey","type":"bytes32"},{"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"isTokenSupportedOnChain","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"relayer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"tokenKey","type":"bytes32"}],"name":"removeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_candidate","type":"address"}],"name":"setCandidate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_relayer","type":"address"}],"name":"setRelayer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"tokenInfos","outputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint8","name":"lockType","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenSupportedOnChain","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"srcChainId","type":"uint256"},{"internalType":"uint256","name":"destChainId","type":"uint256"},{"internalType":"uint256","name":"depositId","type":"uint256"},{"internalType":"bytes32","name":"depositor","type":"bytes32"},{"internalType":"bytes32","name":"recipient","type":"bytes32"},{"internalType":"bytes32","name":"currency","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdrawnDeposits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50612904806100206000396000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80636c8381f8116100ee57806390f1f17b11610097578063b594909111610071578063b5949091146104f9578063d22ed8b61461053b578063df225e8c1461055e578063f851a44014610599576101ae565b806390f1f17b14610485578063a8d6e15d146104d4578063b12e4410146104dc576101ae565b80637ba898f7116100c85780637ba898f71461042d5780638406c0791461044a5780638e118b8314610452576101ae565b80636c8381f8146103575780636cbadbfa146103885780636dea061914610390576101ae565b80633644e5151161015b5780634c5dd3f3116101355780634c5dd3f3146102c05780634ff5174c146102e35780636025e492146103065780636548e9bc14610324576101ae565b80633644e5151461028157806339eeee441461028957806348825e94146102b8576101ae565b806325971dff1161018c57806325971dff1461023c5780632bca8a75146102445780632dfdf0b514610267576101ae565b80630589b8b2146101b357806307880b7f146101ea578063224e74621461021f575b600080fd5b6101d6600480360360408110156101c957600080fd5b50803590602001356105a1565b604080519115158252519081900360200190f35b61021d6004803603602081101561020057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166105c1565b005b61021d6004803603602081101561023557600080fd5b50356106be565b61021d61081a565b6101d66004803603604081101561025a57600080fd5b5080359060200135610920565b61026f610940565b60408051918252519081900360200190f35b61026f610946565b61021d6004803603608081101561029f57600080fd5b508035906020810135906040810135906060013561094c565b61026f610d19565b61021d600480360360408110156102d657600080fd5b5080359060200135610d3d565b61021d600480360360408110156102f957600080fd5b5080359060200135610ebb565b61030e611035565b6040805160ff9092168252519081900360200190f35b61021d6004803603602081101561033a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661103a565b61035f6110bc565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61026f6110d8565b61021d60048036036101008110156103a757600080fd5b81359160208101359160408201359160608101359160808201359160a08101359160c08201359190810190610100810160e08201356401000000008111156103ee57600080fd5b82018360208201111561040057600080fd5b8035906020019184600183028401116401000000008311171561042257600080fd5b5090925090506110de565b61030e6004803603602081101561044357600080fd5b503561166e565b61035f61169b565b61021d6004803603602081101561046857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166116b7565b6104a26004803603602081101561049b57600080fd5b50356118d3565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff90911660208301528051918290030190f35b61030e611918565b61035f600480360360208110156104f257600080fd5b503561191d565b61021d6004803603606081101561050f57600080fd5b50803590602081013573ffffffffffffffffffffffffffffffffffffffff16906040013560ff16611945565b6101d66004803603604081101561055157600080fd5b5080359060200135611c12565b61021d6004803603604081101561057457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611c32565b61035f611e62565b603660209081526000928352604080842090915290825290205460ff1681565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314610637576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806128666043913960600191505060405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831617928390556040805192821680845293909116602083015280517f7f730391c4f0fa1bea34bcb9bff8c30a079b21a0359759160cb990648ab84c729281900390910190a15050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314610734576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806128666043913960600191505060405180910390fd5b60008181526035602052604090205473ffffffffffffffffffffffffffffffffffffffff166107ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806127cf6024913960400191505060405180910390fd5b60008181526035602090815260409182902080547fffffffffffffffffffffff000000000000000000000000000000000000000000169055815183815291517f27b51627532fe8cd0df946e5a9590efb06cc367d3d611c1e4084c7e1dccb3ab49281900390910190a150565b60015473ffffffffffffffffffffffffffffffffffffffff16331461088a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603381526020018061274b6033913960400191505060405180910390fd5b6000805460015473ffffffffffffffffffffffffffffffffffffffff908116620100009081027fffffffffffffffffffff0000000000000000000000000000000000000000ffff8416179384905560408051938290048316808552919094049091166020830152825190927f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f928290030190a150565b603760209081526000928352604080842090915290825290205460ff1681565b60345481565b60385481565b60008481526035602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff81168084527401000000000000000000000000000000000000000090910460ff1691830191909152610a0f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4c6e45726332304272696467653a20746f6b656e206e6f7420666f756e640000604482015290519081900360640190fd5b60008411610a68576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806128156026913960400191505060405180910390fd5b603254831415610ac3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806126d8602e913960400191505060405180910390fd5b610acd8584611c12565b610b22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061283b602b913960400191505060405180910390fd5b81610b8e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4c6e45726332304272696467653a207a65726f20616464726573730000000000604482015290519081900360640190fd5b603480546001908101909155602082015160ff161415610bbb578051610bb690333087611e84565b610cb1565b602081015160ff1660021415610c60578051604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101879052905173ffffffffffffffffffffffffffffffffffffffff90921691639dc29fac9160448082019260009290919082900301818387803b158015610c4357600080fd5b505af1158015610c57573d6000803e3d6000fd5b50505050610cb1565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806128a96026913960400191505060405180910390fd5b6032546034546040805192835260208301869052828101919091523360608301526080820184905260a0820187905260c08201869052517fe048043259af829807fad585485c031d37a62916d79cf4ed94a2c6e7e61f4fb09181900360e00190a15050505050565b7f7dea0ff38c20ec194d3cb84e9720e47fce7770d8b28af58ea15562bc9cf5286081565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314610db3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806128666043913960600191505060405180910390fd5b600082815260366020908152604080832084845290915290205460ff1615610e3c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4c6e45726332304272696467653a20616c726561647920737570706f72746564604482015290519081900360640190fd5b600082815260366020908152604080832084845282529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815184815290810183905281517f71d564e28114f33667381ae9c6bfadc1254fab8fb4e6a9606bfa512cb5e7df49929181900390910190a15050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314610f31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806128666043913960600191505060405180910390fd5b600082815260366020908152604080832084845290915290205460ff16610fb957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4c6e45726332304272696467653a206e6f7420737570706f7274656400000000604482015290519081900360640190fd5b600082815260366020908152604080832084845282529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055815184815290810183905281517fb8a301810556c08eff893eded78cbada9895cdb3c3976c53f3c48073e23d2422929181900390910190a15050565b600181565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806128666043913960600191505060405180910390fd5b6110b981612087565b50565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60325481565b603254881461114e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4c6e45726332304272696467653a2077726f6e6720636861696e000000000000604482015290519081900360640190fd5b60008981526037602090815260408083208a845290915290205460ff16156111d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4c6e45726332304272696467653a20616c72656164792077697468647261776e604482015290519081900360640190fd5b8461124357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4c6e45726332304272696467653a207a65726f20616464726573730000000000604482015290519081900360640190fd5b6000831161129c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806128156026913960400191505060405180910390fd5b60008481526035602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff81168084527401000000000000000000000000000000000000000090910460ff169183019190915261135f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4c6e45726332304272696467653a20746f6b656e206e6f7420666f756e640000604482015290519081900360640190fd5b603854604080517f7dea0ff38c20ec194d3cb84e9720e47fce7770d8b28af58ea15562bc9cf528606020808301919091528183018e9052606082018d9052608082018c905260a082018b905260c082018a905260e0820189905261010080830189905283518084039091018152610120830184528051908201207f1901000000000000000000000000000000000000000000000000000000000000610140840152610142830194909452610162808301949094528251808303909401845261018282018084528451948201949094206101a2601f8801839004909202830182019093528584529192600092611470928891889182910183828082843760009201919091525086939250506122049050565b60335490915073ffffffffffffffffffffffffffffffffffffffff8083169116146114fc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4c6e45726332304272696467653a20696e76616c6964207369676e6174757265604482015290519081900360640190fd5b60008c81526037602090815260408083208d8452825290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915590840151899160ff91909116141561156557835161156090828961247e565b611603565b602084015160ff1660021415610c6057836000015173ffffffffffffffffffffffffffffffffffffffff166340c10f1982896040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156115ea57600080fd5b505af11580156115fe573d6000803e3d6000fd5b505050505b604080518e8152602081018e90528082018d9052606081018c9052608081018b905260a081018a905260c0810189905290517f7b585240ba8820bb7f974aecfbf00d525f6a451106a775438a3f64c48875d5709181900360e00190a150505050505050505050505050565b60009081526035602052604090205474010000000000000000000000000000000000000000900460ff1690565b60335473ffffffffffffffffffffffffffffffffffffffff1681565b600054610100900460ff16806116d057506116d061268a565b806116de575060005460ff16155b611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806127a1602e913960400191505060405180910390fd5b600054610100900460ff1615801561179957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b73ffffffffffffffffffffffffffffffffffffffff821661181b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4c6e41646d696e5570677261646561626c653a207a65726f2061646472657373604482015290519081900360640190fd5b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff851690810291909117825560408051928352602083019190915280517f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f9281900390910190a180156118cf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b60356020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900460ff1682565b600281565b60009081526035602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146119bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806128666043913960600191505060405180910390fd5b60008381526035602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611a36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061277e6023913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611ab857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4c6e45726332304272696467653a207a65726f20616464726573730000000000604482015290519081900360640190fd5b60ff811660011480611acd575060ff81166002145b611b22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806128a96026913960400191505060405180910390fd5b60408051808201825273ffffffffffffffffffffffffffffffffffffffff80851680835260ff808616602080860182815260008b81526035835288902096518754915190941674010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff949096167fffffffffffffffffffffffff00000000000000000000000000000000000000009091161792909216939093179093558351878152928301528183015290517fd9c6008de31d775aae4523eb2e6e6565ea965cabb3eac06153885621c3ddb0359181900360600190a1505050565b600091825260366020908152604080842092845291905290205460ff1690565b600054610100900460ff1680611c4b5750611c4b61268a565b80611c59575060005460ff16155b611cae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806127a1602e913960400191505060405180910390fd5b600054610100900460ff16158015611d1457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611d1d826116b7565b611d2683612087565b466032819055604080518082018252600681527f4c696e656172000000000000000000000000000000000000000000000000000060209182015281518083018352600181527f31000000000000000000000000000000000000000000000000000000000000009082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f16061f58256c86e6eb7d166e78be192f96e51b4ccf2d8de3d9fbf3c6cbdb9bb5818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101939093523060a0808501919091528251808503909101815260c090930190915281519101206038558015611e5d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808573ffffffffffffffffffffffffffffffffffffffff166040518060600160405280602581526020016126b36025913980516020918201206040805173ffffffffffffffffffffffffffffffffffffffff808b166024830152891660448201526064808201899052825180830390910181526084909101825292830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092178252518251909182918083835b60208310611f9557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611f58565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611ff7576040519150601f19603f3d011682016040523d82523d6000602084013e611ffc565b606091505b509150915081801561202a57508051158061202a575080806020019051602081101561202757600080fd5b50515b61207f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806127066023913960400191505060405180910390fd5b505050505050565b73ffffffffffffffffffffffffffffffffffffffff811661210957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4c6e45726332304272696467653a207a65726f20616464726573730000000000604482015290519081900360640190fd5b60335473ffffffffffffffffffffffffffffffffffffffff8281169116141561217d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806126916022913960400191505060405180910390fd5b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831617928390556040805192821680845293909116602083015280517f18f08848c5694a025f9966c34ff2367f32a1a8275663b282ee01f4338b0454909281900390910190a15050565b6000815160411461227657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806127296022913960400191505060405180910390fd5b8060ff16601b148061231657508060ff16601c145b61236b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806127f36022913960400191505060405180910390fd5b600060018783868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156123c7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661247457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9695505050505050565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017815292518151600094859489169392918291908083835b6020831061258357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612546565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146125e5576040519150601f19603f3d011682016040523d82523d6000602084013e6125ea565b606091505b5091509150818015612618575080511580612618575080806020019051602081101561261557600080fd5b50515b61268357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4c6e45726332304272696467653a207472616e73666572206661696c65640000604482015290519081900360640190fd5b5050505050565b303b159056fe4c6e45726332304272696467653a2072656c61796572206e6f74206368616e6765647472616e7366657246726f6d28616464726573732c616464726573732c75696e74323536294c6e45726332304272696467653a2064657374206d75737420626520646966666572656e742066726f6d207372634c6e45726332304272696467653a207472616e736665722066726f6d206661696c656445434453413a20696e76616c6964207369676e6174757265202773272076616c75654c6e41646d696e5570677261646561626c653a206f6e6c792063616e6469646174652063616e206265636f6d652061646d696e4c6e45726332304272696467653a20746f6b656e20616c726561647920657869737473496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644c6e45726332304272696467653a20746f6b656e20646f6573206e6f742065786973747345434453413a20696e76616c6964207369676e6174757265202776272076616c75654c6e45726332304272696467653a20616d6f756e74206d75737420626520706f7369746976654c6e45726332304272696467653a20746f6b656e206e6f7420737570706f72746564206f6e20636861696e4c6e41646d696e5570677261646561626c653a206f6e6c792074686520636f6e74726163742061646d696e2063616e20706572666f726d207468697320616374696f6e4c6e45726332304272696467653a20756e6b6e6f776e20746f6b656e206c6f636b2074797065a2646970667358221220a43d26d98a139a91bc422ec635ccb4cb15ec5b9139a4830d2d5146009bfcacc064736f6c63430007060033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101ae5760003560e01c80636c8381f8116100ee57806390f1f17b11610097578063b594909111610071578063b5949091146104f9578063d22ed8b61461053b578063df225e8c1461055e578063f851a44014610599576101ae565b806390f1f17b14610485578063a8d6e15d146104d4578063b12e4410146104dc576101ae565b80637ba898f7116100c85780637ba898f71461042d5780638406c0791461044a5780638e118b8314610452576101ae565b80636c8381f8146103575780636cbadbfa146103885780636dea061914610390576101ae565b80633644e5151161015b5780634c5dd3f3116101355780634c5dd3f3146102c05780634ff5174c146102e35780636025e492146103065780636548e9bc14610324576101ae565b80633644e5151461028157806339eeee441461028957806348825e94146102b8576101ae565b806325971dff1161018c57806325971dff1461023c5780632bca8a75146102445780632dfdf0b514610267576101ae565b80630589b8b2146101b357806307880b7f146101ea578063224e74621461021f575b600080fd5b6101d6600480360360408110156101c957600080fd5b50803590602001356105a1565b604080519115158252519081900360200190f35b61021d6004803603602081101561020057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166105c1565b005b61021d6004803603602081101561023557600080fd5b50356106be565b61021d61081a565b6101d66004803603604081101561025a57600080fd5b5080359060200135610920565b61026f610940565b60408051918252519081900360200190f35b61026f610946565b61021d6004803603608081101561029f57600080fd5b508035906020810135906040810135906060013561094c565b61026f610d19565b61021d600480360360408110156102d657600080fd5b5080359060200135610d3d565b61021d600480360360408110156102f957600080fd5b5080359060200135610ebb565b61030e611035565b6040805160ff9092168252519081900360200190f35b61021d6004803603602081101561033a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661103a565b61035f6110bc565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61026f6110d8565b61021d60048036036101008110156103a757600080fd5b81359160208101359160408201359160608101359160808201359160a08101359160c08201359190810190610100810160e08201356401000000008111156103ee57600080fd5b82018360208201111561040057600080fd5b8035906020019184600183028401116401000000008311171561042257600080fd5b5090925090506110de565b61030e6004803603602081101561044357600080fd5b503561166e565b61035f61169b565b61021d6004803603602081101561046857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166116b7565b6104a26004803603602081101561049b57600080fd5b50356118d3565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff90911660208301528051918290030190f35b61030e611918565b61035f600480360360208110156104f257600080fd5b503561191d565b61021d6004803603606081101561050f57600080fd5b50803590602081013573ffffffffffffffffffffffffffffffffffffffff16906040013560ff16611945565b6101d66004803603604081101561055157600080fd5b5080359060200135611c12565b61021d6004803603604081101561057457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611c32565b61035f611e62565b603660209081526000928352604080842090915290825290205460ff1681565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314610637576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806128666043913960600191505060405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831617928390556040805192821680845293909116602083015280517f7f730391c4f0fa1bea34bcb9bff8c30a079b21a0359759160cb990648ab84c729281900390910190a15050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314610734576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806128666043913960600191505060405180910390fd5b60008181526035602052604090205473ffffffffffffffffffffffffffffffffffffffff166107ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806127cf6024913960400191505060405180910390fd5b60008181526035602090815260409182902080547fffffffffffffffffffffff000000000000000000000000000000000000000000169055815183815291517f27b51627532fe8cd0df946e5a9590efb06cc367d3d611c1e4084c7e1dccb3ab49281900390910190a150565b60015473ffffffffffffffffffffffffffffffffffffffff16331461088a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603381526020018061274b6033913960400191505060405180910390fd5b6000805460015473ffffffffffffffffffffffffffffffffffffffff908116620100009081027fffffffffffffffffffff0000000000000000000000000000000000000000ffff8416179384905560408051938290048316808552919094049091166020830152825190927f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f928290030190a150565b603760209081526000928352604080842090915290825290205460ff1681565b60345481565b60385481565b60008481526035602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff81168084527401000000000000000000000000000000000000000090910460ff1691830191909152610a0f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4c6e45726332304272696467653a20746f6b656e206e6f7420666f756e640000604482015290519081900360640190fd5b60008411610a68576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806128156026913960400191505060405180910390fd5b603254831415610ac3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806126d8602e913960400191505060405180910390fd5b610acd8584611c12565b610b22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061283b602b913960400191505060405180910390fd5b81610b8e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4c6e45726332304272696467653a207a65726f20616464726573730000000000604482015290519081900360640190fd5b603480546001908101909155602082015160ff161415610bbb578051610bb690333087611e84565b610cb1565b602081015160ff1660021415610c60578051604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101879052905173ffffffffffffffffffffffffffffffffffffffff90921691639dc29fac9160448082019260009290919082900301818387803b158015610c4357600080fd5b505af1158015610c57573d6000803e3d6000fd5b50505050610cb1565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806128a96026913960400191505060405180910390fd5b6032546034546040805192835260208301869052828101919091523360608301526080820184905260a0820187905260c08201869052517fe048043259af829807fad585485c031d37a62916d79cf4ed94a2c6e7e61f4fb09181900360e00190a15050505050565b7f7dea0ff38c20ec194d3cb84e9720e47fce7770d8b28af58ea15562bc9cf5286081565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314610db3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806128666043913960600191505060405180910390fd5b600082815260366020908152604080832084845290915290205460ff1615610e3c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4c6e45726332304272696467653a20616c726561647920737570706f72746564604482015290519081900360640190fd5b600082815260366020908152604080832084845282529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815184815290810183905281517f71d564e28114f33667381ae9c6bfadc1254fab8fb4e6a9606bfa512cb5e7df49929181900390910190a15050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314610f31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806128666043913960600191505060405180910390fd5b600082815260366020908152604080832084845290915290205460ff16610fb957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4c6e45726332304272696467653a206e6f7420737570706f7274656400000000604482015290519081900360640190fd5b600082815260366020908152604080832084845282529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055815184815290810183905281517fb8a301810556c08eff893eded78cbada9895cdb3c3976c53f3c48073e23d2422929181900390910190a15050565b600181565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806128666043913960600191505060405180910390fd5b6110b981612087565b50565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60325481565b603254881461114e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4c6e45726332304272696467653a2077726f6e6720636861696e000000000000604482015290519081900360640190fd5b60008981526037602090815260408083208a845290915290205460ff16156111d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4c6e45726332304272696467653a20616c72656164792077697468647261776e604482015290519081900360640190fd5b8461124357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4c6e45726332304272696467653a207a65726f20616464726573730000000000604482015290519081900360640190fd5b6000831161129c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806128156026913960400191505060405180910390fd5b60008481526035602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff81168084527401000000000000000000000000000000000000000090910460ff169183019190915261135f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4c6e45726332304272696467653a20746f6b656e206e6f7420666f756e640000604482015290519081900360640190fd5b603854604080517f7dea0ff38c20ec194d3cb84e9720e47fce7770d8b28af58ea15562bc9cf528606020808301919091528183018e9052606082018d9052608082018c905260a082018b905260c082018a905260e0820189905261010080830189905283518084039091018152610120830184528051908201207f1901000000000000000000000000000000000000000000000000000000000000610140840152610142830194909452610162808301949094528251808303909401845261018282018084528451948201949094206101a2601f8801839004909202830182019093528584529192600092611470928891889182910183828082843760009201919091525086939250506122049050565b60335490915073ffffffffffffffffffffffffffffffffffffffff8083169116146114fc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4c6e45726332304272696467653a20696e76616c6964207369676e6174757265604482015290519081900360640190fd5b60008c81526037602090815260408083208d8452825290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915590840151899160ff91909116141561156557835161156090828961247e565b611603565b602084015160ff1660021415610c6057836000015173ffffffffffffffffffffffffffffffffffffffff166340c10f1982896040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156115ea57600080fd5b505af11580156115fe573d6000803e3d6000fd5b505050505b604080518e8152602081018e90528082018d9052606081018c9052608081018b905260a081018a905260c0810189905290517f7b585240ba8820bb7f974aecfbf00d525f6a451106a775438a3f64c48875d5709181900360e00190a150505050505050505050505050565b60009081526035602052604090205474010000000000000000000000000000000000000000900460ff1690565b60335473ffffffffffffffffffffffffffffffffffffffff1681565b600054610100900460ff16806116d057506116d061268a565b806116de575060005460ff16155b611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806127a1602e913960400191505060405180910390fd5b600054610100900460ff1615801561179957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b73ffffffffffffffffffffffffffffffffffffffff821661181b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4c6e41646d696e5570677261646561626c653a207a65726f2061646472657373604482015290519081900360640190fd5b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff851690810291909117825560408051928352602083019190915280517f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f9281900390910190a180156118cf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b60356020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900460ff1682565b600281565b60009081526035602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146119bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806128666043913960600191505060405180910390fd5b60008381526035602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611a36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061277e6023913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611ab857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4c6e45726332304272696467653a207a65726f20616464726573730000000000604482015290519081900360640190fd5b60ff811660011480611acd575060ff81166002145b611b22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806128a96026913960400191505060405180910390fd5b60408051808201825273ffffffffffffffffffffffffffffffffffffffff80851680835260ff808616602080860182815260008b81526035835288902096518754915190941674010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff949096167fffffffffffffffffffffffff00000000000000000000000000000000000000009091161792909216939093179093558351878152928301528183015290517fd9c6008de31d775aae4523eb2e6e6565ea965cabb3eac06153885621c3ddb0359181900360600190a1505050565b600091825260366020908152604080842092845291905290205460ff1690565b600054610100900460ff1680611c4b5750611c4b61268a565b80611c59575060005460ff16155b611cae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806127a1602e913960400191505060405180910390fd5b600054610100900460ff16158015611d1457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611d1d826116b7565b611d2683612087565b466032819055604080518082018252600681527f4c696e656172000000000000000000000000000000000000000000000000000060209182015281518083018352600181527f31000000000000000000000000000000000000000000000000000000000000009082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f16061f58256c86e6eb7d166e78be192f96e51b4ccf2d8de3d9fbf3c6cbdb9bb5818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101939093523060a0808501919091528251808503909101815260c090930190915281519101206038558015611e5d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808573ffffffffffffffffffffffffffffffffffffffff166040518060600160405280602581526020016126b36025913980516020918201206040805173ffffffffffffffffffffffffffffffffffffffff808b166024830152891660448201526064808201899052825180830390910181526084909101825292830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092178252518251909182918083835b60208310611f9557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611f58565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611ff7576040519150601f19603f3d011682016040523d82523d6000602084013e611ffc565b606091505b509150915081801561202a57508051158061202a575080806020019051602081101561202757600080fd5b50515b61207f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806127066023913960400191505060405180910390fd5b505050505050565b73ffffffffffffffffffffffffffffffffffffffff811661210957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4c6e45726332304272696467653a207a65726f20616464726573730000000000604482015290519081900360640190fd5b60335473ffffffffffffffffffffffffffffffffffffffff8281169116141561217d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806126916022913960400191505060405180910390fd5b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831617928390556040805192821680845293909116602083015280517f18f08848c5694a025f9966c34ff2367f32a1a8275663b282ee01f4338b0454909281900390910190a15050565b6000815160411461227657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806127296022913960400191505060405180910390fd5b8060ff16601b148061231657508060ff16601c145b61236b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806127f36022913960400191505060405180910390fd5b600060018783868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156123c7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661247457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9695505050505050565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017815292518151600094859489169392918291908083835b6020831061258357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612546565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146125e5576040519150601f19603f3d011682016040523d82523d6000602084013e6125ea565b606091505b5091509150818015612618575080511580612618575080806020019051602081101561261557600080fd5b50515b61268357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4c6e45726332304272696467653a207472616e73666572206661696c65640000604482015290519081900360640190fd5b5050505050565b303b159056fe4c6e45726332304272696467653a2072656c61796572206e6f74206368616e6765647472616e7366657246726f6d28616464726573732c616464726573732c75696e74323536294c6e45726332304272696467653a2064657374206d75737420626520646966666572656e742066726f6d207372634c6e45726332304272696467653a207472616e736665722066726f6d206661696c656445434453413a20696e76616c6964207369676e6174757265202773272076616c75654c6e41646d696e5570677261646561626c653a206f6e6c792063616e6469646174652063616e206265636f6d652061646d696e4c6e45726332304272696467653a20746f6b656e20616c726561647920657869737473496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644c6e45726332304272696467653a20746f6b656e20646f6573206e6f742065786973747345434453413a20696e76616c6964207369676e6174757265202776272076616c75654c6e45726332304272696467653a20616d6f756e74206d75737420626520706f7369746976654c6e45726332304272696467653a20746f6b656e206e6f7420737570706f72746564206f6e20636861696e4c6e41646d696e5570677261646561626c653a206f6e6c792074686520636f6e74726163742061646d696e2063616e20706572666f726d207468697320616374696f6e4c6e45726332304272696467653a20756e6b6e6f776e20746f6b656e206c6f636b2074797065a2646970667358221220a43d26d98a139a91bc422ec635ccb4cb15ec5b9139a4830d2d5146009bfcacc064736f6c63430007060033
Deployed Bytecode Sourcemap
8789:10075:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10678:73;;;;;;;;;;;;;;;;-1:-1:-1;10678:73:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;7038:184;;;;;;;;;;;;;;;;-1:-1:-1;7038:184:0;;;;:::i;:::-;;13323:249;;;;;;;;;;;;;;;;-1:-1:-1;13323:249:0;;:::i;7230:236::-;;;:::i;10758:69::-;;;;;;;;;;;;;;;;-1:-1:-1;10758:69:0;;;;;;;:::i;10590:27::-;;;:::i;:::-;;;;;;;;;;;;;;;;10836:31;;;:::i;14215:1324::-;;;;;;;;;;;;;;;;-1:-1:-1;14215:1324:0;;;;;;;;;;;;;;;;;:::i;10891:222::-;;;:::i;13580:310::-;;;;;;;;;;;;;;;;-1:-1:-1;13580:310:0;;;;;;;:::i;13898:309::-;;;;;;;;;;;;;;;;-1:-1:-1;13898:309:0;;;;;;;:::i;11122:50::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12561:97;;;;;;;;;;;;;;;;-1:-1:-1;12561:97:0;;;;:::i;6770:24::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10525:29;;;:::i;15547:2199::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15547:2199:0;;-1:-1:-1;15547:2199:0;-1:-1:-1;15547:2199:0;:::i;11605:127::-;;;;;;;;;;;;;;;;-1:-1:-1;11605:127:0;;:::i;10561:22::-;;;:::i;6803:227::-;;;;;;;;;;;;;;;;-1:-1:-1;6803:227:0;;;;:::i;10624:47::-;;;;;;;;;;;;;;;;-1:-1:-1;10624:47:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;11179:51;;;:::i;11465:132::-;;;;;;;;;;;;;;;;-1:-1:-1;11465:132:0;;:::i;12666:649::-;;;;;;;;;;;;;;;;-1:-1:-1;12666:649:0;;;;;;;;;;;;;;;;:::i;11740:161::-;;;;;;;;;;;;;;;;-1:-1:-1;11740:161:0;;;;;;;:::i;11909:644::-;;;;;;;;;;;;;;;;-1:-1:-1;11909:644:0;;;;;;;;;;;:::i;6743:20::-;;;:::i;10678:73::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7038:184::-;7527:5;;;;;;;7513:10;:19;7504:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7124:9:::1;::::0;;::::1;7144:22:::0;;::::1;::::0;;::::1;;::::0;;;;7182:32:::1;::::0;;7124:9;;::::1;7182:32:::0;;;7204:9;;;::::1;7182:32;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;7616:1;7038:184:::0;:::o;13323:249::-;7527:5;;;;;;;7513:10;:19;7504:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13445:1:::1;13400:20:::0;;;:10:::1;:20;::::0;;;;:33;:47:::1;:33;13392:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13506:20;::::0;;;:10:::1;:20;::::0;;;;;;;;13499:27;;;;;;13542:22;;;;;;;::::1;::::0;;;;;;;;::::1;13323:249:::0;:::o;7230:236::-;7295:9;;;;7281:10;:23;7273:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7371:11;7385:5;;7409:9;;7385:5;7409:9;;;7385:5;7401:17;;;;;;;;;;;7434:24;;;7385:5;;;;;;7434:24;;;7452:5;;;;;;;7434:24;;;;;;7385:5;;7434:24;;;;;;;;7230:236;:::o;10758:69::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10590:27::-;;;;:::o;10836:31::-;;;;:::o;14215:1324::-;14366:26;14395:17;;;:10;:17;;;;;;;;;14366:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;14423:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14532:1;14523:6;:10;14515:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14610:14;;14595:11;:29;;14587:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14694:43;14718:5;14725:11;14694:23;:43::i;:::-;14686:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14804:14;14796:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14878:12;;;14893:1;14878:16;;;14863:31;;;14911:18;;;;:46;;;14907:392;;;14991:22;;14974:75;;15015:10;15035:4;15042:6;14974:16;:75::i;:::-;14907:392;;;15071:18;;;;:47;;11229:1;15071:47;15067:232;;;15150:22;;15135:63;;;;;;15179:10;15135:63;;;;;;;;;;;;:43;;;;;;;:63;;;;;15150:22;;15135:63;;;;;;;;15150:22;15135:43;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15067:232;;;15231:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15345:14;;15400:12;;15316:215;;;;;;;;;;;;;;;;;;;15443:10;15316:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14215:1324;;;;;:::o;10891:222::-;10943:170;10891:222;:::o;13580:310::-;7527:5;;;;;;;7513:10;:19;7504:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13687:31:::1;::::0;;;:21:::1;:31;::::0;;;;;;;:40;;;;;;;;;::::1;;13686:41;13678:86;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;13775:31;::::0;;;:21:::1;:31;::::0;;;;;;;:40;;;;;;;;;:47;;;::::1;13818:4;13775:47;::::0;;13838:44;;;;;;;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;13580:310:::0;;:::o;13898:309::-;7527:5;;;;;;;7513:10;:19;7504:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14005:31:::1;::::0;;;:21:::1;:31;::::0;;;;;;;:40;;;;;;;;;::::1;;13997:81;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;14132:5;14089:31:::0;;;:21:::1;:31;::::0;;;;;;;:40;;;;;;;;;:48;;;::::1;::::0;;14153:46;;;;;;;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;13898:309:::0;;:::o;11122:50::-;11171:1;11122:50;:::o;12561:97::-;7527:5;;;;;;;7513:10;:19;7504:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12629:21:::1;12641:8;12629:11;:21::i;:::-;12561:97:::0;:::o;6770:24::-;;;;;;:::o;10525:29::-;;;;:::o;15547:2199::-;15845:14;;15830:11;:29;15822:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15910:29;;;;:17;:29;;;;;;;;:40;;;;;;;;;;;15909:41;15901:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16006:14;15998:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16080:1;16071:6;:10;16063:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16137:26;16166:20;;;:10;:20;;;;;;;;;16137:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;16197:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16456:16;;16531:363;;;10943:170;16531:363;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16495:422;;;;;;16384:552;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16356:595;;;;;;;;;16989:25;;;;;;;;;;;;;;;;;;;;16356:595;;16326:14;;16989:25;;17004:9;;;;;;16989:25;17004:9;;;;16989:25;;;;;;;;;-1:-1:-1;16989:6:0;;:25;-1:-1:-1;;16989:14:0;:25;-1:-1:-1;16989:25:0:i;:::-;17053:7;;16962:52;;-1:-1:-1;17053:7:0;17033:27;;;17053:7;;17033:27;17025:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17110:29;;;;:17;:29;;;;;;;;:40;;;;;;;;:47;;;;17153:4;17110:47;;;;;;17250:18;;;;17221:9;;17110:47;17250:46;;;;;17246:385;;;17326:22;;17313:62;;17350:16;17368:6;17313:12;:62::i;:::-;17246:385;;;17397:18;;;;:47;;11229:1;17397:47;17393:238;;;17476:9;:22;;;17461:43;;;17505:16;17523:6;17461:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17563:56;17648:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15547:2199;;;;;;;;;;;;;:::o;11605:127::-;11670:5;11695:20;;;:10;:20;;;;;:29;;;;;;;11605:127::o;10561:22::-;;;;;;:::o;6803:227::-;5287:13;;;;;;;;:33;;;5304:16;:14;:16::i;:::-;5287:50;;;-1:-1:-1;5325:12:0;;;;5324:13;5287:50;5279:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5401:19;5424:13;;;;;;5423:14;5448:101;;;;5483:13;:20;;5518:19;5483:20;;;;;;5518:19;5499:4;5518:19;;;5448:101;6892:20:::1;::::0;::::1;6884:65;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;6960:5;:14:::0;;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;6990:32:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;;;;;;;::::1;5579:14:::0;5575:68;;;5626:5;5610:21;;;;;;5575:68;6803:227;;:::o;10624:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;11179:51::-;11229:1;11179:51;:::o;11465:132::-;11529:7;11556:20;;;:10;:20;;;;;:33;;;;11465:132::o;12666:649::-;7527:5;;;;;;;7513:10;:19;7504:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12857:1:::1;12812:20:::0;;;:10:::1;:20;::::0;;;;:33;:47:::1;:33;:47:::0;12804:95:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12918:26;::::0;::::1;12910:66;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;13009:36;::::0;::::1;11171:1;13009:36;::::0;:77:::1;;-1:-1:-1::0;13049:37:0::1;::::0;::::1;11229:1;13049:37;13009:77;12987:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13188:59;::::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;;::::1;::::0;;;-1:-1:-1;13165:20:0;;;:10:::1;:20:::0;;;;;:82;;;;;;;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;13263:44;;;;;;;::::1;::::0;;;;;;;::::1;::::0;;;;;;;::::1;12666:649:::0;;;:::o;11740:161::-;11829:4;11853:31;;;:21;:31;;;;;;;;:40;;;;;;;;;;;;11740:161::o;11909:644::-;5287:13;;;;;;;;:33;;;5304:16;:14;:16::i;:::-;5287:50;;;-1:-1:-1;5325:12:0;;;;5324:13;5287:50;5279:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5401:19;5424:13;;;;;;5423:14;5448:101;;;;5483:13;:20;;5518:19;5483:20;;;;;;5518:19;5499:4;5518:19;;;5448:101;12003:33:::1;12029:6;12003:25;:33::i;:::-;12049:21;12061:8;12049:11;:21::i;:::-;12144:9;12174:14;:24:::0;;;12405:15:::1;::::0;;;;::::1;::::0;;::::1;::::0;;::::1;;::::0;;::::1;::::0;12450:10;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;12252:282;;12281:95:::1;12252:282:::0;;::::1;::::0;12395:26;12252:282;;;;12440:21;12252:282;;;;;;;;;;;12514:4:::1;12252:282:::0;;;;;;;;;;;;;;;;;;;;;;;;;12228:317;;;::::1;::::0;12209:16:::1;:336:::0;5575:68;;;;5626:5;5610:21;;;;;;5575:68;11909:644;;;:::o;6743:20::-;;;;;;;;;:::o;18450:411::-;18605:12;18619:17;18653:5;:10;;11408:46;;;;;;;;;;;;;;;;;11398:57;;;;;;;18664:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18653:84;;;;;;;;;18664:72;18653:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18604:133;;;;18756:7;:57;;;;-1:-1:-1;18768:11:0;;:16;;:44;;;18799:4;18788:24;;;;;;;;;;;;;;;-1:-1:-1;18788:24:0;18768:44;18748:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18450:411;;;;;;:::o;17754:328::-;17820:22;;;17812:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17905:7;;;17893:19;;;17905:7;;17893:19;;17885:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17985:7;;;;18003:18;;;;;;;;;;;18039:35;;;17985:7;;;18039:35;;;18066:7;;;;18039:35;;;;;;;;;;;;;;;;17754:328;;:::o;1108:2088::-;1186:7;1249:9;:16;1269:2;1249:22;1245:96;;1288:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1245:96;1702:4;1687:20;;1681:27;1748:4;1733:20;;1727:27;1802:4;1787:20;;1781:27;1410:9;1773:36;2751:66;2737:80;;;2715:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2898:1;:7;;2903:2;2898:7;:18;;;;2909:1;:7;;2914:2;2909:7;2898:18;2890:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3053:14;3070:24;3080:4;3086:1;3089;3092;3070:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3070:24:0;;;;;;-1:-1:-1;;3113:20:0;;;3105:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3182:6;1108:2088;-1:-1:-1;;;;;;1108:2088:0:o;18090:352::-;11300:34;;;;;;;;;;;;;;;;;18262:60;;18251:10;18262:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18251:72;;;;18216:12;;;;18251:10;;;18262:60;18251:72;;;18262:60;18251:72;;18262:60;18251:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18215:108;;;;18342:7;:57;;;;-1:-1:-1;18354:11:0;;:16;;:44;;;18385:4;18374:24;;;;;;;;;;;;;;;-1:-1:-1;18374:24:0;18354:44;18334:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18090:352;;;;;:::o;5743:626::-;6185:4;6309:17;6354:7;5743:626;:::o
Swarm Source
ipfs://a43d26d98a139a91bc422ec635ccb4cb15ec5b9139a4830d2d5146009bfcacc0
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.