Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 29 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Upload Traits | 13783553 | 958 days ago | IN | 0 ETH | 0.02323577 | ||||
Upload Traits | 13781397 | 958 days ago | IN | 0 ETH | 0.06061566 | ||||
Upload Traits | 13781391 | 958 days ago | IN | 0 ETH | 0.05039213 | ||||
Upload Traits | 13781388 | 958 days ago | IN | 0 ETH | 0.05957306 | ||||
Upload Traits | 13781388 | 958 days ago | IN | 0 ETH | 0.05958998 | ||||
Upload Traits | 13781384 | 958 days ago | IN | 0 ETH | 0.08375545 | ||||
Upload Traits | 13781378 | 958 days ago | IN | 0 ETH | 0.09507426 | ||||
Upload Traits | 13781375 | 958 days ago | IN | 0 ETH | 0.10871914 | ||||
Upload Traits | 13781370 | 958 days ago | IN | 0 ETH | 0.09914223 | ||||
Upload Traits | 13781368 | 958 days ago | IN | 0 ETH | 0.07725032 | ||||
Upload Traits | 13781363 | 958 days ago | IN | 0 ETH | 0.07665177 | ||||
Upload Traits | 13781363 | 958 days ago | IN | 0 ETH | 0.0653547 | ||||
Upload Traits | 13781139 | 958 days ago | IN | 0 ETH | 0.10825173 | ||||
Upload Traits | 13781139 | 958 days ago | IN | 0 ETH | 0.09043403 | ||||
Upload Traits | 13781138 | 958 days ago | IN | 0 ETH | 0.09265262 | ||||
Upload Traits | 13781138 | 958 days ago | IN | 0 ETH | 0.11268999 | ||||
Upload Traits | 13781138 | 958 days ago | IN | 0 ETH | 0.08602063 | ||||
Upload Traits | 13781138 | 958 days ago | IN | 0 ETH | 0.14838798 | ||||
Upload Traits | 13781138 | 958 days ago | IN | 0 ETH | 0.14830191 | ||||
Upload Traits | 13781138 | 958 days ago | IN | 0 ETH | 0.15058171 | ||||
Upload Traits | 13781138 | 958 days ago | IN | 0 ETH | 0.14831134 | ||||
Upload Traits | 13781138 | 958 days ago | IN | 0 ETH | 0.10823994 | ||||
Upload Traits | 13781138 | 958 days ago | IN | 0 ETH | 0.09486994 | ||||
Upload Traits | 13781138 | 958 days ago | IN | 0 ETH | 0.10597075 | ||||
Upload Traits | 13781138 | 958 days ago | IN | 0 ETH | 0.10377466 |
Loading...
Loading
Contract Name:
Traits
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// 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; } } pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _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); } } pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } pragma solidity ^0.8.0; interface ITraits { function tokenURI(uint256 tokenId) external view returns (string memory); } pragma solidity ^0.8.0; interface IGoat { // struct to store each token's traits struct GoatTortoise { bool isTortoise; uint8 fur; uint8 skin; uint8 ears; uint8 eyes; uint8 shell; uint8 face; uint8 neck; uint8 feet; uint8 accessory; uint8 fertilityIndex; } function getPaidTokens() external view returns (uint256); function getTokenTraits(uint256 tokenId) external view returns (GoatTortoise memory); } pragma solidity ^0.8.0; contract Traits is Ownable, ITraits { using Strings for uint256; // struct to store each trait's data for metadata and rendering struct Trait { string name; string png; } // mapping from trait type (index) to its name string[10] _traitTypes = [ "Fur", // 0 "Skin", // 1 "Ears", // 2 "Eyes", // 3 "Shell", // 4 "Face", // 5 "Neck", // 6 "Feet", // 7 "Fertility", // 8 "Accessory" // 9 ]; // storage of each traits name and base64 PNG data mapping(uint8 => mapping(uint8 => Trait)) public traitData; // mapping from fertilityIndex to its score string[4] _fertilities = [ "4", "3", "2", "1" ]; IGoat public goat; constructor() {} /** ADMIN */ function setGoat(address _goat) external onlyOwner { goat = IGoat(_goat); } /** * administrative to upload the names and images associated with each trait * @param traitType the trait type to upload the traits for (see traitTypes for a mapping) * @param traits the names and base64 encoded PNGs for each trait */ function uploadTraits(uint8 traitType, uint8[] calldata traitIds, Trait[] calldata traits) external onlyOwner { require(traitIds.length == traits.length, "Mismatched inputs"); for (uint i = 0; i < traits.length; i++) { traitData[traitType][traitIds[i]] = Trait( traits[i].name, traits[i].png ); } } /** RENDER */ /** * generates an <image> element using base64 encoded PNGs * @param trait the trait storing the PNG data * @return the <image> element */ function drawTrait(Trait memory trait) internal pure returns (string memory) { return string(abi.encodePacked( '<image x="4" y="4" width="32" height="32" image-rendering="pixelated" preserveAspectRatio="xMidYMid" xlink:href="data:image/png;base64,', trait.png, '"/>' )); } /** * generates an entire SVG by composing multiple <image> elements of PNGs * @param tokenId the ID of the token to generate an SVG for * @return a valid SVG of the Tortoise / Goat */ function drawSVG(uint256 tokenId) public view returns (string memory) { IGoat.GoatTortoise memory s = goat.getTokenTraits(tokenId); string memory svgString = string(abi.encodePacked( s.isTortoise ? drawTrait(traitData[11][s.skin]) : drawTrait(traitData[0][s.fur]), s.isTortoise ? drawTrait(traitData[17][s.feet]) : drawTrait(traitData[2][s.ears]), s.isTortoise ? drawTrait(traitData[14][s.shell]) : drawTrait(traitData[3][s.eyes]), s.isTortoise ? drawTrait(traitData[15][s.face]) : drawTrait(traitData[6][s.neck]), s.isTortoise ? drawTrait(traitData[19][s.accessory]) : drawTrait(traitData[7][s.feet]) )); return string(abi.encodePacked( '<svg id="goat" width="100%" height="100%" version="1.1" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">', svgString, "</svg>" )); } /** * generates an attribute for the attributes array in the ERC721 metadata standard * @param traitType the trait type to reference as the metadata key * @param value the token's trait associated with the key * @return a JSON dictionary for the single attribute */ function attributeForTypeAndValue(string memory traitType, string memory value) internal pure returns (string memory) { return string(abi.encodePacked( '{"trait_type":"', traitType, '","value":"', value, '"}' )); } /** * generates an array composed of all the individual traits and values * @param tokenId the ID of the token to compose the metadata for * @return a JSON array of all of the attributes for given token ID */ function compileAttributes(uint256 tokenId) public view returns (string memory) { IGoat.GoatTortoise memory s = goat.getTokenTraits(tokenId); string memory traits; if (s.isTortoise) { traits = string(abi.encodePacked( attributeForTypeAndValue(_traitTypes[1], traitData[11][s.skin].name),',', attributeForTypeAndValue(_traitTypes[7], traitData[17][s.feet].name),',', attributeForTypeAndValue(_traitTypes[4], traitData[14][s.shell].name),',', attributeForTypeAndValue(_traitTypes[5], traitData[15][s.face].name),',', attributeForTypeAndValue(_traitTypes[9], traitData[19][s.accessory].name),',', attributeForTypeAndValue("Fertility Score", _fertilities[s.fertilityIndex]),',' )); } else { traits = string(abi.encodePacked( attributeForTypeAndValue(_traitTypes[0], traitData[0][s.fur].name),',', attributeForTypeAndValue(_traitTypes[2], traitData[2][s.ears].name),',', attributeForTypeAndValue(_traitTypes[3], traitData[3][s.eyes].name),',', attributeForTypeAndValue(_traitTypes[6], traitData[6][s.neck].name),',', attributeForTypeAndValue(_traitTypes[7], traitData[7][s.feet].name),',', attributeForTypeAndValue("Impact Score", _fertilities[s.fertilityIndex]),',' )); } return string(abi.encodePacked( '[', traits, '{"trait_type":"Generation","value":', tokenId <= goat.getPaidTokens() ? '"Gen 0"' : '"Gen 1"', '},{"trait_type":"Type","value":', s.isTortoise ? '"Tortoise"' : '"Goat"', '}]' )); } /** * generates a base64 encoded metadata response without referencing off-chain content * @param tokenId the ID of the token to generate the metadata for * @return a base64 encoded JSON dictionary of the token's metadata and SVG */ function tokenURI(uint256 tokenId) public view override returns (string memory) { IGoat.GoatTortoise memory s = goat.getTokenTraits(tokenId); string memory metadata = string(abi.encodePacked( '{"name": "', s.isTortoise ? 'Tortoise #' : 'Goat #', tokenId.toString(), '", "description": "Thousands of Tortoise and Goats compete on a farm in the metaverse. A tempting prize of $EGG awaits, with deadly high stakes. All the metadata and images are generated and stored 100% on-chain. No IPFS. NO API. Just the Ethereum blockchain.", "image": "data:image/svg+xml;base64,', base64(bytes(drawSVG(tokenId))), '", "attributes":', compileAttributes(tokenId), "}" )); return string(abi.encodePacked( "data:application/json;base64,", base64(bytes(metadata)) )); } /** BASE 64 - Written by Brech Devos */ string internal constant TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; function base64(bytes memory data) internal pure returns (string memory) { if (data.length == 0) return ''; // load the table into memory string memory table = TABLE; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((data.length + 2) / 3); // add some extra buffer at the end required for the writing string memory result = new string(encodedLen + 32); assembly { // set the actual output length mstore(result, encodedLen) // prepare the lookup table let tablePtr := add(table, 1) // input ptr let dataPtr := data let endPtr := add(dataPtr, mload(data)) // result ptr, jump over length let resultPtr := add(result, 32) // run over the input, 3 bytes at a time for {} lt(dataPtr, endPtr) {} { dataPtr := add(dataPtr, 3) // read 3 bytes let input := mload(dataPtr) // write 4 characters mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr(18, input), 0x3F))))) resultPtr := add(resultPtr, 1) mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr(12, input), 0x3F))))) resultPtr := add(resultPtr, 1) mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr( 6, input), 0x3F))))) resultPtr := add(resultPtr, 1) mstore(resultPtr, shl(248, mload(add(tablePtr, and( input, 0x3F))))) resultPtr := add(resultPtr, 1) } // padding with '=' switch mod(mload(data), 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } } return result; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"compileAttributes","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"drawSVG","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goat","outputs":[{"internalType":"contract IGoat","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_goat","type":"address"}],"name":"setGoat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"name":"traitData","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"png","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"traitType","type":"uint8"},{"internalType":"uint8[]","name":"traitIds","type":"uint8[]"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"png","type":"string"}],"internalType":"struct Traits.Trait[]","name":"traits","type":"tuple[]"}],"name":"uploadTraits","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60036101c090815262233ab960e91b6101e052608090815260046102008181526329b5b4b760e11b6102205260a052610240818152634561727360e01b6102605260c052610280818152634579657360e01b6102a05260e05260056102c09081526414da195b1b60da1b6102e05261010052610300818152634661636560e01b6103205261012052610340818152634e65636b60e01b6103605261014052610380908152631199595d60e21b6103a0526101605260096103c08181526846657274696c69747960b81b6103e05261018052610440604052610400908152684163636573736f727960b81b610420526101a0526200010190600190600a620001f3565b506040805160c081018252600160808201818152600d60fa1b60a0840152825282518084018452818152603360f81b6020828101919091528084019190915283518085018552828152601960f91b81830152838501528351808501909452908352603160f81b9083015260608101919091526200018390600c9060046200024a565b503480156200019157600080fd5b506200019d33620001a3565b620003d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82600a810192821562000238579160200282015b82811115620002385782518051620002279184916020909101906200028f565b509160200191906001019062000207565b50620002469291506200031a565b5090565b826004810192821562000238579160200282015b828111156200023857825180516200027e9184916020909101906200028f565b50916020019190600101906200025e565b8280546200029d9062000394565b90600052602060002090601f016020900481019282620002c157600085556200030c565b82601f10620002dc57805160ff19168380011785556200030c565b828001600101855582156200030c579182015b828111156200030c578251825591602001919060010190620002ef565b50620002469291506200033b565b808211156200024657600062000331828262000352565b506001016200031a565b5b808211156200024657600081556001016200033c565b508054620003609062000394565b6000825580601f1062000371575050565b601f0160209004906000526020600020908101906200039191906200033b565b50565b600181811c90821680620003a957607f821691505b60208210811415620003cb57634e487b7160e01b600052602260045260246000fd5b50919050565b61287780620003e16000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b146101235780639bf2ee3514610134578063c87b56dd14610155578063d93ae3d914610168578063f2fde38b1461017b57600080fd5b8063102c37c6146100a357806331d382a2146100b857806368dba5e5146100e8578063715018a6146101085780637abecb8614610110575b600080fd5b6100b66100b1366004611cc8565b61018e565b005b6010546100cb906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100fb6100f6366004611dd2565b6101e3565b6040516100df9190612589565b6100b6610dc7565b6100fb61011e366004611dd2565b610dfd565b6000546001600160a01b03166100cb565b610147610142366004611ea4565b6113b6565b6040516100df92919061259c565b6100fb610163366004611dd2565b6114ed565b6100b6610176366004611e21565b611625565b6100b6610189366004611cc8565b611811565b6000546001600160a01b031633146101c15760405162461bcd60e51b81526004016101b8906125ca565b60405180910390fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6010546040516394e5684760e01b8152600481018390526060916000916001600160a01b03909116906394e56847906024016101606040518083038186803b15801561022e57600080fd5b505afa158015610242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102669190611cf8565b905060608160000151156107c8576103d160018001805461028690612730565b80601f01602080910402602001604051908101604052809291908181526020018280546102b290612730565b80156102ff5780601f106102d4576101008083540402835291602001916102ff565b820191906000526020600020905b8154815290600101906020018083116102e257829003601f168201915b5050600b6000818152602091825260408981015160ff1682527fe8056e2ed8943b7f61a5f0dc88c79a5a6cec2bb36a7bd11ce130f2961c6320b990925220805490935061034e92509050612730565b80601f016020809104026020016040519081016040528092919081815260200182805461037a90612730565b80156103c75780601f1061039c576101008083540402835291602001916103c7565b820191906000526020600020905b8154815290600101906020018083116103aa57829003601f168201915b50505050506118ac565b6104b0600160070180546103e490612730565b80601f016020809104026020016040519081016040528092919081815260200182805461041090612730565b801561045d5780601f106104325761010080835404028352916020019161045d565b820191906000526020600020905b81548152906001019060200180831161044057829003601f168201915b505060116000908152600b60209081526101008a015160ff1682527f4850c7fcd76ef9a9b6af49426db50eab97252f2b3eda6fb3fba71ff8796ec45c905260409020805490935061034e92509050612730565b61058e600160040180546104c390612730565b80601f01602080910402602001604051908101604052809291908181526020018280546104ef90612730565b801561053c5780601f106105115761010080835404028352916020019161053c565b820191906000526020600020905b81548152906001019060200180831161051f57829003601f168201915b5050600e6000908152600b602090815260a08b015160ff1682527f7ae97ffc8b2fe6ed730ad82f8c44cc0285c7a97ac189e2d88c56200fe9a501ab905260409020805490935061034e92509050612730565b61066c600160050180546105a190612730565b80601f01602080910402602001604051908101604052809291908181526020018280546105cd90612730565b801561061a5780601f106105ef5761010080835404028352916020019161061a565b820191906000526020600020905b8154815290600101906020018083116105fd57829003601f168201915b5050600f6000908152600b602090815260c08c015160ff1682527faa4a9a284509ef9fb8de5e34389d7f6e999498a23d3df7e6e3cd60371eeb0d08905260409020805490935061034e92509050612730565b61074b6001600901805461067f90612730565b80601f01602080910402602001604051908101604052809291908181526020018280546106ab90612730565b80156106f85780601f106106cd576101008083540402835291602001916106f8565b820191906000526020600020905b8154815290600101906020018083116106db57829003601f168201915b505060136000908152600b60209081526101208d015160ff1682527fb9afdb88392d364081f976ddee080ff9152db8f126d75c504961a2cbe6e4d6e7905260409020805490935061034e92509050612730565b61079d6040518060400160405280600f81526020016e46657274696c6974792053636f726560881b815250600c89610140015160ff1660048110610791576107916127c6565b01805461034e90612730565b6040516020016107b296959493929190611f90565b6040516020818303038152906040529050610c86565b6108a3600160000180546107db90612730565b80601f016020809104026020016040519081016040528092919081815260200182805461080790612730565b80156108545780601f1061082957610100808354040283529160200191610854565b820191906000526020600020905b81548152906001019060200180831161083757829003601f168201915b50506000808052600b60209081528881015160ff1682527fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f76905260409020805490935061034e92509050612730565b610981600160020180546108b690612730565b80601f01602080910402602001604051908101604052809291908181526020018280546108e290612730565b801561092f5780601f106109045761010080835404028352916020019161092f565b820191906000526020600020905b81548152906001019060200180831161091257829003601f168201915b505060026000908152600b602090815260608a015160ff1682527fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba91634905260409020805490935061034e92509050612730565b610a5f6001600301805461099490612730565b80601f01602080910402602001604051908101604052809291908181526020018280546109c090612730565b8015610a0d5780601f106109e257610100808354040283529160200191610a0d565b820191906000526020600020905b8154815290600101906020018083116109f057829003601f168201915b505060036000908152600b602090815260808b015160ff1682527f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d33e905260409020805490935061034e92509050612730565b610b3d60016006018054610a7290612730565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9e90612730565b8015610aeb5780601f10610ac057610100808354040283529160200191610aeb565b820191906000526020600020905b815481529060010190602001808311610ace57829003601f168201915b505060066000908152600b602090815260e08c015160ff1682527f0387e9d1203691d8e3362a7e4c6723de358a4010d7f31ecbec3fbfc61d1c75fc905260409020805490935061034e92509050612730565b610c1c60016007018054610b5090612730565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7c90612730565b8015610bc95780601f10610b9e57610100808354040283529160200191610bc9565b820191906000526020600020905b815481529060010190602001808311610bac57829003601f168201915b505060076000908152600b60209081526101008d015160ff1682527ff5559028dc9ba50d75343c779b2f75e13a84a14662932fc67a486f263ca31a96905260409020805490935061034e92509050612730565b610c5f6040518060400160405280600c81526020016b496d706163742053636f726560a01b815250600c89610140015160ff1660048110610791576107916127c6565b604051602001610c7496959493929190611f90565b60405160208183030381529060405290505b60105460408051630803163f60e31b8152905183926001600160a01b031691634018b1f8916004808301926020929190829003018186803b158015610cca57600080fd5b505afa158015610cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d029190611deb565b851115610d2e57604051806040016040528060078152602001661123b2b710189160c91b815250610d4f565b604051806040016040528060078152602001661123b2b710181160c91b8152505b8351610d7957604051806040016040528060068152602001651123b7b0ba1160d11b815250610d9d565b6040518060400160405280600a815260200169112a37b93a37b4b9b29160b11b8152505b604051602001610daf9392919061219a565b60405160208183030381529060405292505050919050565b6000546001600160a01b03163314610df15760405162461bcd60e51b81526004016101b8906125ca565b610dfb60006118d8565b565b6010546040516394e5684760e01b8152600481018390526060916000916001600160a01b03909116906394e56847906024016101606040518083038186803b158015610e4857600080fd5b505afa158015610e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e809190611cf8565b905060008160000151611006576000808052600b60209081528381015160ff1682527fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f7690526040908190208151808301909252805461100192919082908290610ee890612730565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1490612730565b8015610f615780601f10610f3657610100808354040283529160200191610f61565b820191906000526020600020905b815481529060010190602001808311610f4457829003601f168201915b50505050508152602001600182018054610f7a90612730565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa690612730565b8015610ff35780601f10610fc857610100808354040283529160200191610ff3565b820191906000526020600020905b815481529060010190602001808311610fd657829003601f168201915b505050505081525050611928565b611061565b600b6000818152602091825260408481015160ff1682527fe8056e2ed8943b7f61a5f0dc88c79a5a6cec2bb36a7bd11ce130f2961c6320b99092528190208151808301909252805461106192919082908290610ee890612730565b82516110ca5760026000908152600b6020908152606085015160ff1682527fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba916349052604090819020815180830190925280546110c592919082908290610ee890612730565b611129565b60116000908152600b602090815261010085015160ff1682527f4850c7fcd76ef9a9b6af49426db50eab97252f2b3eda6fb3fba71ff8796ec45c90526040908190208151808301909252805461112992919082908290610ee890612730565b83516111925760036000908152600b6020908152608086015160ff1682527f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d33e90526040908190208151808301909252805461118d92919082908290610ee890612730565b6111f0565b600e6000908152600b602090815260a086015160ff1682527f7ae97ffc8b2fe6ed730ad82f8c44cc0285c7a97ac189e2d88c56200fe9a501ab9052604090819020815180830190925280546111f092919082908290610ee890612730565b84516112595760066000908152600b602090815260e087015160ff1682527f0387e9d1203691d8e3362a7e4c6723de358a4010d7f31ecbec3fbfc61d1c75fc90526040908190208151808301909252805461125492919082908290610ee890612730565b6112b7565b600f6000908152600b602090815260c087015160ff1682527faa4a9a284509ef9fb8de5e34389d7f6e999498a23d3df7e6e3cd60371eeb0d089052604090819020815180830190925280546112b792919082908290610ee890612730565b85516113215760076000908152600b602090815261010088015160ff1682527ff5559028dc9ba50d75343c779b2f75e13a84a14662932fc67a486f263ca31a9690526040908190208151808301909252805461131c92919082908290610ee890612730565b611380565b60136000908152600b602090815261012088015160ff1682527fb9afdb88392d364081f976ddee080ff9152db8f126d75c504961a2cbe6e4d6e790526040908190208151808301909252805461138092919082908290610ee890612730565b604051602001611394959493929190611f25565b604051602081830303815290604052905080604051602001610daf919061249c565b600b6020908152600092835260408084209091529082529020805481906113dc90612730565b80601f016020809104026020016040519081016040528092919081815260200182805461140890612730565b80156114555780601f1061142a57610100808354040283529160200191611455565b820191906000526020600020905b81548152906001019060200180831161143857829003601f168201915b50505050509080600101805461146a90612730565b80601f016020809104026020016040519081016040528092919081815260200182805461149690612730565b80156114e35780601f106114b8576101008083540402835291602001916114e3565b820191906000526020600020905b8154815290600101906020018083116114c657829003601f168201915b5050505050905082565b6010546040516394e5684760e01b8152600481018390526060916000916001600160a01b03909116906394e56847906024016101606040518083038186803b15801561153857600080fd5b505afa15801561154c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115709190611cf8565b9050600081600001516115a15760405180604001604052806006815260200165476f6174202360d01b8152506115c5565b6040518060400160405280600a815260200169546f72746f697365202360b01b8152505b6115ce85611955565b6115df6115da87610dfd565b611a5b565b6115e8876101e3565b6040516020016115fb9493929190612259565b604051602081830303815290604052905061161581611a5b565b604051602001610daf9190612457565b6000546001600160a01b0316331461164f5760405162461bcd60e51b81526004016101b8906125ca565b8281146116925760405162461bcd60e51b81526020600482015260116024820152704d69736d61746368656420696e7075747360781b60448201526064016101b8565b60005b818110156118095760405180604001604052808484848181106116ba576116ba6127c6565b90506020028101906116cc9190612646565b6116d690806125ff565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001848484818110611722576117226127c6565b90506020028101906117349190612646565b6117429060208101906125ff565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093909452505060ff89168152600b60205260408120915087878581811061179b5761179b6127c6565b90506020020160208101906117b09190611e04565b60ff1681526020808201929092526040016000208251805191926117d992849290910190611bc3565b5060208281015180516117f29260018501920190611bc3565b5090505080806118019061276b565b915050611695565b505050505050565b6000546001600160a01b0316331461183b5760405162461bcd60e51b81526004016101b8906125ca565b6001600160a01b0381166118a05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b8565b6118a9816118d8565b50565b606082826040516020016118c1929190612129565b604051602081830303815290604052905092915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060816020015160405160200161193f9190612055565b6040516020818303038152906040529050919050565b6060816119795750506040805180820190915260018152600360fc1b602082015290565b8160005b81156119a3578061198d8161276b565b915061199c9050600a836126b6565b915061197d565b60008167ffffffffffffffff8111156119be576119be6127dc565b6040519080825280601f01601f1916602001820160405280156119e8576020820181803683370190505b5090505b8415611a53576119fd6001836126e9565b9150611a0a600a86612786565b611a1590603061269e565b60f81b818381518110611a2a57611a2a6127c6565b60200101906001600160f81b031916908160001a905350611a4c600a866126b6565b94506119ec565b949350505050565b6060815160001415611a7b57505060408051602081019091526000815290565b60006040518060600160405280604081526020016128026040913990506000600384516002611aaa919061269e565b611ab491906126b6565b611abf9060046126ca565b90506000611ace82602061269e565b67ffffffffffffffff811115611ae657611ae66127dc565b6040519080825280601f01601f191660200182016040528015611b10576020820181803683370190505b509050818152600183018586518101602084015b81831015611b7e5760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401611b24565b600389510660018114611b985760028114611ba957611bb5565b613d3d60f01b600119830152611bb5565b603d60f81b6000198301525b509398975050505050505050565b828054611bcf90612730565b90600052602060002090601f016020900481019282611bf15760008555611c37565b82601f10611c0a57805160ff1916838001178555611c37565b82800160010185558215611c37579182015b82811115611c37578251825591602001919060010190611c1c565b50611c43929150611c47565b5090565b5b80821115611c435760008155600101611c48565b60008083601f840112611c6e57600080fd5b50813567ffffffffffffffff811115611c8657600080fd5b6020830191508360208260051b8501011115611ca157600080fd5b9250929050565b80518015158114611cb857600080fd5b919050565b8051611cb8816127f2565b600060208284031215611cda57600080fd5b81356001600160a01b0381168114611cf157600080fd5b9392505050565b60006101608284031215611d0b57600080fd5b611d13612666565b611d1c83611ca8565b8152611d2a60208401611cbd565b6020820152611d3b60408401611cbd565b6040820152611d4c60608401611cbd565b6060820152611d5d60808401611cbd565b6080820152611d6e60a08401611cbd565b60a0820152611d7f60c08401611cbd565b60c0820152611d9060e08401611cbd565b60e0820152610100611da3818501611cbd565b90820152610120611db5848201611cbd565b90820152610140611dc7848201611cbd565b908201529392505050565b600060208284031215611de457600080fd5b5035919050565b600060208284031215611dfd57600080fd5b5051919050565b600060208284031215611e1657600080fd5b8135611cf1816127f2565b600080600080600060608688031215611e3957600080fd5b8535611e44816127f2565b9450602086013567ffffffffffffffff80821115611e6157600080fd5b611e6d89838a01611c5c565b90965094506040880135915080821115611e8657600080fd5b50611e9388828901611c5c565b969995985093965092949392505050565b60008060408385031215611eb757600080fd5b8235611ec2816127f2565b91506020830135611ed2816127f2565b809150509250929050565b60008151808452611ef5816020860160208601612700565b601f01601f19169290920160200192915050565b60008151611f1b818560208601612700565b9290920192915050565b60008651611f37818460208b01612700565b865190830190611f4b818360208b01612700565b8651910190611f5e818360208a01612700565b8551910190611f71818360208901612700565b8451910190611f84818360208801612700565b01979650505050505050565b600087516020611fa38285838d01612700565b8184019150600b60fa1b8083528951611fc28160018601858e01612700565b600193019283018190528851611fde8160028601858d01612700565b600293019283018190528751611ffa8160038601858c01612700565b6003930192830181905286516120168160048601858b01612700565b600493019283015284516120308160058501848901612700565b612046600582850101600b60fa1b815260010190565b9b9a5050505050505050505050565b7f3c696d61676520783d22342220793d2234222077696474683d2233322220686581527f696768743d2233322220696d6167652d72656e646572696e673d22706978656c60208201527f6174656422207072657365727665417370656374526174696f3d22784d69645960408201527f4d69642220786c696e6b3a687265663d22646174613a696d6167652f706e673b60608201526618985cd94d8d0b60ca1b60808201526000825161210f816087850160208701612700565b6211179f60e91b6087939091019283015250608a01919050565b6e3d913a3930b4ba2fba3cb832911d1160891b8152825160009061215481600f850160208801612700565b6a1116113b30b63ab2911d1160a91b600f91840191820152835161217f81601a840160208801612700565b61227d60f01b601a9290910191820152601c01949350505050565b605b60f81b8152600084516121b6816001850160208901612700565b7f7b2274726169745f74797065223a2247656e65726174696f6e222c2276616c756001918401918201526232911d60e91b602182015284516121ff816024840160208901612700565b7f7d2c7b2274726169745f74797065223a2254797065222c2276616c7565223a0060249290910191820152835161223d816043840160208801612700565b617d5d60f01b6043929091019182015260450195945050505050565b693d913730b6b2911d101160b11b8152845160009061227f81600a850160208a01612700565b85519083019061229681600a840160208a01612700565b7f222c20226465736372697074696f6e223a202254686f7573616e6473206f6620600a92909101918201527f546f72746f69736520616e6420476f61747320636f6d70657465206f6e206120602a8201527f6661726d20696e20746865206d65746176657273652e20412074656d7074696e604a8201527f67207072697a65206f662024454747206177616974732c207769746820646561606a8201527f646c792068696768207374616b65732e20416c6c20746865206d657461646174608a8201527f6120616e6420696d61676573206172652067656e65726174656420616e64207360aa8201527f746f7265642031303025206f6e2d636861696e2e204e6f20495046532e204e4f60ca8201527f204150492e204a7573742074686520457468657265756d20626c6f636b63686160ea8201527f696e2e222c2022696d616765223a2022646174613a696d6167652f7376672b7861010a820152691b5b0ed8985cd94d8d0b60b21b61012a82015261244c61243f61243961241d610134850189611f09565b6f1116101130ba3a3934b13aba32b9911d60811b815260100190565b86611f09565b607d60f81b815260010190565b979650505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161248f81601d850160208701612700565b91909101601d0192915050565b7f3c7376672069643d22676f6174222077696474683d223130302522206865696781527f68743d2231303025222076657273696f6e3d22312e31222076696577426f783d60208201527f223020302034302034302220786d6c6e733d22687474703a2f2f7777772e773360408201527f2e6f72672f323030302f7376672220786d6c6e733a786c696e6b3d226874747060608201527f3a2f2f7777772e77332e6f72672f313939392f786c696e6b223e00000000000060808201526000825161256c81609a850160208701612700565b651e17b9bb339f60d11b609a93909101928301525060a001919050565b602081526000611cf16020830184611edd565b6040815260006125af6040830185611edd565b82810360208401526125c18185611edd565b95945050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000808335601e1984360301811261261657600080fd5b83018035915067ffffffffffffffff82111561263157600080fd5b602001915036819003821315611ca157600080fd5b60008235603e1983360301811261265c57600080fd5b9190910192915050565b604051610160810167ffffffffffffffff8111828210171561269857634e487b7160e01b600052604160045260246000fd5b60405290565b600082198211156126b1576126b161279a565b500190565b6000826126c5576126c56127b0565b500490565b60008160001904831182151516156126e4576126e461279a565b500290565b6000828210156126fb576126fb61279a565b500390565b60005b8381101561271b578181015183820152602001612703565b8381111561272a576000848401525b50505050565b600181811c9082168061274457607f821691505b6020821081141561276557634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561277f5761277f61279a565b5060010190565b600082612795576127956127b0565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60ff811681146118a957600080fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220c1bd3b0952cef72d2df2758544b3a4500710719c5be6aa60e06fd1babbde057964736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b146101235780639bf2ee3514610134578063c87b56dd14610155578063d93ae3d914610168578063f2fde38b1461017b57600080fd5b8063102c37c6146100a357806331d382a2146100b857806368dba5e5146100e8578063715018a6146101085780637abecb8614610110575b600080fd5b6100b66100b1366004611cc8565b61018e565b005b6010546100cb906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100fb6100f6366004611dd2565b6101e3565b6040516100df9190612589565b6100b6610dc7565b6100fb61011e366004611dd2565b610dfd565b6000546001600160a01b03166100cb565b610147610142366004611ea4565b6113b6565b6040516100df92919061259c565b6100fb610163366004611dd2565b6114ed565b6100b6610176366004611e21565b611625565b6100b6610189366004611cc8565b611811565b6000546001600160a01b031633146101c15760405162461bcd60e51b81526004016101b8906125ca565b60405180910390fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6010546040516394e5684760e01b8152600481018390526060916000916001600160a01b03909116906394e56847906024016101606040518083038186803b15801561022e57600080fd5b505afa158015610242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102669190611cf8565b905060608160000151156107c8576103d160018001805461028690612730565b80601f01602080910402602001604051908101604052809291908181526020018280546102b290612730565b80156102ff5780601f106102d4576101008083540402835291602001916102ff565b820191906000526020600020905b8154815290600101906020018083116102e257829003601f168201915b5050600b6000818152602091825260408981015160ff1682527fe8056e2ed8943b7f61a5f0dc88c79a5a6cec2bb36a7bd11ce130f2961c6320b990925220805490935061034e92509050612730565b80601f016020809104026020016040519081016040528092919081815260200182805461037a90612730565b80156103c75780601f1061039c576101008083540402835291602001916103c7565b820191906000526020600020905b8154815290600101906020018083116103aa57829003601f168201915b50505050506118ac565b6104b0600160070180546103e490612730565b80601f016020809104026020016040519081016040528092919081815260200182805461041090612730565b801561045d5780601f106104325761010080835404028352916020019161045d565b820191906000526020600020905b81548152906001019060200180831161044057829003601f168201915b505060116000908152600b60209081526101008a015160ff1682527f4850c7fcd76ef9a9b6af49426db50eab97252f2b3eda6fb3fba71ff8796ec45c905260409020805490935061034e92509050612730565b61058e600160040180546104c390612730565b80601f01602080910402602001604051908101604052809291908181526020018280546104ef90612730565b801561053c5780601f106105115761010080835404028352916020019161053c565b820191906000526020600020905b81548152906001019060200180831161051f57829003601f168201915b5050600e6000908152600b602090815260a08b015160ff1682527f7ae97ffc8b2fe6ed730ad82f8c44cc0285c7a97ac189e2d88c56200fe9a501ab905260409020805490935061034e92509050612730565b61066c600160050180546105a190612730565b80601f01602080910402602001604051908101604052809291908181526020018280546105cd90612730565b801561061a5780601f106105ef5761010080835404028352916020019161061a565b820191906000526020600020905b8154815290600101906020018083116105fd57829003601f168201915b5050600f6000908152600b602090815260c08c015160ff1682527faa4a9a284509ef9fb8de5e34389d7f6e999498a23d3df7e6e3cd60371eeb0d08905260409020805490935061034e92509050612730565b61074b6001600901805461067f90612730565b80601f01602080910402602001604051908101604052809291908181526020018280546106ab90612730565b80156106f85780601f106106cd576101008083540402835291602001916106f8565b820191906000526020600020905b8154815290600101906020018083116106db57829003601f168201915b505060136000908152600b60209081526101208d015160ff1682527fb9afdb88392d364081f976ddee080ff9152db8f126d75c504961a2cbe6e4d6e7905260409020805490935061034e92509050612730565b61079d6040518060400160405280600f81526020016e46657274696c6974792053636f726560881b815250600c89610140015160ff1660048110610791576107916127c6565b01805461034e90612730565b6040516020016107b296959493929190611f90565b6040516020818303038152906040529050610c86565b6108a3600160000180546107db90612730565b80601f016020809104026020016040519081016040528092919081815260200182805461080790612730565b80156108545780601f1061082957610100808354040283529160200191610854565b820191906000526020600020905b81548152906001019060200180831161083757829003601f168201915b50506000808052600b60209081528881015160ff1682527fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f76905260409020805490935061034e92509050612730565b610981600160020180546108b690612730565b80601f01602080910402602001604051908101604052809291908181526020018280546108e290612730565b801561092f5780601f106109045761010080835404028352916020019161092f565b820191906000526020600020905b81548152906001019060200180831161091257829003601f168201915b505060026000908152600b602090815260608a015160ff1682527fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba91634905260409020805490935061034e92509050612730565b610a5f6001600301805461099490612730565b80601f01602080910402602001604051908101604052809291908181526020018280546109c090612730565b8015610a0d5780601f106109e257610100808354040283529160200191610a0d565b820191906000526020600020905b8154815290600101906020018083116109f057829003601f168201915b505060036000908152600b602090815260808b015160ff1682527f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d33e905260409020805490935061034e92509050612730565b610b3d60016006018054610a7290612730565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9e90612730565b8015610aeb5780601f10610ac057610100808354040283529160200191610aeb565b820191906000526020600020905b815481529060010190602001808311610ace57829003601f168201915b505060066000908152600b602090815260e08c015160ff1682527f0387e9d1203691d8e3362a7e4c6723de358a4010d7f31ecbec3fbfc61d1c75fc905260409020805490935061034e92509050612730565b610c1c60016007018054610b5090612730565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7c90612730565b8015610bc95780601f10610b9e57610100808354040283529160200191610bc9565b820191906000526020600020905b815481529060010190602001808311610bac57829003601f168201915b505060076000908152600b60209081526101008d015160ff1682527ff5559028dc9ba50d75343c779b2f75e13a84a14662932fc67a486f263ca31a96905260409020805490935061034e92509050612730565b610c5f6040518060400160405280600c81526020016b496d706163742053636f726560a01b815250600c89610140015160ff1660048110610791576107916127c6565b604051602001610c7496959493929190611f90565b60405160208183030381529060405290505b60105460408051630803163f60e31b8152905183926001600160a01b031691634018b1f8916004808301926020929190829003018186803b158015610cca57600080fd5b505afa158015610cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d029190611deb565b851115610d2e57604051806040016040528060078152602001661123b2b710189160c91b815250610d4f565b604051806040016040528060078152602001661123b2b710181160c91b8152505b8351610d7957604051806040016040528060068152602001651123b7b0ba1160d11b815250610d9d565b6040518060400160405280600a815260200169112a37b93a37b4b9b29160b11b8152505b604051602001610daf9392919061219a565b60405160208183030381529060405292505050919050565b6000546001600160a01b03163314610df15760405162461bcd60e51b81526004016101b8906125ca565b610dfb60006118d8565b565b6010546040516394e5684760e01b8152600481018390526060916000916001600160a01b03909116906394e56847906024016101606040518083038186803b158015610e4857600080fd5b505afa158015610e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e809190611cf8565b905060008160000151611006576000808052600b60209081528381015160ff1682527fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f7690526040908190208151808301909252805461100192919082908290610ee890612730565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1490612730565b8015610f615780601f10610f3657610100808354040283529160200191610f61565b820191906000526020600020905b815481529060010190602001808311610f4457829003601f168201915b50505050508152602001600182018054610f7a90612730565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa690612730565b8015610ff35780601f10610fc857610100808354040283529160200191610ff3565b820191906000526020600020905b815481529060010190602001808311610fd657829003601f168201915b505050505081525050611928565b611061565b600b6000818152602091825260408481015160ff1682527fe8056e2ed8943b7f61a5f0dc88c79a5a6cec2bb36a7bd11ce130f2961c6320b99092528190208151808301909252805461106192919082908290610ee890612730565b82516110ca5760026000908152600b6020908152606085015160ff1682527fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba916349052604090819020815180830190925280546110c592919082908290610ee890612730565b611129565b60116000908152600b602090815261010085015160ff1682527f4850c7fcd76ef9a9b6af49426db50eab97252f2b3eda6fb3fba71ff8796ec45c90526040908190208151808301909252805461112992919082908290610ee890612730565b83516111925760036000908152600b6020908152608086015160ff1682527f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d33e90526040908190208151808301909252805461118d92919082908290610ee890612730565b6111f0565b600e6000908152600b602090815260a086015160ff1682527f7ae97ffc8b2fe6ed730ad82f8c44cc0285c7a97ac189e2d88c56200fe9a501ab9052604090819020815180830190925280546111f092919082908290610ee890612730565b84516112595760066000908152600b602090815260e087015160ff1682527f0387e9d1203691d8e3362a7e4c6723de358a4010d7f31ecbec3fbfc61d1c75fc90526040908190208151808301909252805461125492919082908290610ee890612730565b6112b7565b600f6000908152600b602090815260c087015160ff1682527faa4a9a284509ef9fb8de5e34389d7f6e999498a23d3df7e6e3cd60371eeb0d089052604090819020815180830190925280546112b792919082908290610ee890612730565b85516113215760076000908152600b602090815261010088015160ff1682527ff5559028dc9ba50d75343c779b2f75e13a84a14662932fc67a486f263ca31a9690526040908190208151808301909252805461131c92919082908290610ee890612730565b611380565b60136000908152600b602090815261012088015160ff1682527fb9afdb88392d364081f976ddee080ff9152db8f126d75c504961a2cbe6e4d6e790526040908190208151808301909252805461138092919082908290610ee890612730565b604051602001611394959493929190611f25565b604051602081830303815290604052905080604051602001610daf919061249c565b600b6020908152600092835260408084209091529082529020805481906113dc90612730565b80601f016020809104026020016040519081016040528092919081815260200182805461140890612730565b80156114555780601f1061142a57610100808354040283529160200191611455565b820191906000526020600020905b81548152906001019060200180831161143857829003601f168201915b50505050509080600101805461146a90612730565b80601f016020809104026020016040519081016040528092919081815260200182805461149690612730565b80156114e35780601f106114b8576101008083540402835291602001916114e3565b820191906000526020600020905b8154815290600101906020018083116114c657829003601f168201915b5050505050905082565b6010546040516394e5684760e01b8152600481018390526060916000916001600160a01b03909116906394e56847906024016101606040518083038186803b15801561153857600080fd5b505afa15801561154c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115709190611cf8565b9050600081600001516115a15760405180604001604052806006815260200165476f6174202360d01b8152506115c5565b6040518060400160405280600a815260200169546f72746f697365202360b01b8152505b6115ce85611955565b6115df6115da87610dfd565b611a5b565b6115e8876101e3565b6040516020016115fb9493929190612259565b604051602081830303815290604052905061161581611a5b565b604051602001610daf9190612457565b6000546001600160a01b0316331461164f5760405162461bcd60e51b81526004016101b8906125ca565b8281146116925760405162461bcd60e51b81526020600482015260116024820152704d69736d61746368656420696e7075747360781b60448201526064016101b8565b60005b818110156118095760405180604001604052808484848181106116ba576116ba6127c6565b90506020028101906116cc9190612646565b6116d690806125ff565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001848484818110611722576117226127c6565b90506020028101906117349190612646565b6117429060208101906125ff565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093909452505060ff89168152600b60205260408120915087878581811061179b5761179b6127c6565b90506020020160208101906117b09190611e04565b60ff1681526020808201929092526040016000208251805191926117d992849290910190611bc3565b5060208281015180516117f29260018501920190611bc3565b5090505080806118019061276b565b915050611695565b505050505050565b6000546001600160a01b0316331461183b5760405162461bcd60e51b81526004016101b8906125ca565b6001600160a01b0381166118a05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101b8565b6118a9816118d8565b50565b606082826040516020016118c1929190612129565b604051602081830303815290604052905092915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060816020015160405160200161193f9190612055565b6040516020818303038152906040529050919050565b6060816119795750506040805180820190915260018152600360fc1b602082015290565b8160005b81156119a3578061198d8161276b565b915061199c9050600a836126b6565b915061197d565b60008167ffffffffffffffff8111156119be576119be6127dc565b6040519080825280601f01601f1916602001820160405280156119e8576020820181803683370190505b5090505b8415611a53576119fd6001836126e9565b9150611a0a600a86612786565b611a1590603061269e565b60f81b818381518110611a2a57611a2a6127c6565b60200101906001600160f81b031916908160001a905350611a4c600a866126b6565b94506119ec565b949350505050565b6060815160001415611a7b57505060408051602081019091526000815290565b60006040518060600160405280604081526020016128026040913990506000600384516002611aaa919061269e565b611ab491906126b6565b611abf9060046126ca565b90506000611ace82602061269e565b67ffffffffffffffff811115611ae657611ae66127dc565b6040519080825280601f01601f191660200182016040528015611b10576020820181803683370190505b509050818152600183018586518101602084015b81831015611b7e5760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401611b24565b600389510660018114611b985760028114611ba957611bb5565b613d3d60f01b600119830152611bb5565b603d60f81b6000198301525b509398975050505050505050565b828054611bcf90612730565b90600052602060002090601f016020900481019282611bf15760008555611c37565b82601f10611c0a57805160ff1916838001178555611c37565b82800160010185558215611c37579182015b82811115611c37578251825591602001919060010190611c1c565b50611c43929150611c47565b5090565b5b80821115611c435760008155600101611c48565b60008083601f840112611c6e57600080fd5b50813567ffffffffffffffff811115611c8657600080fd5b6020830191508360208260051b8501011115611ca157600080fd5b9250929050565b80518015158114611cb857600080fd5b919050565b8051611cb8816127f2565b600060208284031215611cda57600080fd5b81356001600160a01b0381168114611cf157600080fd5b9392505050565b60006101608284031215611d0b57600080fd5b611d13612666565b611d1c83611ca8565b8152611d2a60208401611cbd565b6020820152611d3b60408401611cbd565b6040820152611d4c60608401611cbd565b6060820152611d5d60808401611cbd565b6080820152611d6e60a08401611cbd565b60a0820152611d7f60c08401611cbd565b60c0820152611d9060e08401611cbd565b60e0820152610100611da3818501611cbd565b90820152610120611db5848201611cbd565b90820152610140611dc7848201611cbd565b908201529392505050565b600060208284031215611de457600080fd5b5035919050565b600060208284031215611dfd57600080fd5b5051919050565b600060208284031215611e1657600080fd5b8135611cf1816127f2565b600080600080600060608688031215611e3957600080fd5b8535611e44816127f2565b9450602086013567ffffffffffffffff80821115611e6157600080fd5b611e6d89838a01611c5c565b90965094506040880135915080821115611e8657600080fd5b50611e9388828901611c5c565b969995985093965092949392505050565b60008060408385031215611eb757600080fd5b8235611ec2816127f2565b91506020830135611ed2816127f2565b809150509250929050565b60008151808452611ef5816020860160208601612700565b601f01601f19169290920160200192915050565b60008151611f1b818560208601612700565b9290920192915050565b60008651611f37818460208b01612700565b865190830190611f4b818360208b01612700565b8651910190611f5e818360208a01612700565b8551910190611f71818360208901612700565b8451910190611f84818360208801612700565b01979650505050505050565b600087516020611fa38285838d01612700565b8184019150600b60fa1b8083528951611fc28160018601858e01612700565b600193019283018190528851611fde8160028601858d01612700565b600293019283018190528751611ffa8160038601858c01612700565b6003930192830181905286516120168160048601858b01612700565b600493019283015284516120308160058501848901612700565b612046600582850101600b60fa1b815260010190565b9b9a5050505050505050505050565b7f3c696d61676520783d22342220793d2234222077696474683d2233322220686581527f696768743d2233322220696d6167652d72656e646572696e673d22706978656c60208201527f6174656422207072657365727665417370656374526174696f3d22784d69645960408201527f4d69642220786c696e6b3a687265663d22646174613a696d6167652f706e673b60608201526618985cd94d8d0b60ca1b60808201526000825161210f816087850160208701612700565b6211179f60e91b6087939091019283015250608a01919050565b6e3d913a3930b4ba2fba3cb832911d1160891b8152825160009061215481600f850160208801612700565b6a1116113b30b63ab2911d1160a91b600f91840191820152835161217f81601a840160208801612700565b61227d60f01b601a9290910191820152601c01949350505050565b605b60f81b8152600084516121b6816001850160208901612700565b7f7b2274726169745f74797065223a2247656e65726174696f6e222c2276616c756001918401918201526232911d60e91b602182015284516121ff816024840160208901612700565b7f7d2c7b2274726169745f74797065223a2254797065222c2276616c7565223a0060249290910191820152835161223d816043840160208801612700565b617d5d60f01b6043929091019182015260450195945050505050565b693d913730b6b2911d101160b11b8152845160009061227f81600a850160208a01612700565b85519083019061229681600a840160208a01612700565b7f222c20226465736372697074696f6e223a202254686f7573616e6473206f6620600a92909101918201527f546f72746f69736520616e6420476f61747320636f6d70657465206f6e206120602a8201527f6661726d20696e20746865206d65746176657273652e20412074656d7074696e604a8201527f67207072697a65206f662024454747206177616974732c207769746820646561606a8201527f646c792068696768207374616b65732e20416c6c20746865206d657461646174608a8201527f6120616e6420696d61676573206172652067656e65726174656420616e64207360aa8201527f746f7265642031303025206f6e2d636861696e2e204e6f20495046532e204e4f60ca8201527f204150492e204a7573742074686520457468657265756d20626c6f636b63686160ea8201527f696e2e222c2022696d616765223a2022646174613a696d6167652f7376672b7861010a820152691b5b0ed8985cd94d8d0b60b21b61012a82015261244c61243f61243961241d610134850189611f09565b6f1116101130ba3a3934b13aba32b9911d60811b815260100190565b86611f09565b607d60f81b815260010190565b979650505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161248f81601d850160208701612700565b91909101601d0192915050565b7f3c7376672069643d22676f6174222077696474683d223130302522206865696781527f68743d2231303025222076657273696f6e3d22312e31222076696577426f783d60208201527f223020302034302034302220786d6c6e733d22687474703a2f2f7777772e773360408201527f2e6f72672f323030302f7376672220786d6c6e733a786c696e6b3d226874747060608201527f3a2f2f7777772e77332e6f72672f313939392f786c696e6b223e00000000000060808201526000825161256c81609a850160208701612700565b651e17b9bb339f60d11b609a93909101928301525060a001919050565b602081526000611cf16020830184611edd565b6040815260006125af6040830185611edd565b82810360208401526125c18185611edd565b95945050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000808335601e1984360301811261261657600080fd5b83018035915067ffffffffffffffff82111561263157600080fd5b602001915036819003821315611ca157600080fd5b60008235603e1983360301811261265c57600080fd5b9190910192915050565b604051610160810167ffffffffffffffff8111828210171561269857634e487b7160e01b600052604160045260246000fd5b60405290565b600082198211156126b1576126b161279a565b500190565b6000826126c5576126c56127b0565b500490565b60008160001904831182151516156126e4576126e461279a565b500290565b6000828210156126fb576126fb61279a565b500390565b60005b8381101561271b578181015183820152602001612703565b8381111561272a576000848401525b50505050565b600181811c9082168061274457607f821691505b6020821081141561276557634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561277f5761277f61279a565b5060010190565b600082612795576127956127b0565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60ff811681146118a957600080fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220c1bd3b0952cef72d2df2758544b3a4500710719c5be6aa60e06fd1babbde057964736f6c63430008070033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.