Polygon Sponsored slots available. Book your slot here!
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,036 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw ERC20 | 30897537 | 1008 days ago | IN | 0 POL | 0.00174724 | ||||
Withdraw ERC20 | 30897527 | 1008 days ago | IN | 0 POL | 0.00149328 | ||||
Withdraw ETH | 30897490 | 1008 days ago | IN | 0 POL | 0.00097967 | ||||
Redeem Token For... | 29208976 | 1052 days ago | IN | 0 POL | 0.00207414 | ||||
Redeem Token For... | 29204146 | 1052 days ago | IN | 0 POL | 0.0008571 | ||||
Redeem Token For... | 29204141 | 1052 days ago | IN | 0 POL | 0.0008571 | ||||
Redeem Token For... | 29201870 | 1052 days ago | IN | 0 POL | 0.00862061 | ||||
Redeem Token For... | 29200461 | 1052 days ago | IN | 0 POL | 0.00206211 | ||||
Redeem Token For... | 29185422 | 1053 days ago | IN | 47.2815 POL | 0.00227914 | ||||
Redeem Token For... | 29171736 | 1053 days ago | IN | 0 POL | 0.00206349 | ||||
Redeem Token For... | 29171022 | 1053 days ago | IN | 0 POL | 0.00312647 | ||||
Redeem Token For... | 29168192 | 1053 days ago | IN | 44.07 POL | 0.00207339 | ||||
Redeem Token For... | 29167856 | 1053 days ago | IN | 0 POL | 0.00281188 | ||||
Redeem Token For... | 29165831 | 1053 days ago | IN | 43.8395 POL | 0.00252984 | ||||
Redeem Token For... | 29165412 | 1053 days ago | IN | 0 POL | 0.00226939 | ||||
Redeem Token For... | 29165292 | 1053 days ago | IN | 0 POL | 0.00207522 | ||||
Redeem Token For... | 29165086 | 1053 days ago | IN | 43.7534 POL | 0.00243873 | ||||
Redeem Token For... | 29163286 | 1053 days ago | IN | 0 POL | 0.00809958 | ||||
Redeem Token For... | 29163144 | 1053 days ago | IN | 0 POL | 0.00218283 | ||||
Redeem Token For... | 29162933 | 1053 days ago | IN | 128.254 POL | 0.00230534 | ||||
Redeem Token For... | 29151812 | 1053 days ago | IN | 0 POL | 0.00342491 | ||||
Redeem Token For... | 29145138 | 1054 days ago | IN | 0 POL | 0.00209261 | ||||
Redeem Token For... | 29144531 | 1054 days ago | IN | 53.8194 POL | 0.00207447 | ||||
Redeem Token For... | 29142304 | 1054 days ago | IN | 0 POL | 0.00207198 | ||||
Redeem Token For... | 29140979 | 1054 days ago | IN | 0 POL | 0.00206277 |
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
30897490 | 1008 days ago | 1,327.3631 POL |
Loading...
Loading
Contract Name:
UniqRedeem
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.6; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "./utils/uniq/SignatureVerify.sol"; contract UniqRedeem is Ownable, SignatureVerify { /// ----- VARIABLES ----- /// uint256 internal _transactionOffset; /// @dev Returns true if token was redeemed mapping(address => mapping(uint256 => mapping(uint256 => bool))) internal _isTokenRedeemedForPurpose; /// ----- EVENTS ----- /// event Redeemed( address indexed _contractAddress, uint256 indexed _tokenId, address indexed _redeemerAddress, string _redeemerName, uint256[] _purposes ); /// ----- VIEWS ----- /// /// @notice Returns true if token was claimed function isTokenRedeemedForPurpose( address _address, uint256 _tokenId, uint256 _purpose ) external view returns (bool) { return _isTokenRedeemedForPurpose[_address][_tokenId][_purpose]; } // ----- MESSAGE SIGNATURE ----- // function getMessageHash( address[] memory _tokenContracts, uint256[] memory _tokenIds, uint256[] memory _purposes, uint256 _price, address _paymentTokenAddress, uint256 _timestamp ) public pure returns (bytes32) { return keccak256( abi.encodePacked( _tokenContracts, _tokenIds, _purposes, _price, _paymentTokenAddress, _timestamp ) ); } function verifySignature( address[] memory _tokenContracts, uint256[] memory _tokenIds, uint256[] memory _purposes, uint256 _price, address _paymentTokenAddress, bytes memory _signature, uint256 _timestamp ) internal view returns (bool) { bytes32 messageHash = getMessageHash( _tokenContracts, _tokenIds, _purposes, _price, _paymentTokenAddress, _timestamp ); bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash); return recoverSigner(ethSignedMessageHash, _signature) == owner(); } /// ----- PUBLIC METHODS ----- /// function redeemManyTokens( address[] memory _tokenContracts, uint256[] memory _tokenIds, uint256[] memory _purposes, string memory _redeemerName, uint256 _price, address _paymentTokenAddress, bytes memory _signature, uint256 _timestamp ) external payable { require( _tokenContracts.length == _tokenIds.length && _tokenIds.length == _purposes.length, "Array length mismatch" ); require(_timestamp + _transactionOffset >= block.timestamp, "Transaction timed out"); require( verifySignature( _tokenContracts, _tokenIds, _purposes, _price, _paymentTokenAddress, _signature, _timestamp ), "Signature mismatch" ); uint256 len = _tokenContracts.length; for (uint256 i = 0; i < len; i++) { require( !_isTokenRedeemedForPurpose[_tokenContracts[i]][_tokenIds[i]][ _purposes[i] ], "Can't be redeemed again" ); IERC721 token = IERC721(_tokenContracts[i]); require( token.ownerOf(_tokenIds[i]) == msg.sender, "Redeemee needs to own this token" ); _isTokenRedeemedForPurpose[_tokenContracts[i]][_tokenIds[i]][ _purposes[i] ] = true; uint256[] memory purpose = new uint256[](1); purpose[0] = _purposes[i]; emit Redeemed( _tokenContracts[i], _tokenIds[0], msg.sender, _redeemerName, purpose ); } if (_price != 0) { if (_paymentTokenAddress == address(0)) { require(msg.value >= _price, "Not enough ether"); if (_price < msg.value) { payable(msg.sender).transfer(msg.value - _price); } } else { require( IERC20(_paymentTokenAddress).transferFrom( msg.sender, address(this), _price ) ); } } } function redeemTokenForPurposes( address _tokenContract, uint256 _tokenId, uint256[] memory _purposes, string memory _redeemerName, uint256 _price, address _paymentTokenAddress, bytes memory _signature, uint256 _timestamp ) external payable { uint256 len = _purposes.length; require(_timestamp + _transactionOffset >= block.timestamp, "Transaction timed out"); address[] memory _tokenContracts = new address[](len); uint256[] memory _tokenIds = new uint256[](len); for (uint256 i = 0; i < len; i++) { _tokenContracts[i] = _tokenContract; _tokenIds[i] = _tokenId; require( !_isTokenRedeemedForPurpose[_tokenContract][_tokenId][ _purposes[i] ], "Can't be claimed again" ); IERC721 token = IERC721(_tokenContract); require( token.ownerOf(_tokenId) == msg.sender, "Claimer needs to own this token" ); _isTokenRedeemedForPurpose[_tokenContract][_tokenId][ _purposes[i] ] = true; } require( verifySignature( _tokenContracts, _tokenIds, _purposes, _price, _paymentTokenAddress, _signature, _timestamp ), "Signature mismatch" ); if (_price != 0) { if (_paymentTokenAddress == address(0)) { require(msg.value >= _price, "Not enough ether"); if (_price < msg.value) { payable(msg.sender).transfer(msg.value - _price); } } else { require( IERC20(_paymentTokenAddress).transferFrom( msg.sender, address(this), _price ) ); } } emit Redeemed( _tokenContract, _tokenId, msg.sender, _redeemerName, _purposes ); } /// ----- OWNER METHODS ----- /// constructor() { _transactionOffset = 2 hours; } function setTransactionOffset(uint256 _newOffset) external onlyOwner{ _transactionOffset = _newOffset; } function setStatusesForTokens(address[] memory _tokenAddresses, uint256[] memory _tokenIds, uint256[] memory _purposes, bool[] memory isRedeemed) external onlyOwner{ uint256 len = _tokenAddresses.length; require(len == _tokenIds.length && len == _purposes.length && len == isRedeemed.length, "Arrays lengths mismatch"); for(uint i = 0; i < len; i++){ _isTokenRedeemedForPurpose[_tokenAddresses[i]][_tokenIds[i]][_purposes[i]] = isRedeemed[i]; } } /// @notice Withdraw/rescue erc20 tokens to owners address function withdrawERC20(address _address) external onlyOwner { uint256 val = IERC20(_address).balanceOf(address(this)); Ierc20(_address).transfer(msg.sender, val); } function withdrawETH() external onlyOwner { require(payable(msg.sender).send(address(this).balance)); } /// ----- PRIVATE METHODS ----- /// receive() external payable {} } interface Ierc20 { function transfer(address, uint256) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.6; contract SignatureVerify{ function getEthSignedMessageHash(bytes32 _messageHash) internal pure returns (bytes32) { return keccak256( abi.encodePacked( "\x19Ethereum Signed Message:\n32", _messageHash ) ); } function recoverSigner( bytes32 _ethSignedMessageHash, bytes memory _signature ) internal pure returns (address) { require(_signature.length == 65, "invalid signature length"); bytes32 r; bytes32 s; uint8 v; assembly { r := mload(add(_signature, 32)) s := mload(add(_signature, 64)) v := byte(0, mload(add(_signature, 96))) } return ecrecover(_ethSignedMessageHash, v, r, s); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @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() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { 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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT 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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, uint256 amount ) external returns (bool); /** * @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); }
{ "metadata": { "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":"address","name":"_contractAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"_redeemerAddress","type":"address"},{"indexed":false,"internalType":"string","name":"_redeemerName","type":"string"},{"indexed":false,"internalType":"uint256[]","name":"_purposes","type":"uint256[]"}],"name":"Redeemed","type":"event"},{"inputs":[{"internalType":"address[]","name":"_tokenContracts","type":"address[]"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_purposes","type":"uint256[]"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"address","name":"_paymentTokenAddress","type":"address"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getMessageHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_purpose","type":"uint256"}],"name":"isTokenRedeemedForPurpose","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokenContracts","type":"address[]"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_purposes","type":"uint256[]"},{"internalType":"string","name":"_redeemerName","type":"string"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"address","name":"_paymentTokenAddress","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"redeemManyTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256[]","name":"_purposes","type":"uint256[]"},{"internalType":"string","name":"_redeemerName","type":"string"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"address","name":"_paymentTokenAddress","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"redeemTokenForPurposes","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokenAddresses","type":"address[]"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_purposes","type":"uint256[]"},{"internalType":"bool[]","name":"isRedeemed","type":"bool[]"}],"name":"setStatusesForTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newOffset","type":"uint256"}],"name":"setTransactionOffset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b5061001a33610025565b611c20600155610075565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611a9b806100846000396000f3fe6080604052600436106100a05760003560e01c80638da5cb5b116100645780638da5cb5b1461018a578063afbb88a5146101b2578063ca83ac9e146101d2578063e086e5ec146101e5578063f2fde38b146101fa578063f4f3b2001461021a57600080fd5b80633288f9dd146100ac578063395532c2146101125780636d56d78014610140578063715018a614610155578063745beed81461016a57600080fd5b366100a757005b600080fd5b3480156100b857600080fd5b506100fd6100c73660046112fb565b6001600160a01b0383166000908152600260209081526040808320858452825280832084845290915290205460ff169392505050565b60405190151581526020015b60405180910390f35b34801561011e57600080fd5b5061013261012d36600461146a565b61023a565b604051908152602001610109565b61015361014e366004611589565b610279565b005b34801561016157600080fd5b5061015361085d565b34801561017657600080fd5b5061015361018536600461168d565b610893565b34801561019657600080fd5b506000546040516001600160a01b039091168152602001610109565b3480156101be57600080fd5b506101536101cd366004611796565b610a10565b6101536101e03660046117af565b610a3f565b3480156101f157600080fd5b50610153610f36565b34801561020657600080fd5b506101536102153660046117f9565b610f84565b34801561022657600080fd5b506101536102353660046117f9565b61101f565b600086868686868660405160200161025796959493929190611850565b6040516020818303038152906040528051906020012090509695505050505050565b8651885114801561028b575085518751145b6102d45760405162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b60448201526064015b60405180910390fd5b42600154826102e391906118e0565b10156103295760405162461bcd60e51b8152602060048201526015602482015274151c985b9cd858dd1a5bdb881d1a5b5959081bdd5d605a1b60448201526064016102cb565b61033888888887878787611113565b6103795760405162461bcd60e51b81526020600482015260126024820152710a6d2cedcc2e8eae4ca40dad2e6dac2e8c6d60731b60448201526064016102cb565b875160005b8181101561073557600260008b838151811061039c5761039c6118f8565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008a83815181106103d8576103d86118f8565b602002602001015181526020019081526020016000206000898381518110610402576104026118f8565b60209081029190910181015182528101919091526040016000205460ff161561046d5760405162461bcd60e51b815260206004820152601760248201527f43616e27742062652072656465656d656420616761696e00000000000000000060448201526064016102cb565b60008a8281518110610481576104816118f8565b60200260200101519050336001600160a01b0316816001600160a01b0316636352211e8c85815181106104b6576104b66118f8565b60200260200101516040518263ffffffff1660e01b81526004016104dc91815260200190565b602060405180830381865afa1580156104f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051d919061190e565b6001600160a01b0316146105735760405162461bcd60e51b815260206004820181905260248201527f52656465656d6565206e6565647320746f206f776e207468697320746f6b656e60448201526064016102cb565b6001600260008d858151811061058b5761058b6118f8565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008c85815181106105c7576105c76118f8565b6020026020010151815260200190815260200160002060008b85815181106105f1576105f16118f8565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600167ffffffffffffffff81111561063a5761063a611330565b604051908082528060200260200182016040528015610663578160200160208202803683370190505b509050898381518110610678576106786118f8565b602002602001015181600081518110610693576106936118f8565b602002602001018181525050336001600160a01b03168b6000815181106106bc576106bc6118f8565b60200260200101518d85815181106106d6576106d66118f8565b60200260200101516001600160a01b03167ff8a9dca4718d7b1d9abf0429ad98ee715a0fc91de7f3149ac3e38d18b20460b18c8560405161071892919061192b565b60405180910390a45050808061072d906119c8565b91505061037e565b508415610852576001600160a01b0384166107d2578434101561078d5760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b41032ba3432b960811b60448201526064016102cb565b348510156107cd57336108fc6107a387346119e3565b6040518115909202916000818181858888f193505050501580156107cb573d6000803e3d6000fd5b505b610852565b6040516323b872dd60e01b8152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015610825573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084991906119fa565b61085257600080fd5b505050505050505050565b6000546001600160a01b031633146108875760405162461bcd60e51b81526004016102cb90611a17565b61089160006111be565b565b6000546001600160a01b031633146108bd5760405162461bcd60e51b81526004016102cb90611a17565b83518351811480156108cf5750825181145b80156108db5750815181145b6109275760405162461bcd60e51b815260206004820152601760248201527f417272617973206c656e67746873206d69736d6174636800000000000000000060448201526064016102cb565b60005b81811015610a0857828181518110610944576109446118f8565b602002602001015160026000888481518110610962576109626118f8565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600087848151811061099e5761099e6118f8565b6020026020010151815260200190815260200160002060008684815181106109c8576109c86118f8565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610a00906119c8565b91505061092a565b505050505050565b6000546001600160a01b03163314610a3a5760405162461bcd60e51b81526004016102cb90611a17565b600155565b85516001544290610a5090846118e0565b1015610a965760405162461bcd60e51b8152602060048201526015602482015274151c985b9cd858dd1a5bdb881d1a5b5959081bdd5d605a1b60448201526064016102cb565b60008167ffffffffffffffff811115610ab157610ab1611330565b604051908082528060200260200182016040528015610ada578160200160208202803683370190505b50905060008267ffffffffffffffff811115610af857610af8611330565b604051908082528060200260200182016040528015610b21578160200160208202803683370190505b50905060005b83811015610d6e578b838281518110610b4257610b426118f8565b60200260200101906001600160a01b031690816001600160a01b0316815250508a828281518110610b7557610b756118f8565b602002602001018181525050600260008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008c815260200190815260200160002060008b8381518110610bcb57610bcb6118f8565b60209081029190910181015182528101919091526040016000205460ff1615610c2f5760405162461bcd60e51b815260206004820152601660248201527521b0b713ba1031329031b630b4b6b2b21030b3b0b4b760511b60448201526064016102cb565b6040516331a9108f60e11b8152600481018c90528c9033906001600160a01b03831690636352211e90602401602060405180830381865afa158015610c78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9c919061190e565b6001600160a01b031614610cf25760405162461bcd60e51b815260206004820152601f60248201527f436c61696d6572206e6565647320746f206f776e207468697320746f6b656e0060448201526064016102cb565b6001600160a01b038d1660009081526002602090815260408083208f845290915281208c51600192908e9086908110610d2d57610d2d6118f8565b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550508080610d66906119c8565b915050610b27565b50610d7e82828b8a8a8a8a611113565b610dbf5760405162461bcd60e51b81526020600482015260126024820152710a6d2cedcc2e8eae4ca40dad2e6dac2e8c6d60731b60448201526064016102cb565b8615610edb576001600160a01b038616610e5b5786341015610e165760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b41032ba3432b960811b60448201526064016102cb565b34871015610e5657336108fc610e2c89346119e3565b6040518115909202916000818181858888f19350505050158015610e54573d6000803e3d6000fd5b505b610edb565b6040516323b872dd60e01b8152336004820152306024820152604481018890526001600160a01b038716906323b872dd906064016020604051808303816000875af1158015610eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed291906119fa565b610edb57600080fd5b336001600160a01b03168a8c6001600160a01b03167ff8a9dca4718d7b1d9abf0429ad98ee715a0fc91de7f3149ac3e38d18b20460b18b8d604051610f2192919061192b565b60405180910390a45050505050505050505050565b6000546001600160a01b03163314610f605760405162461bcd60e51b81526004016102cb90611a17565b60405133904780156108fc02916000818181858888f1935050505061089157600080fd5b6000546001600160a01b03163314610fae5760405162461bcd60e51b81526004016102cb90611a17565b6001600160a01b0381166110135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102cb565b61101c816111be565b50565b6000546001600160a01b031633146110495760405162461bcd60e51b81526004016102cb90611a17565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b49190611a4c565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb90604401600060405180830381600087803b1580156110ff57600080fd5b505af1158015610a08573d6000803e3d6000fd5b60008061112489898989898861023a565b9050600061117f826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506111936000546001600160a01b031690565b6001600160a01b03166111a6828761120e565b6001600160a01b0316149a9950505050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081516041146112615760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e677468000000000000000060448201526064016102cb565b602082810151604080850151606080870151835160008082529681018086528a9052951a928501839052840183905260808401819052919260019060a0016020604051602081039080840390855afa1580156112c1573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6001600160a01b038116811461101c57600080fd5b80356112f6816112d6565b919050565b60008060006060848603121561131057600080fd5b833561131b816112d6565b95602085013595506040909401359392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561136f5761136f611330565b604052919050565b600067ffffffffffffffff82111561139157611391611330565b5060051b60200190565b600082601f8301126113ac57600080fd5b813560206113c16113bc83611377565b611346565b82815260059290921b840181019181810190868411156113e057600080fd5b8286015b848110156114045780356113f7816112d6565b83529183019183016113e4565b509695505050505050565b600082601f83011261142057600080fd5b813560206114306113bc83611377565b82815260059290921b8401810191818101908684111561144f57600080fd5b8286015b848110156114045780358352918301918301611453565b60008060008060008060c0878903121561148357600080fd5b863567ffffffffffffffff8082111561149b57600080fd5b6114a78a838b0161139b565b975060208901359150808211156114bd57600080fd5b6114c98a838b0161140f565b965060408901359150808211156114df57600080fd5b506114ec89828a0161140f565b945050606087013592506080870135611504816112d6565b8092505060a087013590509295509295509295565b600082601f83011261152a57600080fd5b813567ffffffffffffffff81111561154457611544611330565b611557601f8201601f1916602001611346565b81815284602083860101111561156c57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b0312156115a657600080fd5b883567ffffffffffffffff808211156115be57600080fd5b6115ca8c838d0161139b565b995060208b01359150808211156115e057600080fd5b6115ec8c838d0161140f565b985060408b013591508082111561160257600080fd5b61160e8c838d0161140f565b975060608b013591508082111561162457600080fd5b6116308c838d01611519565b965060808b0135955061164560a08c016112eb565b945060c08b013591508082111561165b57600080fd5b506116688b828c01611519565b92505060e089013590509295985092959890939650565b801515811461101c57600080fd5b600080600080608085870312156116a357600080fd5b843567ffffffffffffffff808211156116bb57600080fd5b6116c78883890161139b565b95506020915081870135818111156116de57600080fd5b6116ea89828a0161140f565b9550506040870135818111156116ff57600080fd5b61170b89828a0161140f565b94505060608701358181111561172057600080fd5b87019050601f8101881361173357600080fd5b80356117416113bc82611377565b81815260059190911b8201830190838101908a83111561176057600080fd5b928401925b828410156117875783356117788161167f565b82529284019290840190611765565b979a9699509497505050505050565b6000602082840312156117a857600080fd5b5035919050565b600080600080600080600080610100898b0312156117cc57600080fd5b6117d5896112eb565b975060208901359650604089013567ffffffffffffffff8082111561160257600080fd5b60006020828403121561180b57600080fd5b8135611816816112d6565b9392505050565b60008151602080840160005b8381101561184557815187529582019590820190600101611829565b509495945050505050565b865160009082906020808b01845b838110156118835781516001600160a01b03168552938201939082019060010161185e565b5050611898611892848c61181d565b8a61181d565b97885260609690961b6bffffffffffffffffffffffff1916958701959095525050506034830152506054019392505050565b634e487b7160e01b600052601160045260246000fd5b600082198211156118f3576118f36118ca565b500190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561192057600080fd5b8151611816816112d6565b604081526000835180604084015260005b81811015611959576020818701810151606086840101520161193c565b8181111561196b576000606083860101525b50601f01601f1916820182810360609081016020808601919091528551918301829052858101926000926080909101905b808410156119bc578451825293820193600193909301929082019061199c565b50979650505050505050565b60006000198214156119dc576119dc6118ca565b5060010190565b6000828210156119f5576119f56118ca565b500390565b600060208284031215611a0c57600080fd5b81516118168161167f565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611a5e57600080fd5b505191905056fea264697066735822122046978ff7906c3206caacea72f059bf706e5876e642c04b9cf59752d8de74112464736f6c634300080a0033
Deployed Bytecode
0x6080604052600436106100a05760003560e01c80638da5cb5b116100645780638da5cb5b1461018a578063afbb88a5146101b2578063ca83ac9e146101d2578063e086e5ec146101e5578063f2fde38b146101fa578063f4f3b2001461021a57600080fd5b80633288f9dd146100ac578063395532c2146101125780636d56d78014610140578063715018a614610155578063745beed81461016a57600080fd5b366100a757005b600080fd5b3480156100b857600080fd5b506100fd6100c73660046112fb565b6001600160a01b0383166000908152600260209081526040808320858452825280832084845290915290205460ff169392505050565b60405190151581526020015b60405180910390f35b34801561011e57600080fd5b5061013261012d36600461146a565b61023a565b604051908152602001610109565b61015361014e366004611589565b610279565b005b34801561016157600080fd5b5061015361085d565b34801561017657600080fd5b5061015361018536600461168d565b610893565b34801561019657600080fd5b506000546040516001600160a01b039091168152602001610109565b3480156101be57600080fd5b506101536101cd366004611796565b610a10565b6101536101e03660046117af565b610a3f565b3480156101f157600080fd5b50610153610f36565b34801561020657600080fd5b506101536102153660046117f9565b610f84565b34801561022657600080fd5b506101536102353660046117f9565b61101f565b600086868686868660405160200161025796959493929190611850565b6040516020818303038152906040528051906020012090509695505050505050565b8651885114801561028b575085518751145b6102d45760405162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b60448201526064015b60405180910390fd5b42600154826102e391906118e0565b10156103295760405162461bcd60e51b8152602060048201526015602482015274151c985b9cd858dd1a5bdb881d1a5b5959081bdd5d605a1b60448201526064016102cb565b61033888888887878787611113565b6103795760405162461bcd60e51b81526020600482015260126024820152710a6d2cedcc2e8eae4ca40dad2e6dac2e8c6d60731b60448201526064016102cb565b875160005b8181101561073557600260008b838151811061039c5761039c6118f8565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008a83815181106103d8576103d86118f8565b602002602001015181526020019081526020016000206000898381518110610402576104026118f8565b60209081029190910181015182528101919091526040016000205460ff161561046d5760405162461bcd60e51b815260206004820152601760248201527f43616e27742062652072656465656d656420616761696e00000000000000000060448201526064016102cb565b60008a8281518110610481576104816118f8565b60200260200101519050336001600160a01b0316816001600160a01b0316636352211e8c85815181106104b6576104b66118f8565b60200260200101516040518263ffffffff1660e01b81526004016104dc91815260200190565b602060405180830381865afa1580156104f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051d919061190e565b6001600160a01b0316146105735760405162461bcd60e51b815260206004820181905260248201527f52656465656d6565206e6565647320746f206f776e207468697320746f6b656e60448201526064016102cb565b6001600260008d858151811061058b5761058b6118f8565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008c85815181106105c7576105c76118f8565b6020026020010151815260200190815260200160002060008b85815181106105f1576105f16118f8565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600167ffffffffffffffff81111561063a5761063a611330565b604051908082528060200260200182016040528015610663578160200160208202803683370190505b509050898381518110610678576106786118f8565b602002602001015181600081518110610693576106936118f8565b602002602001018181525050336001600160a01b03168b6000815181106106bc576106bc6118f8565b60200260200101518d85815181106106d6576106d66118f8565b60200260200101516001600160a01b03167ff8a9dca4718d7b1d9abf0429ad98ee715a0fc91de7f3149ac3e38d18b20460b18c8560405161071892919061192b565b60405180910390a45050808061072d906119c8565b91505061037e565b508415610852576001600160a01b0384166107d2578434101561078d5760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b41032ba3432b960811b60448201526064016102cb565b348510156107cd57336108fc6107a387346119e3565b6040518115909202916000818181858888f193505050501580156107cb573d6000803e3d6000fd5b505b610852565b6040516323b872dd60e01b8152336004820152306024820152604481018690526001600160a01b038516906323b872dd906064016020604051808303816000875af1158015610825573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084991906119fa565b61085257600080fd5b505050505050505050565b6000546001600160a01b031633146108875760405162461bcd60e51b81526004016102cb90611a17565b61089160006111be565b565b6000546001600160a01b031633146108bd5760405162461bcd60e51b81526004016102cb90611a17565b83518351811480156108cf5750825181145b80156108db5750815181145b6109275760405162461bcd60e51b815260206004820152601760248201527f417272617973206c656e67746873206d69736d6174636800000000000000000060448201526064016102cb565b60005b81811015610a0857828181518110610944576109446118f8565b602002602001015160026000888481518110610962576109626118f8565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600087848151811061099e5761099e6118f8565b6020026020010151815260200190815260200160002060008684815181106109c8576109c86118f8565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610a00906119c8565b91505061092a565b505050505050565b6000546001600160a01b03163314610a3a5760405162461bcd60e51b81526004016102cb90611a17565b600155565b85516001544290610a5090846118e0565b1015610a965760405162461bcd60e51b8152602060048201526015602482015274151c985b9cd858dd1a5bdb881d1a5b5959081bdd5d605a1b60448201526064016102cb565b60008167ffffffffffffffff811115610ab157610ab1611330565b604051908082528060200260200182016040528015610ada578160200160208202803683370190505b50905060008267ffffffffffffffff811115610af857610af8611330565b604051908082528060200260200182016040528015610b21578160200160208202803683370190505b50905060005b83811015610d6e578b838281518110610b4257610b426118f8565b60200260200101906001600160a01b031690816001600160a01b0316815250508a828281518110610b7557610b756118f8565b602002602001018181525050600260008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008c815260200190815260200160002060008b8381518110610bcb57610bcb6118f8565b60209081029190910181015182528101919091526040016000205460ff1615610c2f5760405162461bcd60e51b815260206004820152601660248201527521b0b713ba1031329031b630b4b6b2b21030b3b0b4b760511b60448201526064016102cb565b6040516331a9108f60e11b8152600481018c90528c9033906001600160a01b03831690636352211e90602401602060405180830381865afa158015610c78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9c919061190e565b6001600160a01b031614610cf25760405162461bcd60e51b815260206004820152601f60248201527f436c61696d6572206e6565647320746f206f776e207468697320746f6b656e0060448201526064016102cb565b6001600160a01b038d1660009081526002602090815260408083208f845290915281208c51600192908e9086908110610d2d57610d2d6118f8565b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550508080610d66906119c8565b915050610b27565b50610d7e82828b8a8a8a8a611113565b610dbf5760405162461bcd60e51b81526020600482015260126024820152710a6d2cedcc2e8eae4ca40dad2e6dac2e8c6d60731b60448201526064016102cb565b8615610edb576001600160a01b038616610e5b5786341015610e165760405162461bcd60e51b815260206004820152601060248201526f2737ba1032b737bab3b41032ba3432b960811b60448201526064016102cb565b34871015610e5657336108fc610e2c89346119e3565b6040518115909202916000818181858888f19350505050158015610e54573d6000803e3d6000fd5b505b610edb565b6040516323b872dd60e01b8152336004820152306024820152604481018890526001600160a01b038716906323b872dd906064016020604051808303816000875af1158015610eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed291906119fa565b610edb57600080fd5b336001600160a01b03168a8c6001600160a01b03167ff8a9dca4718d7b1d9abf0429ad98ee715a0fc91de7f3149ac3e38d18b20460b18b8d604051610f2192919061192b565b60405180910390a45050505050505050505050565b6000546001600160a01b03163314610f605760405162461bcd60e51b81526004016102cb90611a17565b60405133904780156108fc02916000818181858888f1935050505061089157600080fd5b6000546001600160a01b03163314610fae5760405162461bcd60e51b81526004016102cb90611a17565b6001600160a01b0381166110135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102cb565b61101c816111be565b50565b6000546001600160a01b031633146110495760405162461bcd60e51b81526004016102cb90611a17565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b49190611a4c565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb90604401600060405180830381600087803b1580156110ff57600080fd5b505af1158015610a08573d6000803e3d6000fd5b60008061112489898989898861023a565b9050600061117f826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506111936000546001600160a01b031690565b6001600160a01b03166111a6828761120e565b6001600160a01b0316149a9950505050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081516041146112615760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e677468000000000000000060448201526064016102cb565b602082810151604080850151606080870151835160008082529681018086528a9052951a928501839052840183905260808401819052919260019060a0016020604051602081039080840390855afa1580156112c1573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6001600160a01b038116811461101c57600080fd5b80356112f6816112d6565b919050565b60008060006060848603121561131057600080fd5b833561131b816112d6565b95602085013595506040909401359392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561136f5761136f611330565b604052919050565b600067ffffffffffffffff82111561139157611391611330565b5060051b60200190565b600082601f8301126113ac57600080fd5b813560206113c16113bc83611377565b611346565b82815260059290921b840181019181810190868411156113e057600080fd5b8286015b848110156114045780356113f7816112d6565b83529183019183016113e4565b509695505050505050565b600082601f83011261142057600080fd5b813560206114306113bc83611377565b82815260059290921b8401810191818101908684111561144f57600080fd5b8286015b848110156114045780358352918301918301611453565b60008060008060008060c0878903121561148357600080fd5b863567ffffffffffffffff8082111561149b57600080fd5b6114a78a838b0161139b565b975060208901359150808211156114bd57600080fd5b6114c98a838b0161140f565b965060408901359150808211156114df57600080fd5b506114ec89828a0161140f565b945050606087013592506080870135611504816112d6565b8092505060a087013590509295509295509295565b600082601f83011261152a57600080fd5b813567ffffffffffffffff81111561154457611544611330565b611557601f8201601f1916602001611346565b81815284602083860101111561156c57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b0312156115a657600080fd5b883567ffffffffffffffff808211156115be57600080fd5b6115ca8c838d0161139b565b995060208b01359150808211156115e057600080fd5b6115ec8c838d0161140f565b985060408b013591508082111561160257600080fd5b61160e8c838d0161140f565b975060608b013591508082111561162457600080fd5b6116308c838d01611519565b965060808b0135955061164560a08c016112eb565b945060c08b013591508082111561165b57600080fd5b506116688b828c01611519565b92505060e089013590509295985092959890939650565b801515811461101c57600080fd5b600080600080608085870312156116a357600080fd5b843567ffffffffffffffff808211156116bb57600080fd5b6116c78883890161139b565b95506020915081870135818111156116de57600080fd5b6116ea89828a0161140f565b9550506040870135818111156116ff57600080fd5b61170b89828a0161140f565b94505060608701358181111561172057600080fd5b87019050601f8101881361173357600080fd5b80356117416113bc82611377565b81815260059190911b8201830190838101908a83111561176057600080fd5b928401925b828410156117875783356117788161167f565b82529284019290840190611765565b979a9699509497505050505050565b6000602082840312156117a857600080fd5b5035919050565b600080600080600080600080610100898b0312156117cc57600080fd5b6117d5896112eb565b975060208901359650604089013567ffffffffffffffff8082111561160257600080fd5b60006020828403121561180b57600080fd5b8135611816816112d6565b9392505050565b60008151602080840160005b8381101561184557815187529582019590820190600101611829565b509495945050505050565b865160009082906020808b01845b838110156118835781516001600160a01b03168552938201939082019060010161185e565b5050611898611892848c61181d565b8a61181d565b97885260609690961b6bffffffffffffffffffffffff1916958701959095525050506034830152506054019392505050565b634e487b7160e01b600052601160045260246000fd5b600082198211156118f3576118f36118ca565b500190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561192057600080fd5b8151611816816112d6565b604081526000835180604084015260005b81811015611959576020818701810151606086840101520161193c565b8181111561196b576000606083860101525b50601f01601f1916820182810360609081016020808601919091528551918301829052858101926000926080909101905b808410156119bc578451825293820193600193909301929082019061199c565b50979650505050505050565b60006000198214156119dc576119dc6118ca565b5060010190565b6000828210156119f5576119f56118ca565b500390565b600060208284031215611a0c57600080fd5b81516118168161167f565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611a5e57600080fd5b505191905056fea264697066735822122046978ff7906c3206caacea72f059bf706e5876e642c04b9cf59752d8de74112464736f6c634300080a0033
Deployed Bytecode Sourcemap
271:7992:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;879:228;;;;;;;;;;-1:-1:-1;879:228:0;;;;;:::i;:::-;-1:-1:-1;;;;;1044:36:0;;1021:4;1044:36;;;:26;:36;;;;;;;;:46;;;;;;;;:56;;;;;;;;;;;879:228;;;;;;;;;842:14:7;;835:22;817:41;;805:2;790:18;879:228:0;;;;;;;;1153:576;;;;;;;;;;-1:-1:-1;1153:576:0;;;;;:::i;:::-;;:::i;:::-;;;4124:25:7;;;4112:2;4097:18;1153:576:0;3978:177:7;2445:2390:0;;;;;;:::i;:::-;;:::i;:::-;;1605:92:2;;;;;;;;;;;;;:::i;7317:494:0:-;;;;;;;;;;-1:-1:-1;7317:494:0;;;;;:::i;:::-;;:::i;973:85:2:-;;;;;;;;;;-1:-1:-1;1019:7:2;1045:6;973:85;;-1:-1:-1;;;;;1045:6:2;;;8070:51:7;;8058:2;8043:18;973:85:2;7924:203:7;7194:116:0;;;;;;;;;;-1:-1:-1;7194:116:0;;;;;:::i;:::-;;:::i;4841:2244::-;;;;;;:::i;:::-;;:::i;8070:115::-;;;;;;;;;;;;;:::i;1846:189:2:-;;;;;;;;;;-1:-1:-1;1846:189:2;;;;;:::i;:::-;;:::i;7880:184:0:-;;;;;;;;;;-1:-1:-1;7880:184:0;;;;;:::i;:::-;;:::i;1153:576::-;1408:7;1511:15;1548:9;1579;1610:6;1638:20;1680:10;1473:235;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1446:276;;;;;;1427:295;;1153:576;;;;;;;;:::o;2445:2390::-;2825:9;:16;2799:15;:22;:42;:98;;;;;2881:9;:16;2861:9;:16;:36;2799:98;2778:166;;;;-1:-1:-1;;;2778:166:0;;11385:2:7;2778:166:0;;;11367:21:7;11424:2;11404:18;;;11397:30;-1:-1:-1;;;11443:18:7;;;11436:51;11504:18;;2778:166:0;;;;;;;;;2997:15;2975:18;;2962:10;:31;;;;:::i;:::-;:50;;2954:84;;;;-1:-1:-1;;;2954:84:0;;12000:2:7;2954:84:0;;;11982:21:7;12039:2;12019:18;;;12012:30;-1:-1:-1;;;12058:18:7;;;12051:51;12119:18;;2954:84:0;11798:345:7;2954:84:0;3069:234;3102:15;3135:9;3162;3189:6;3213:20;3251:10;3279;3069:15;:234::i;:::-;3048:299;;;;-1:-1:-1;;;3048:299:0;;12350:2:7;3048:299:0;;;12332:21:7;12389:2;12369:18;;;12362:30;-1:-1:-1;;;12408:18:7;;;12401:48;12466:18;;3048:299:0;12148:342:7;3048:299:0;3371:22;;3357:11;3403:869;3427:3;3423:1;:7;3403:869;;;3477:26;:46;3504:15;3520:1;3504:18;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3477:46:0;-1:-1:-1;;;;;3477:46:0;;;;;;;;;;;;:60;3524:9;3534:1;3524:12;;;;;;;;:::i;:::-;;;;;;;3477:60;;;;;;;;;;;:112;3559:9;3569:1;3559:12;;;;;;;;:::i;:::-;;;;;;;;;;;;3477:112;;;;;;;;;;-1:-1:-1;3477:112:0;;;;3476:113;3451:195;;;;-1:-1:-1;;;3451:195:0;;12829:2:7;3451:195:0;;;12811:21:7;12868:2;12848:18;;;12841:30;12907:25;12887:18;;;12880:53;12950:18;;3451:195:0;12627:347:7;3451:195:0;3660:13;3684:15;3700:1;3684:18;;;;;;;;:::i;:::-;;;;;;;3660:43;;3773:10;-1:-1:-1;;;;;3742:41:0;:5;-1:-1:-1;;;;;3742:13:0;;3756:9;3766:1;3756:12;;;;;;;;:::i;:::-;;;;;;;3742:27;;;;;;;;;;;;;4124:25:7;;4112:2;4097:18;;3978:177;3742:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3742:41:0;;3717:132;;;;-1:-1:-1;;;3717:132:0;;13619:2:7;3717:132:0;;;13601:21:7;;;13638:18;;;13631:30;13697:34;13677:18;;;13670:62;13749:18;;3717:132:0;13417:356:7;3717:132:0;3970:4;3863:26;:46;3890:15;3906:1;3890:18;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3863:46:0;-1:-1:-1;;;;;3863:46:0;;;;;;;;;;;;:60;3910:9;3920:1;3910:12;;;;;;;;:::i;:::-;;;;;;;3863:60;;;;;;;;;;;:104;3941:9;3951:1;3941:12;;;;;;;;:::i;:::-;;;;;;;3863:104;;;;;;;;;;;;:111;;;;;;;;;;;;;;;;;;3988:24;4029:1;4015:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4015:16:0;;3988:43;;4058:9;4068:1;4058:12;;;;;;;;:::i;:::-;;;;;;;4045:7;4053:1;4045:10;;;;;;;;:::i;:::-;;;;;;:25;;;;;4181:10;-1:-1:-1;;;;;4089:172:0;4151:9;4161:1;4151:12;;;;;;;;:::i;:::-;;;;;;;4115:15;4131:1;4115:18;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;4089:172:0;;4209:13;4240:7;4089:172;;;;;;;:::i;:::-;;;;;;;;3437:835;;3432:3;;;;;:::i;:::-;;;;3403:869;;;-1:-1:-1;4285:11:0;;4281:548;;-1:-1:-1;;;;;4316:34:0;;4312:507;;4391:6;4378:9;:19;;4370:48;;;;-1:-1:-1;;;4370:48:0;;15278:2:7;4370:48:0;;;15260:21:7;15317:2;15297:18;;;15290:30;-1:-1:-1;;;15336:18:7;;;15329:46;15392:18;;4370:48:0;15076:340:7;4370:48:0;4449:9;4440:6;:18;4436:113;;;4490:10;4482:48;4511:18;4523:6;4511:9;:18;:::i;:::-;4482:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4436:113;4312:507;;;4616:170;;-1:-1:-1;;;4616:170:0;;4683:10;4616:170;;;15791:34:7;4727:4:0;15841:18:7;;;15834:43;15893:18;;;15886:34;;;-1:-1:-1;;;;;4616:41:0;;;;;15726:18:7;;4616:170:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4587:217;;;;;;2768:2067;2445:2390;;;;;;;;:::o;1605:92:2:-;1019:7;1045:6;-1:-1:-1;;;;;1045:6:2;665:10:5;1185:23:2;1177:68;;;;-1:-1:-1;;;1177:68:2;;;;;;;:::i;:::-;1669:21:::1;1687:1;1669:9;:21::i;:::-;1605:92::o:0;7317:494:0:-;1019:7:2;1045:6;-1:-1:-1;;;;;1045:6:2;665:10:5;1185:23:2;1177:68;;;;-1:-1:-1;;;1177:68:2;;;;;;;:::i;:::-;7505:22:0;;7552:16;;7545:23;::::1;:50:::0;::::1;;;;7579:9;:16;7572:3;:23;7545:50;:78;;;;;7606:10;:17;7599:3;:24;7545:78;7537:114;;;::::0;-1:-1:-1;;;7537:114:0;;16744:2:7;7537:114:0::1;::::0;::::1;16726:21:7::0;16783:2;16763:18;;;16756:30;16822:25;16802:18;;;16795:53;16865:18;;7537:114:0::1;16542:347:7::0;7537:114:0::1;7665:6;7661:144;7681:3;7677:1;:7;7661:144;;;7781:10;7792:1;7781:13;;;;;;;;:::i;:::-;;;;;;;7704:26;:46;7731:15;7747:1;7731:18;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;7704:46:0::1;-1:-1:-1::0;;;;;7704:46:0::1;;;;;;;;;;;;:60;7751:9;7761:1;7751:12;;;;;;;;:::i;:::-;;;;;;;7704:60;;;;;;;;;;;:74;7765:9;7775:1;7765:12;;;;;;;;:::i;:::-;;;;;;;7704:74;;;;;;;;;;;;:90;;;;;;;;;;;;;;;;;;7686:3;;;;;:::i;:::-;;;;7661:144;;;;7481:330;7317:494:::0;;;;:::o;7194:116::-;1019:7:2;1045:6;-1:-1:-1;;;;;1045:6:2;665:10:5;1185:23:2;1177:68;;;;-1:-1:-1;;;1177:68:2;;;;;;;:::i;:::-;7272:18:0::1;:31:::0;7194:116::o;4841:2244::-;5174:16;;5221:18;;5243:15;;5208:31;;:10;:31;:::i;:::-;:50;;5200:84;;;;-1:-1:-1;;;5200:84:0;;12000:2:7;5200:84:0;;;11982:21:7;12039:2;12019:18;;;12012:30;-1:-1:-1;;;12058:18:7;;;12051:51;12119:18;;5200:84:0;11798:345:7;5200:84:0;5294:32;5343:3;5329:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5329:18:0;;5294:53;;5357:26;5400:3;5386:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5386:18:0;;5357:47;;5419:9;5414:642;5438:3;5434:1;:7;5414:642;;;5483:14;5462:15;5478:1;5462:18;;;;;;;;:::i;:::-;;;;;;:35;-1:-1:-1;;;;;5462:35:0;;;-1:-1:-1;;;;;5462:35:0;;;;;5526:8;5511:9;5521:1;5511:12;;;;;;;;:::i;:::-;;;;;;:23;;;;;5574:26;:42;5601:14;-1:-1:-1;;;;;5574:42:0;-1:-1:-1;;;;;5574:42:0;;;;;;;;;;;;:52;5617:8;5574:52;;;;;;;;;;;:104;5648:9;5658:1;5648:12;;;;;;;;:::i;:::-;;;;;;;;;;;;5574:104;;;;;;;;;;-1:-1:-1;5574:104:0;;;;5573:105;5548:186;;;;-1:-1:-1;;;5548:186:0;;17096:2:7;5548:186:0;;;17078:21:7;17135:2;17115:18;;;17108:30;-1:-1:-1;;;17154:18:7;;;17147:52;17216:18;;5548:186:0;16894:346:7;5548:186:0;5826:23;;-1:-1:-1;;;5826:23:0;;;;;4124:25:7;;;5772:14:0;;5853:10;;-1:-1:-1;;;;;5826:13:0;;;;;4097:18:7;;5826:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5826:37:0;;5801:127;;;;-1:-1:-1;;;5801:127:0;;17447:2:7;5801:127:0;;;17429:21:7;17486:2;17466:18;;;17459:30;17525:33;17505:18;;;17498:61;17576:18;;5801:127:0;17245:355:7;5801:127:0;-1:-1:-1;;;;;5942:42:0;;;;;;:26;:42;;;;;;;;:52;;;;;;;;6012:12;;6041:4;;5942:42;6012:9;;6022:1;;6012:12;;;;;;:::i;:::-;;;;;;;5942:96;;;;;;;;;;;;:103;;;;;;;;;;;;;;;;;;5448:608;5443:3;;;;;:::i;:::-;;;;5414:642;;;;6086:234;6119:15;6152:9;6179;6206:6;6230:20;6268:10;6296;6086:15;:234::i;:::-;6065:299;;;;-1:-1:-1;;;6065:299:0;;12350:2:7;6065:299:0;;;12332:21:7;12389:2;12369:18;;;12362:30;-1:-1:-1;;;12408:18:7;;;12401:48;12466:18;;6065:299:0;12148:342:7;6065:299:0;6378:11;;6374:548;;-1:-1:-1;;;;;6409:34:0;;6405:507;;6484:6;6471:9;:19;;6463:48;;;;-1:-1:-1;;;6463:48:0;;15278:2:7;6463:48:0;;;15260:21:7;15317:2;15297:18;;;15290:30;-1:-1:-1;;;15336:18:7;;;15329:46;15392:18;;6463:48:0;15076:340:7;6463:48:0;6542:9;6533:6;:18;6529:113;;;6583:10;6575:48;6604:18;6616:6;6604:9;:18;:::i;:::-;6575:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6529:113;6405:507;;;6709:170;;-1:-1:-1;;;6709:170:0;;6776:10;6709:170;;;15791:34:7;6820:4:0;15841:18:7;;;15834:43;15893:18;;;15886:34;;;-1:-1:-1;;;;;6709:41:0;;;;;15726:18:7;;6709:170:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6680:217;;;;;;7008:10;-1:-1:-1;;;;;6936:142:0;6986:8;6958:14;-1:-1:-1;;;;;6936:142:0;;7032:13;7059:9;6936:142;;;;;;;:::i;:::-;;;;;;;;5150:1935;;;4841:2244;;;;;;;;:::o;8070:115::-;1019:7:2;1045:6;-1:-1:-1;;;;;1045:6:2;665:10:5;1185:23:2;1177:68;;;;-1:-1:-1;;;1177:68:2;;;;;;;:::i;:::-;8130:47:0::1;::::0;8138:10:::1;::::0;8155:21:::1;8130:47:::0;::::1;;;::::0;::::1;::::0;;;8155:21;8138:10;8130:47;::::1;;;;;;8122:56;;;::::0;::::1;1846:189:2::0;1019:7;1045:6;-1:-1:-1;;;;;1045:6:2;665:10:5;1185:23:2;1177:68;;;;-1:-1:-1;;;1177:68:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;1934:22:2;::::1;1926:73;;;::::0;-1:-1:-1;;;1926:73:2;;17807:2:7;1926:73:2::1;::::0;::::1;17789:21:7::0;17846:2;17826:18;;;17819:30;17885:34;17865:18;;;17858:62;-1:-1:-1;;;17936:18:7;;;17929:36;17982:19;;1926:73:2::1;17605:402:7::0;1926:73:2::1;2009:19;2019:8;2009:9;:19::i;:::-;1846:189:::0;:::o;7880:184:0:-;1019:7:2;1045:6;-1:-1:-1;;;;;1045:6:2;665:10:5;1185:23:2;1177:68;;;;-1:-1:-1;;;1177:68:2;;;;;;;:::i;:::-;7964:41:0::1;::::0;-1:-1:-1;;;7964:41:0;;7999:4:::1;7964:41;::::0;::::1;8070:51:7::0;7950:11:0::1;::::0;-1:-1:-1;;;;;7964:26:0;::::1;::::0;::::1;::::0;8043:18:7;;7964:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8015:42;::::0;-1:-1:-1;;;8015:42:0;;8041:10:::1;8015:42;::::0;::::1;18375:51:7::0;18442:18;;;18435:34;;;7950:55:0;;-1:-1:-1;;;;;;8015:25:0;::::1;::::0;::::1;::::0;18348:18:7;;8015:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;1735:665:::0;2026:4;2042:19;2064:177;2092:15;2121:9;2144;2167:6;2187:20;2221:10;2064:14;:177::i;:::-;2042:199;;2251:28;2282:36;2306:11;259:124:1;;18722:66:7;259:124:1;;;18710:79:7;18805:12;;;18798:28;;;190:7:1;;18842:12:7;;259:124:1;;;;;;;;;;;;232:165;;;;;;213:184;;88:316;;;;2282:36:0;2251:67;;2386:7;1019::2;1045:6;-1:-1:-1;;;;;1045:6:2;;973:85;2386:7:0;-1:-1:-1;;;;;2335:58:0;:47;2349:20;2371:10;2335:13;:47::i;:::-;-1:-1:-1;;;;;2335:58:0;;;1735:665;-1:-1:-1;;;;;;;;;;1735:665:0:o;2041:169:2:-;2096:16;2115:6;;-1:-1:-1;;;;;2131:17:2;;;-1:-1:-1;;;;;;2131:17:2;;;;;;2163:40;;2115:6;;;;;;;2163:40;;2096:16;2163:40;2086:124;2041:169;:::o;410:493:1:-;534:7;561:10;:17;582:2;561:23;553:60;;;;-1:-1:-1;;;553:60:1;;19067:2:7;553:60:1;;;19049:21:7;19106:2;19086:18;;;19079:30;19145:26;19125:18;;;19118:54;19189:18;;553:60:1;18865:348:7;553:60:1;728:2;712:19;;;706:26;772:2;756:19;;;750:26;824:2;808:19;;;802:26;855:41;;623:9;855:41;;;;;;;;;19445:25:7;;;794:35:1;;19486:18:7;;;19479:45;;;19540:18;;19533:34;;;19583:18;;;19576:34;;;706:26:1;;855:41;;19417:19:7;;855:41:1;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;855:41:1;;-1:-1:-1;;855:41:1;;;410:493;-1:-1:-1;;;;;;;410:493:1:o;14:131:7:-;-1:-1:-1;;;;;89:31:7;;79:42;;69:70;;135:1;132;125:12;150:134;218:20;;247:31;218:20;247:31;:::i;:::-;150:134;;;:::o;289:383::-;366:6;374;382;435:2;423:9;414:7;410:23;406:32;403:52;;;451:1;448;441:12;403:52;490:9;477:23;509:31;534:5;509:31;:::i;:::-;559:5;611:2;596:18;;583:32;;-1:-1:-1;662:2:7;647:18;;;634:32;;289:383;-1:-1:-1;;;289:383:7:o;869:127::-;930:10;925:3;921:20;918:1;911:31;961:4;958:1;951:15;985:4;982:1;975:15;1001:275;1072:2;1066:9;1137:2;1118:13;;-1:-1:-1;;1114:27:7;1102:40;;1172:18;1157:34;;1193:22;;;1154:62;1151:88;;;1219:18;;:::i;:::-;1255:2;1248:22;1001:275;;-1:-1:-1;1001:275:7:o;1281:183::-;1341:4;1374:18;1366:6;1363:30;1360:56;;;1396:18;;:::i;:::-;-1:-1:-1;1441:1:7;1437:14;1453:4;1433:25;;1281:183::o;1469:737::-;1523:5;1576:3;1569:4;1561:6;1557:17;1553:27;1543:55;;1594:1;1591;1584:12;1543:55;1630:6;1617:20;1656:4;1680:60;1696:43;1736:2;1696:43;:::i;:::-;1680:60;:::i;:::-;1774:15;;;1860:1;1856:10;;;;1844:23;;1840:32;;;1805:12;;;;1884:15;;;1881:35;;;1912:1;1909;1902:12;1881:35;1948:2;1940:6;1936:15;1960:217;1976:6;1971:3;1968:15;1960:217;;;2056:3;2043:17;2073:31;2098:5;2073:31;:::i;:::-;2117:18;;2155:12;;;;1993;;1960:217;;;-1:-1:-1;2195:5:7;1469:737;-1:-1:-1;;;;;;1469:737:7:o;2211:662::-;2265:5;2318:3;2311:4;2303:6;2299:17;2295:27;2285:55;;2336:1;2333;2326:12;2285:55;2372:6;2359:20;2398:4;2422:60;2438:43;2478:2;2438:43;:::i;2422:60::-;2516:15;;;2602:1;2598:10;;;;2586:23;;2582:32;;;2547:12;;;;2626:15;;;2623:35;;;2654:1;2651;2644:12;2623:35;2690:2;2682:6;2678:15;2702:142;2718:6;2713:3;2710:15;2702:142;;;2784:17;;2772:30;;2822:12;;;;2735;;2702:142;;2878:1095;3057:6;3065;3073;3081;3089;3097;3150:3;3138:9;3129:7;3125:23;3121:33;3118:53;;;3167:1;3164;3157:12;3118:53;3207:9;3194:23;3236:18;3277:2;3269:6;3266:14;3263:34;;;3293:1;3290;3283:12;3263:34;3316:61;3369:7;3360:6;3349:9;3345:22;3316:61;:::i;:::-;3306:71;;3430:2;3419:9;3415:18;3402:32;3386:48;;3459:2;3449:8;3446:16;3443:36;;;3475:1;3472;3465:12;3443:36;3498:63;3553:7;3542:8;3531:9;3527:24;3498:63;:::i;:::-;3488:73;;3614:2;3603:9;3599:18;3586:32;3570:48;;3643:2;3633:8;3630:16;3627:36;;;3659:1;3656;3649:12;3627:36;;3682:63;3737:7;3726:8;3715:9;3711:24;3682:63;:::i;:::-;3672:73;;;3792:2;3781:9;3777:18;3764:32;3754:42;;3846:3;3835:9;3831:19;3818:33;3860:31;3885:5;3860:31;:::i;:::-;3910:5;3900:15;;;3962:3;3951:9;3947:19;3934:33;3924:43;;2878:1095;;;;;;;;:::o;4160:531::-;4203:5;4256:3;4249:4;4241:6;4237:17;4233:27;4223:55;;4274:1;4271;4264:12;4223:55;4310:6;4297:20;4336:18;4332:2;4329:26;4326:52;;;4358:18;;:::i;:::-;4402:55;4445:2;4426:13;;-1:-1:-1;;4422:27:7;4451:4;4418:38;4402:55;:::i;:::-;4482:2;4473:7;4466:19;4528:3;4521:4;4516:2;4508:6;4504:15;4500:26;4497:35;4494:55;;;4545:1;4542;4535:12;4494:55;4610:2;4603:4;4595:6;4591:17;4584:4;4575:7;4571:18;4558:55;4658:1;4633:16;;;4651:4;4629:27;4622:38;;;;4637:7;4160:531;-1:-1:-1;;;4160:531:7:o;4696:1435::-;4912:6;4920;4928;4936;4944;4952;4960;4968;5021:3;5009:9;5000:7;4996:23;4992:33;4989:53;;;5038:1;5035;5028:12;4989:53;5078:9;5065:23;5107:18;5148:2;5140:6;5137:14;5134:34;;;5164:1;5161;5154:12;5134:34;5187:61;5240:7;5231:6;5220:9;5216:22;5187:61;:::i;:::-;5177:71;;5301:2;5290:9;5286:18;5273:32;5257:48;;5330:2;5320:8;5317:16;5314:36;;;5346:1;5343;5336:12;5314:36;5369:63;5424:7;5413:8;5402:9;5398:24;5369:63;:::i;:::-;5359:73;;5485:2;5474:9;5470:18;5457:32;5441:48;;5514:2;5504:8;5501:16;5498:36;;;5530:1;5527;5520:12;5498:36;5553:63;5608:7;5597:8;5586:9;5582:24;5553:63;:::i;:::-;5543:73;;5669:2;5658:9;5654:18;5641:32;5625:48;;5698:2;5688:8;5685:16;5682:36;;;5714:1;5711;5704:12;5682:36;5737:52;5781:7;5770:8;5759:9;5755:24;5737:52;:::i;:::-;5727:62;;5836:3;5825:9;5821:19;5808:33;5798:43;;5860:39;5894:3;5883:9;5879:19;5860:39;:::i;:::-;5850:49;;5952:3;5941:9;5937:19;5924:33;5908:49;;5982:2;5972:8;5969:16;5966:36;;;5998:1;5995;5988:12;5966:36;;6021:52;6065:7;6054:8;6043:9;6039:24;6021:52;:::i;:::-;6011:62;;;6120:3;6109:9;6105:19;6092:33;6082:43;;4696:1435;;;;;;;;;;;:::o;6136:118::-;6222:5;6215:13;6208:21;6201:5;6198:32;6188:60;;6244:1;6241;6234:12;6259:1660;6442:6;6450;6458;6466;6519:3;6507:9;6498:7;6494:23;6490:33;6487:53;;;6536:1;6533;6526:12;6487:53;6576:9;6563:23;6605:18;6646:2;6638:6;6635:14;6632:34;;;6662:1;6659;6652:12;6632:34;6685:61;6738:7;6729:6;6718:9;6714:22;6685:61;:::i;:::-;6675:71;;6765:2;6755:12;;6820:2;6809:9;6805:18;6792:32;6849:2;6839:8;6836:16;6833:36;;;6865:1;6862;6855:12;6833:36;6888:63;6943:7;6932:8;6921:9;6917:24;6888:63;:::i;:::-;6878:73;;;7004:2;6993:9;6989:18;6976:32;7033:2;7023:8;7020:16;7017:36;;;7049:1;7046;7039:12;7017:36;7072:63;7127:7;7116:8;7105:9;7101:24;7072:63;:::i;:::-;7062:73;;;7188:2;7177:9;7173:18;7160:32;7217:2;7207:8;7204:16;7201:36;;;7233:1;7230;7223:12;7201:36;7256:24;;;-1:-1:-1;7311:4:7;7303:13;;7299:27;-1:-1:-1;7289:55:7;;7340:1;7337;7330:12;7289:55;7376:2;7363:16;7399:60;7415:43;7455:2;7415:43;:::i;7399:60::-;7493:15;;;7575:1;7571:10;;;;7563:19;;7559:28;;;7524:12;;;;7599:19;;;7596:39;;;7631:1;7628;7621:12;7596:39;7655:11;;;;7675:214;7691:6;7686:3;7683:15;7675:214;;;7771:3;7758:17;7788:28;7810:5;7788:28;:::i;:::-;7829:18;;7708:12;;;;7867;;;;7675:214;;;6259:1660;;;;-1:-1:-1;6259:1660:7;;-1:-1:-1;;;;;;6259:1660:7:o;8132:180::-;8191:6;8244:2;8232:9;8223:7;8219:23;8215:32;8212:52;;;8260:1;8257;8250:12;8212:52;-1:-1:-1;8283:23:7;;8132:180;-1:-1:-1;8132:180:7:o;8317:1125::-;8483:6;8491;8499;8507;8515;8523;8531;8539;8592:3;8580:9;8571:7;8567:23;8563:33;8560:53;;;8609:1;8606;8599:12;8560:53;8632:29;8651:9;8632:29;:::i;:::-;8622:39;;8708:2;8697:9;8693:18;8680:32;8670:42;;8763:2;8752:9;8748:18;8735:32;8786:18;8827:2;8819:6;8816:14;8813:34;;;8843:1;8840;8833:12;9447:247;9506:6;9559:2;9547:9;9538:7;9534:23;9530:32;9527:52;;;9575:1;9572;9565:12;9527:52;9614:9;9601:23;9633:31;9658:5;9633:31;:::i;:::-;9683:5;9447:247;-1:-1:-1;;;9447:247:7:o;9699:398::-;9752:3;9790:5;9784:12;9834:4;9872:2;9865:5;9861:14;9893:1;9903:169;9917:6;9914:1;9911:13;9903:169;;;9978:13;;9966:26;;10012:12;;;;10047:15;;;;9939:1;9932:9;9903:169;;;-1:-1:-1;10088:3:7;;9699:398;-1:-1:-1;;;;;9699:398:7:o;10102:1076::-;10560:13;;10503:3;;10534;;10613:4;10640:15;;;10503:3;10683:201;10697:6;10694:1;10691:13;10683:201;;;10764:13;;-1:-1:-1;;;;;10760:39:7;10746:54;;10822:14;;;;10859:15;;;;10796:1;10712:9;10683:201;;;10687:3;;10906:81;10943:43;10980:5;10972:6;10943:43;:::i;:::-;10935:6;10906:81;:::i;:::-;10996:21;;;11057:2;11053:15;;;;-1:-1:-1;;11049:53:7;11033:14;;;11026:77;;;;-1:-1:-1;;;11130:2:7;11119:14;;11112:30;-1:-1:-1;11169:2:7;11158:14;;10102:1076;-1:-1:-1;;;10102:1076:7:o;11533:127::-;11594:10;11589:3;11585:20;11582:1;11575:31;11625:4;11622:1;11615:15;11649:4;11646:1;11639:15;11665:128;11705:3;11736:1;11732:6;11729:1;11726:13;11723:39;;;11742:18;;:::i;:::-;-1:-1:-1;11778:9:7;;11665:128::o;12495:127::-;12556:10;12551:3;12547:20;12544:1;12537:31;12587:4;12584:1;12577:15;12611:4;12608:1;12601:15;13161:251;13231:6;13284:2;13272:9;13263:7;13259:23;13255:32;13252:52;;;13300:1;13297;13290:12;13252:52;13332:9;13326:16;13351:31;13376:5;13351:31;:::i;13778:1153::-;14005:2;13994:9;13987:21;13968:4;14037:6;14031:13;14080:6;14075:2;14064:9;14060:18;14053:34;14105:1;14115:144;14129:6;14126:1;14123:13;14115:144;;;14242:4;14226:14;;;14222:25;;14216:32;14211:2;14192:17;;;14188:26;14181:68;14144:12;14115:144;;;14277:6;14274:1;14271:13;14268:91;;;14347:1;14342:2;14333:6;14322:9;14318:22;14314:31;14307:42;14268:91;-1:-1:-1;14418:2:7;14397:15;-1:-1:-1;;14393:29:7;14378:45;;14517:18;;;14451:2;14513:27;;;14473:4;14493:18;;;14486:55;;;;14589:13;;14443:11;;;14611:21;;;14683:15;;;;14718:1;;14656:3;14648:12;;;;14728:177;14744:8;14739:3;14736:17;14728:177;;;14811:13;;14799:26;;14880:15;;;;14772:1;14763:11;;;;;14845:12;;;;14728:177;;;-1:-1:-1;14922:3:7;13778:1153;-1:-1:-1;;;;;;;13778:1153:7:o;14936:135::-;14975:3;-1:-1:-1;;14996:17:7;;14993:43;;;15016:18;;:::i;:::-;-1:-1:-1;15063:1:7;15052:13;;14936:135::o;15421:125::-;15461:4;15489:1;15486;15483:8;15480:34;;;15494:18;;:::i;:::-;-1:-1:-1;15531:9:7;;15421:125::o;15931:245::-;15998:6;16051:2;16039:9;16030:7;16026:23;16022:32;16019:52;;;16067:1;16064;16057:12;16019:52;16099:9;16093:16;16118:28;16140:5;16118:28;:::i;16181:356::-;16383:2;16365:21;;;16402:18;;;16395:30;16461:34;16456:2;16441:18;;16434:62;16528:2;16513:18;;16181:356::o;18012:184::-;18082:6;18135:2;18123:9;18114:7;18110:23;18106:32;18103:52;;;18151:1;18148;18141:12;18103:52;-1:-1:-1;18174:16:7;;18012:184;-1:-1:-1;18012:184:7:o
Swarm Source
ipfs://46978ff7906c3206caacea72f059bf706e5876e642c04b9cf59752d8de741124
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.