Source Code
Overview
S Balance
More Info
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
25482228 | 3 days ago | Contract Creation | 0 S |
Loading...
Loading
Contract Name:
GameProposals
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity Standard Json-Input format)
// File: contracts\openzeppelin\contracts\token\ERC20\IERC20.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); } // File: contracts\openzeppelin\contracts\utils\Context.sol pragma solidity ^0.8.19; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: contracts\openzeppelin\contracts\access\Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.19; /** * @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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts\openzeppelin\contracts\utils\introspection\IERC165.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.19; /** * @dev Interface of the ERC-165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[ERC]. * * 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[ERC section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: contracts\openzeppelin\contracts\token\ERC721\IERC721.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.19; /** * @dev Required interface of an ERC-721 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`. * * 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; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC-721 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 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: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * 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 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 address zero. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // File: contracts\openzeppelin\contracts\token\ERC721\extensions\IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.19; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: contracts/sdaemon0x/treasury/GameProposals.sol pragma solidity ^0.8.19; interface TreasuryStakeMarker is IERC721Enumerable { function mint(address to) external returns (uint256); function burn(address to, uint256 tokenId) external; function checkClaimableDatetime(uint256 tokenId) external; function rarity(uint256 tokenId) external view returns (uint256); } interface TreasuryHolding { function sync() external; function getStakerVolume(address staker) external view returns (uint256); function totalStaked() external view returns (uint256); function get_nb_stake() external view returns (uint256); function get_active(uint256 tokenId) external view returns (bool); function get_amount(uint256 tokenId) external view returns (uint256); } interface ISdaemon0x_GameCenter { function addGame(address creator, uint256 tokenId, address gameAddr, uint256 amount) external; function claimGameFee(address gameAddr) external; function removeGame(address gameAddr) external; function compute_game_price(uint256 amount) external view returns (uint256, uint256); function betGame(uint256 amount) external; function payPlayer(address player, uint256 amount) external; } contract GameProposals is Ownable { IERC20 public sdeamon = IERC20(0x16a0BfC1C6e331788E0A5096911cDCd9943D2C9c); TreasuryStakeMarker public nftContract; TreasuryHolding public stakingContract; ISdaemon0x_GameCenter public gameCenter; function init_StakingContract(address addr) external onlyOwner { stakingContract = TreasuryHolding(addr); } function init_GameCenter(address addr) external onlyOwner { gameCenter = ISdaemon0x_GameCenter(addr); } //need to pay options to GameCenter ... function approve_to(address addr, bool enable) external onlyOwner { sdeamon.approve(addr, enable ? type(uint256).max : 0); } enum MODE {ADD, DELETE} struct GameProposal { MODE mode; address proposer; uint256 tokenId; uint256 votesFor; uint256 votesAgainst; uint256 amount_options; //amount give to finance starting the game } mapping(address => GameProposal) public gameProposals; address[] public gameProposalsArray; event GameProposalCreated(address indexed proposer, address gameAddr, MODE mode); event GameProposalVoted(address indexed voter, address gameAddr, bool support, uint256 option); constructor() Ownable(0x88524E752144C15dc1a12BA3978c2d700dc97498) {} function proposeGame(MODE mode_, address gameAddr_, uint256 tokenId_) external { require(address(stakingContract) != address(0), "not init"); require(nftContract.ownerOf(tokenId_) == msg.sender, "not your nft"); require(gameAddr_ != address(0), "Invalid game address"); require(mode_ == MODE.ADD || mode_ == MODE.DELETE, "Invalid mode"); require(gameProposals[gameAddr_].proposer == address(0), "Proposal already exists"); GameProposal storage proposal = gameProposals[gameAddr_]; proposal.mode = mode_; proposal.proposer = msg.sender; proposal.tokenId = tokenId_; gameProposalsArray.push(gameAddr_); emit GameProposalCreated(msg.sender, gameAddr_, mode_); } function voteGame(address gameAddr, bool support, uint256 option) external { require(address(stakingContract) != address(0), "not init"); require(gameProposals[gameAddr].proposer != address(0), "No proposal"); uint256 balnft = nftContract.balanceOf(msg.sender); require(balnft > 0, "No NFT"); uint256 amount = 0; for (uint256 i = 0; i < balnft; i++) { uint256 tokenId = nftContract.tokenOfOwnerByIndex(msg.sender, i); if (stakingContract.get_active(tokenId)) { amount += stakingContract.get_amount(tokenId); } } require(amount > 0, "No staked NFT"); GameProposal storage proposal = gameProposals[gameAddr]; if (support) { proposal.votesFor += amount; } else { proposal.votesAgainst += amount; } if (option > 0) { sdeamon.transferFrom(msg.sender, address(this), option); proposal.amount_options += option; } if (proposal.votesFor + proposal.votesAgainst >= (stakingContract.totalStaked() * 7500) / 10000) { if (proposal.votesFor > proposal.votesAgainst) { if (proposal.mode == MODE.ADD) { gameCenter.addGame(proposal.proposer, proposal.tokenId, gameAddr, proposal.amount_options); } else { gameCenter.removeGame(gameAddr); } } delete gameProposals[gameAddr]; for (uint256 i = 0; i < gameProposalsArray.length; i++) { if (gameProposalsArray[i] == gameAddr) { if (i < gameProposalsArray.length - 1) gameProposalsArray[i] = gameProposalsArray[gameProposalsArray.length - 1]; gameProposalsArray.pop(); return; } } } emit GameProposalVoted(msg.sender, gameAddr, support, option); } }
{ "metadata": { "appendCBOR": true, "bytecodeHash": "ipfs", "useLiteralContent": false }, "optimizer": { "enabled": true, "runs": 1000000 }, "viaIR": true, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposer","type":"address"},{"indexed":false,"internalType":"address","name":"gameAddr","type":"address"},{"indexed":false,"internalType":"enum GameProposals.MODE","name":"mode","type":"uint8"}],"name":"GameProposalCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"address","name":"gameAddr","type":"address"},{"indexed":false,"internalType":"bool","name":"support","type":"bool"},{"indexed":false,"internalType":"uint256","name":"option","type":"uint256"}],"name":"GameProposalVoted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"approve_to","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gameCenter","outputs":[{"internalType":"contract ISdaemon0x_GameCenter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"gameProposals","outputs":[{"internalType":"enum GameProposals.MODE","name":"mode","type":"uint8"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"votesFor","type":"uint256"},{"internalType":"uint256","name":"votesAgainst","type":"uint256"},{"internalType":"uint256","name":"amount_options","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"gameProposalsArray","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"init_GameCenter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"init_StakingContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nftContract","outputs":[{"internalType":"contract TreasuryStakeMarker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum GameProposals.MODE","name":"mode_","type":"uint8"},{"internalType":"address","name":"gameAddr_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"proposeGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sdeamon","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingContract","outputs":[{"internalType":"contract TreasuryHolding","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"gameAddr","type":"address"},{"internalType":"bool","name":"support","type":"bool"},{"internalType":"uint256","name":"option","type":"uint256"}],"name":"voteGame","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60808060405234610089577316a0bfc1c6e331788e0a5096911cdcd9943d2c9c6000547388524e752144c15dc1a12ba3978c2d700dc9749860018060a01b031991818382161760005560018060a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3600154161760015561164a908161008f8239f35b600080fdfe6040608081526004908136101561001557600080fd5b600091823560e01c80634c5c686e14610778578063612d8538146106d55780636c17209514610683578063715018a6146105e75780638da5cb5b14610596578063a5c431371461052a578063bb378746146104a9578063c22a9d0014610427578063d30d6b72146102ef578063d56d229d1461029c578063e573edcc14610249578063ee99205c146101f2578063ef1baa4c146101a05763f2fde38b146100bb57600080fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576100f2610b6e565b906100fb610c47565b73ffffffffffffffffffffffffffffffffffffffff80921692831561016d5750508254827fffffffffffffffffffffffff00000000000000000000000000000000000000008216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b908460249251917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352820152fd5b8280fd5b83346101ef5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ef576101ec6101db610b6e565b6101e3610c38565b60443591610e02565b80f35b80fd5b50503461024557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102455760209073ffffffffffffffffffffffffffffffffffffffff600354169051908152f35b5080fd5b50503461024557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102455760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b50503461024557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102455760209073ffffffffffffffffffffffffffffffffffffffff600254169051908152f35b50903461019c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760206103d79261032d610b6e565b610335610c38565b9061033e610c47565b60015473ffffffffffffffffffffffffffffffffffffffff16911561041f57867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff935b8651978895869485937f095ea7b300000000000000000000000000000000000000000000000000000000855284016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af190811561041657506103eb575080f35b61040b9060203d811161040f575b6104038183610cdb565b810190610d1c565b5080f35b503d6103f9565b513d84823e3d90fd5b868093610381565b83346101ef5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ef5773ffffffffffffffffffffffffffffffffffffffff610474610b6e565b61047c610c47565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035580f35b8382346102455760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102455773ffffffffffffffffffffffffffffffffffffffff6104f7610b6e565b6104ff610c47565b167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905580f35b503461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5735916006548310156101ef575073ffffffffffffffffffffffffffffffffffffffff610587602093610bd2565b92905490519260031b1c168152f35b50503461024557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102455773ffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b83346101ef57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ef5761061e610c47565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5091346101ef57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ef575073ffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b503461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c579160c0928273ffffffffffffffffffffffffffffffffffffffff9283610729610b6e565b1681526005602052209081549360018301549060028401549260038501549401549481519661075b8860ff8316610b96565b60081c1660208701528501526060840152608083015260a0820152f35b50903461019c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5781356002811015610b6a57602492833573ffffffffffffffffffffffffffffffffffffffff9182821695868303610b66576044356107ec85600354161515610d34565b846002541694875180967f6352211e000000000000000000000000000000000000000000000000000000008252838683015281856020998a935afa908115610b5c578b91610b22575b508133911603610ac7578815610a6c57899087158015610a5f575b15610a0457898b5260058752888b205460081c166109a957888a5260058652878a209061097e5780547fffffffffffffffffffffff0000000000000000000000000000000000000000001660ff8816173360081b74ffffffffffffffffffffffffffffffffffffffff0016178155600101556006549168010000000000000000831015610954575050916109417fddeef085dbac2fe5eeba2779dd822b9f9853e5d2ebca9991eaa0e3f60db02be895949261091485600161094e9701600655610bd2565b90919082549060031b9173ffffffffffffffffffffffffffffffffffffffff809116831b921b1916179055565b8351958652850190610b96565b3392a280f35b604189917f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b828a6021867f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b606484601785898c51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f50726f706f73616c20616c7265616479206578697374730000000000000000006044820152fd5b606485600c868a8d51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f496e76616c6964206d6f646500000000000000000000000000000000000000006044820152fd5b508a915060018814610850565b606484601485898c51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f496e76616c69642067616d6520616464726573730000000000000000000000006044820152fd5b606484600c85898c51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f6e6f7420796f7572206e667400000000000000000000000000000000000000006044820152fd5b90508681813d8311610b55575b610b398183610cdb565b81010312610b5157518181168103610b515738610835565b8a80fd5b503d610b2f565b89513d8d823e3d90fd5b8780fd5b8380fd5b6004359073ffffffffffffffffffffffffffffffffffffffff82168203610b9157565b600080fd5b906002821015610ba35752565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600654811015610c095760066000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0190600090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602435908115158203610b9157565b73ffffffffffffffffffffffffffffffffffffffff600054163303610c6857565b60246040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152fd5b67ffffffffffffffff8111610cac57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610cac57604052565b90816020910312610b9157518015158103610b915790565b15610d3b57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6e6f7420696e69740000000000000000000000000000000000000000000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610dc65760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b91908201809211610dc657565b919091600392835490600073ffffffffffffffffffffffffffffffffffffffff8080941694610e32861515610d34565b169586825260209360058552604095818785205460081c16156115b7578160025416908751917f70a08231000000000000000000000000000000000000000000000000000000008352600492338482015260249289828581865afa9182156115ad57889261157e575b508115611523578792885b8381106113985750505050801561133d578a86526005885288862090871561132857610ed760028301918254610df5565b90555b8961129b575b60028101548582015490610ef48282610df5565b858b8d898b54169051928380927f817b1cd20000000000000000000000000000000000000000000000000000000082525afa908115611291578a91611260575b50611d4c908181029181830414901517156112355761271090041115610f93575b505050505050505082519485521515908401528201527f4cc945bc963aa6d0a88aaf24817f8493f25e6361f81538895f60923bf6e30c7e60603392a2565b116110ef575b50898552600587528785209480865580836001978289820155826002820155828882015501558581905b610fce575b80610f55565b60068054808310156110e8578d87610fe585610bd2565b9054908b1b1c1614611002575050610ffc90610d99565b86610fc3565b99509a50939850939950935093507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff948581019081116110bd57908187928210611098575b505050855492831561106f57505050019261106184610bd2565b81939154921b1b1916905555565b6031907f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b6110b5926110a861091492610bd2565b9054908c1b1c1691610bd2565b843880611047565b50506011837f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b5050610fc8565b60ff815416600281101561120a576111a1578383541684825460081c1690846001840154930154813b1561119d578892838f95936084938f5197889687957f594be94f0000000000000000000000000000000000000000000000000000000087528c8701528a860152604485015260648401525af180156111935790869161117b575b50505b38610f99565b61118490610c98565b61118f578438611172565b8480fd5b89513d88823e3d90fd5b8880fd5b5082825416803b1561120657858091838d8c5194859384927fbce24669000000000000000000000000000000000000000000000000000000008452898401525af18015611193576111f3575b50611175565b6111ff90959195610c98565b93386111ed565b8580fd5b82876021867f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b858a6011897f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b90508b81813d831161128a575b6112778183610cdb565b81010312611286575138610f34565b8980fd5b503d61126d565b8d513d8c823e3d90fd5b8588856001541660648d8d5194859384927f23b872dd000000000000000000000000000000000000000000000000000000008452338b850152308a85015260448401525af1801561131e57611301575b508281016112fa8b8254610df5565b9055610ee0565b61131790893d8b1161040f576104038183610cdb565b50386112eb565b8a513d89823e3d90fd5b611336868301918254610df5565b9055610eda565b606483600d848b8d51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f4e6f207374616b6564204e4654000000000000000000000000000000000000006044820152fd5b8c517f2f745c5900000000000000000000000000000000000000000000000000000000815233888201908152602081018390528d90829081906040010381865afa9081156114c4578b916114f6575b508d517f6237a1c400000000000000000000000000000000000000000000000000000000815281898201528d818981885afa9081156114eb578e8d926114ce575b505061143e575b5061143990610d99565b610ea6565b8d95919551907fe3d7d40f000000000000000000000000000000000000000000000000000000008252888201528c818881875afa9081156114c4578b91611495575b5061148e9061143992610df5565b949061142f565b90508c81813d83116114bd575b6114ac8183610cdb565b81010312610b515751611439611480565b503d6114a2565b8e513d8d823e3d90fd5b6114e49250803d1061040f576104038183610cdb565b388e611428565b508e513d8d823e3d90fd5b90508c81813d831161151c575b61150d8183610cdb565b81010312610b515751386113e7565b503d611503565b6064856006868d8f51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f4e6f204e465400000000000000000000000000000000000000000000000000006044820152fd5b9091508981813d83116115a6575b6115968183610cdb565b81010312610b6657519038610e9b565b503d61158c565b8b513d8a823e3d90fd5b6064868851907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600b60248201527f4e6f2070726f706f73616c0000000000000000000000000000000000000000006044820152fdfea26469706673582212201d77273bc5f9ff293535dfb01fa5ce21937e8b48390aaed1a86a93223864b27d64736f6c63430008130033
Deployed Bytecode
0x6040608081526004908136101561001557600080fd5b600091823560e01c80634c5c686e14610778578063612d8538146106d55780636c17209514610683578063715018a6146105e75780638da5cb5b14610596578063a5c431371461052a578063bb378746146104a9578063c22a9d0014610427578063d30d6b72146102ef578063d56d229d1461029c578063e573edcc14610249578063ee99205c146101f2578063ef1baa4c146101a05763f2fde38b146100bb57600080fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576100f2610b6e565b906100fb610c47565b73ffffffffffffffffffffffffffffffffffffffff80921692831561016d5750508254827fffffffffffffffffffffffff00000000000000000000000000000000000000008216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b908460249251917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352820152fd5b8280fd5b83346101ef5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ef576101ec6101db610b6e565b6101e3610c38565b60443591610e02565b80f35b80fd5b50503461024557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102455760209073ffffffffffffffffffffffffffffffffffffffff600354169051908152f35b5080fd5b50503461024557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102455760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b50503461024557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102455760209073ffffffffffffffffffffffffffffffffffffffff600254169051908152f35b50903461019c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760206103d79261032d610b6e565b610335610c38565b9061033e610c47565b60015473ffffffffffffffffffffffffffffffffffffffff16911561041f57867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff935b8651978895869485937f095ea7b300000000000000000000000000000000000000000000000000000000855284016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af190811561041657506103eb575080f35b61040b9060203d811161040f575b6104038183610cdb565b810190610d1c565b5080f35b503d6103f9565b513d84823e3d90fd5b868093610381565b83346101ef5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ef5773ffffffffffffffffffffffffffffffffffffffff610474610b6e565b61047c610c47565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035580f35b8382346102455760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102455773ffffffffffffffffffffffffffffffffffffffff6104f7610b6e565b6104ff610c47565b167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905580f35b503461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5735916006548310156101ef575073ffffffffffffffffffffffffffffffffffffffff610587602093610bd2565b92905490519260031b1c168152f35b50503461024557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102455773ffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b83346101ef57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ef5761061e610c47565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5091346101ef57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ef575073ffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b503461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c579160c0928273ffffffffffffffffffffffffffffffffffffffff9283610729610b6e565b1681526005602052209081549360018301549060028401549260038501549401549481519661075b8860ff8316610b96565b60081c1660208701528501526060840152608083015260a0820152f35b50903461019c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5781356002811015610b6a57602492833573ffffffffffffffffffffffffffffffffffffffff9182821695868303610b66576044356107ec85600354161515610d34565b846002541694875180967f6352211e000000000000000000000000000000000000000000000000000000008252838683015281856020998a935afa908115610b5c578b91610b22575b508133911603610ac7578815610a6c57899087158015610a5f575b15610a0457898b5260058752888b205460081c166109a957888a5260058652878a209061097e5780547fffffffffffffffffffffff0000000000000000000000000000000000000000001660ff8816173360081b74ffffffffffffffffffffffffffffffffffffffff0016178155600101556006549168010000000000000000831015610954575050916109417fddeef085dbac2fe5eeba2779dd822b9f9853e5d2ebca9991eaa0e3f60db02be895949261091485600161094e9701600655610bd2565b90919082549060031b9173ffffffffffffffffffffffffffffffffffffffff809116831b921b1916179055565b8351958652850190610b96565b3392a280f35b604189917f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b828a6021867f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b606484601785898c51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f50726f706f73616c20616c7265616479206578697374730000000000000000006044820152fd5b606485600c868a8d51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f496e76616c6964206d6f646500000000000000000000000000000000000000006044820152fd5b508a915060018814610850565b606484601485898c51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f496e76616c69642067616d6520616464726573730000000000000000000000006044820152fd5b606484600c85898c51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f6e6f7420796f7572206e667400000000000000000000000000000000000000006044820152fd5b90508681813d8311610b55575b610b398183610cdb565b81010312610b5157518181168103610b515738610835565b8a80fd5b503d610b2f565b89513d8d823e3d90fd5b8780fd5b8380fd5b6004359073ffffffffffffffffffffffffffffffffffffffff82168203610b9157565b600080fd5b906002821015610ba35752565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600654811015610c095760066000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0190600090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602435908115158203610b9157565b73ffffffffffffffffffffffffffffffffffffffff600054163303610c6857565b60246040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152fd5b67ffffffffffffffff8111610cac57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610cac57604052565b90816020910312610b9157518015158103610b915790565b15610d3b57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6e6f7420696e69740000000000000000000000000000000000000000000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610dc65760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b91908201809211610dc657565b919091600392835490600073ffffffffffffffffffffffffffffffffffffffff8080941694610e32861515610d34565b169586825260209360058552604095818785205460081c16156115b7578160025416908751917f70a08231000000000000000000000000000000000000000000000000000000008352600492338482015260249289828581865afa9182156115ad57889261157e575b508115611523578792885b8381106113985750505050801561133d578a86526005885288862090871561132857610ed760028301918254610df5565b90555b8961129b575b60028101548582015490610ef48282610df5565b858b8d898b54169051928380927f817b1cd20000000000000000000000000000000000000000000000000000000082525afa908115611291578a91611260575b50611d4c908181029181830414901517156112355761271090041115610f93575b505050505050505082519485521515908401528201527f4cc945bc963aa6d0a88aaf24817f8493f25e6361f81538895f60923bf6e30c7e60603392a2565b116110ef575b50898552600587528785209480865580836001978289820155826002820155828882015501558581905b610fce575b80610f55565b60068054808310156110e8578d87610fe585610bd2565b9054908b1b1c1614611002575050610ffc90610d99565b86610fc3565b99509a50939850939950935093507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff948581019081116110bd57908187928210611098575b505050855492831561106f57505050019261106184610bd2565b81939154921b1b1916905555565b6031907f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b6110b5926110a861091492610bd2565b9054908c1b1c1691610bd2565b843880611047565b50506011837f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b5050610fc8565b60ff815416600281101561120a576111a1578383541684825460081c1690846001840154930154813b1561119d578892838f95936084938f5197889687957f594be94f0000000000000000000000000000000000000000000000000000000087528c8701528a860152604485015260648401525af180156111935790869161117b575b50505b38610f99565b61118490610c98565b61118f578438611172565b8480fd5b89513d88823e3d90fd5b8880fd5b5082825416803b1561120657858091838d8c5194859384927fbce24669000000000000000000000000000000000000000000000000000000008452898401525af18015611193576111f3575b50611175565b6111ff90959195610c98565b93386111ed565b8580fd5b82876021867f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b858a6011897f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b90508b81813d831161128a575b6112778183610cdb565b81010312611286575138610f34565b8980fd5b503d61126d565b8d513d8c823e3d90fd5b8588856001541660648d8d5194859384927f23b872dd000000000000000000000000000000000000000000000000000000008452338b850152308a85015260448401525af1801561131e57611301575b508281016112fa8b8254610df5565b9055610ee0565b61131790893d8b1161040f576104038183610cdb565b50386112eb565b8a513d89823e3d90fd5b611336868301918254610df5565b9055610eda565b606483600d848b8d51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f4e6f207374616b6564204e4654000000000000000000000000000000000000006044820152fd5b8c517f2f745c5900000000000000000000000000000000000000000000000000000000815233888201908152602081018390528d90829081906040010381865afa9081156114c4578b916114f6575b508d517f6237a1c400000000000000000000000000000000000000000000000000000000815281898201528d818981885afa9081156114eb578e8d926114ce575b505061143e575b5061143990610d99565b610ea6565b8d95919551907fe3d7d40f000000000000000000000000000000000000000000000000000000008252888201528c818881875afa9081156114c4578b91611495575b5061148e9061143992610df5565b949061142f565b90508c81813d83116114bd575b6114ac8183610cdb565b81010312610b515751611439611480565b503d6114a2565b8e513d8d823e3d90fd5b6114e49250803d1061040f576104038183610cdb565b388e611428565b508e513d8d823e3d90fd5b90508c81813d831161151c575b61150d8183610cdb565b81010312610b515751386113e7565b503d611503565b6064856006868d8f51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f4e6f204e465400000000000000000000000000000000000000000000000000006044820152fd5b9091508981813d83116115a6575b6115968183610cdb565b81010312610b6657519038610e9b565b503d61158c565b8b513d8a823e3d90fd5b6064868851907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600b60248201527f4e6f2070726f706f73616c0000000000000000000000000000000000000000006044820152fdfea26469706673582212201d77273bc5f9ff293535dfb01fa5ce21937e8b48390aaed1a86a93223864b27d64736f6c63430008130033
Deployed Bytecode Sourcemap
13150:4102:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3236:65;;;:::i;:::-;13150:4102;;;;4392:22;;;4388:93;;13150:4102;;;;;;;;;;;;4828:40;;;;13150:4102;;4388:93;13150:4102;;;;;4438:31;;;;;;13150:4102;4438:31;13150:4102;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;13317:38;13150:4102;;;;;;;;;;;;;;;;;;;;;;;;;;;;13191:74;13150:4102;;;;;;;;;;;;;;;;;;;;;;;;13272:38;13150:4102;;;;;;;;;;;;;;;;;;;;;;13780:53;13150:4102;;;:::i;:::-;;;:::i;:::-;3236:65;;;:::i;:::-;13780:7;13150:4102;;;;13802:30;;;;13811:17;13802:30;;13150:4102;;13780:53;;;;;;;13150:4102;13780:53;;;;13150:4102;;;;;;;;;;;;;;;;;13780:53;;;;;;;;;;;;;13150:4102;;;13780:53;;;13150:4102;13780:53;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;13150:4102;;13780:53;;;;;;13150:4102;;;;;;;;13802:30;;;;;;13150:4102;;;;;;;;;;;;;;;:::i;:::-;3236:65;;:::i;:::-;13150:4102;;13482:39;13150:4102;;;13482:39;13150:4102;;;;;;;;;;;;;;;;;;;:::i;:::-;3236:65;;:::i;:::-;13150:4102;;;;;;;;;;;;;;;;;;;;;;;;14179:35;13150:4102;14179:35;;;;;;13150:4102;14179:35;13150:4102;14179:35;;:::i;:::-;13150:4102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3236:65;;:::i;:::-;13150:4102;;;;;;;;;;4828:40;;;;13150:4102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;14119:53;13150:4102;;;;;;14119:53;;;;13150:4102;14119:53;;;;13150:4102;14119:53;;;;13150:4102;14119:53;;13150:4102;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14573:59;13150:4102;14589:15;13150:4102;;14581:38;;14573:59;:::i;:::-;13150:4102;;;;;;;14651:29;;13150:4102;14651:29;;;;;;13150:4102;;;;14651:29;;;;;;;;;;;;;;13150:4102;14684:10;;;13150:4102;;14651:43;13150:4102;;14730:23;;13150:4102;;;14797:17;;;:41;;;;13150:4102;;;;;;;14874:13;13150:4102;;;;;;;;;;;;;;14874:13;13150:4102;;;;;;;;;;;;;;;;14684:10;13150:4102;;;;;;;;15102:16;13150:4102;15140:18;13150:4102;;;;;;;;;;;;15190:49;13150:4102;;;;;;;;;15140:18;13150:4102;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14684:10;15190:49;;13150:4102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14797:41;-1:-1:-1;13150:4102:0;;-1:-1:-1;13150:4102:0;14818:20;;14797:41;;13150:4102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14651:29;;;;;;;;;;;;;;;;:::i;:::-;;;13150:4102;;;;;;;;;;;;14651:29;;;13150:4102;;;;14651:29;;;;;;13150:4102;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;13150:4102:0;;;;;-1:-1:-1;13150:4102:0;;15140:18;13150:4102;;;;;;15140:18;-1:-1:-1;13150:4102:0;;;;-1:-1:-1;13150:4102:0;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;3543:166::-;13150:4102;3453:6;13150:4102;;1488:10;3603:23;3599:103;;3543:166::o;3599:103::-;13150:4102;;;3650:40;;;1488:10;3650:40;;;13150:4102;3650:40;13150:4102;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;15253:1996::-;;;;15355:15;13150:4102;;;;-1:-1:-1;13150:4102:0;;;;;15347:38;15339:59;15347:38;;;15339:59;:::i;:::-;13150:4102;;;;;;;15417:13;13150:4102;;;;;;;;;;;;15417:46;13150:4102;;;15507:11;13150:4102;;;;;15507:33;13150:4102;15507:33;;;15529:10;;15507:33;;;13150:4102;;15507:33;;;;;;;;;;;;;;;;;15253:1996;15559:10;;;13150:4102;;15591:18;15625:13;;15640:10;;;;;;15901;;;;;;13150:4102;;;;;15417:13;13150:4102;;;;;;16006:131;;;;16034:27;15507:11;16034:17;;13150:4102;;;16034:27;:::i;:::-;13150:4102;;16006:131;16151:10;16147:146;;16006:131;15507:11;16307:17;;13150:4102;16327:21;;;13150:4102;16307:41;;;;;:::i;:::-;13150:4102;;;;;;;;;16353:29;;;;13150:4102;16353:29;;;;;;;;;;;;;16006:131;16385:4;;13150:4102;;;;;;;;;;;;;;;16393:5;13150:4102;;-1:-1:-1;16307:91:0;16303:867;;16006:131;13150:4102;;;;;;;;;;;;;;;;;;;;;;17185:56;13150:4102;15529:10;17185:56;;15253:1996::o;16303:867::-;16419:41;16415:325;;16303:867;13150:4102;;;;15417:13;13150:4102;;;;;;;;;;;;;;;;;;;15507:11;13150:4102;;;;;;;;;;16804:13;;16799:360;13150:4102;;;16799:360;16303:867;;;16850:3;16823:18;13150:4102;;16819:29;;;;;;16878:21;;;;;:::i;:::-;13150:4102;;;;;;;16878:33;16874:270;;16850:3;;;;;:::i;:::-;16804:13;;;16874:270;13150:4102;;;;;;;;;;;;;;;;;;;;;;;;16940:33;;;;;;16936:112;;16874:270;13150:4102;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;17118:7::o;13150:4102::-;;;;;;;;16936:112;16975:73;16999:49;;16975:21;16999:49;;:::i;:::-;13150:4102;;;;;;;16975:21;;:::i;:73::-;16936:112;;;;;13150:4102;;;;;;;;;;16819:29;;;;;16415:325;13150:4102;;;;15507:11;13150:4102;;;;;16485:25;;13150:4102;;;;;;;;;;16573:16;;13150:4102;16573:16;;13150:4102;16601:23;;13150:4102;16535:90;;;;;13150:4102;;;;;;;;;;16535:90;;;;;13150:4102;16535:90;;;;;13150:4102;;;;;;;;;;;;;16535:90;;;;;;;;;;;16481:244;;;;16415:325;;;16535:90;;;;:::i;:::-;13150:4102;;16535:90;;;;13150:4102;;;;16535:90;13150:4102;;;;;;;;;16535:90;13150:4102;;;16481:244;13150:4102;;;;;16674:31;;;;;13150:4102;;;;;;;16674:31;;;;;13150:4102;16674:31;;;;;13150:4102;16674:31;;;;;;;;16481:244;;;;16674:31;;;;;;;:::i;:::-;;;;;;13150:4102;;;;;;;;;;;;;;;;;;;;;;;16353:29;;;;;;;;;;;;;;;;:::i;:::-;;;13150:4102;;;;;16353:29;;;13150:4102;;;;16353:29;;;;;;13150:4102;;;;;;;;;16147:146;13150:4102;;;16178:7;13150:4102;;;;;;16178:55;;;;;13150:4102;16178:55;;15529:10;16178:55;;;13150:4102;16219:4;13150:4102;;;;;;;;16178:55;;;;;;;;16147:146;16248:23;;;;:33;13150:4102;;;16248:33;:::i;:::-;13150:4102;;16147:146;;16178:55;;;;;;;;;;;;;:::i;:::-;;;;;;13150:4102;;;;;;;;;16006:131;16094:31;:21;;;13150:4102;;;16094:31;:::i;:::-;13150:4102;;16006:131;;13150:4102;;;;;;;;;;;;;;;;;;;;;;;;15652:3;13150:4102;;;15690:46;;15529:10;15690:46;;;13150:4102;;;;;;;;;15529:10;;13150:4102;;;;;;15690:46;;;;;;;;;;;;;;15652:3;13150:4102;;;;15755:35;;;;;;13150:4102;15755:35;;;;;;;;;;;;;;;;;15652:3;15751:121;;;;15652:3;;;;;:::i;:::-;15625:13;;15751:121;13150:4102;;;;;15821:35;13150:4102;15821:35;;;;;13150:4102;15821:35;;;;;;;;;;;;;;;;15751:121;15811:45;;;15652:3;15811:45;;:::i;:::-;15751:121;;;;15821:35;;;;;;;;;;;;;;;;:::i;:::-;;;13150:4102;;;;;15652:3;15821:35;;;;;;;;13150:4102;;;;;;;;;15755:35;;;;;;-1:-1:-1;15755:35:0;;;;;;:::i;:::-;;;;;;-1:-1:-1;13150:4102:0;;;;;;;;;15690:46;;;;;;;;;;;;;;;;:::i;:::-;;;13150:4102;;;;;15690:46;;;;;;;;13150:4102;;;;;;;;;;;;;;;;;;;;;;;;15507:33;;;;;;;;;;;;;;;;;:::i;:::-;;;13150:4102;;;;;15507:33;;;;;;;;;;13150:4102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://1d77273bc5f9ff293535dfb01fa5ce21937e8b48390aaed1a86a93223864b27d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.