ERC-721
Overview
Max Total Supply
300 FFACE
Holders
167
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
15 FFACELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
FoldedFaces
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.7; import "./AnonymiceLibrary.sol"; import "./ERC721sm.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol"; contract FoldedFaces is ERC721, Ownable { /* __ __ __ __ __ __ |__ | _| _ _| |__ _ _ _ _) / \ _) _) |(_)|(_|(-(_| |(_|(_(-_) /__ \__/ /__ /__ , __ |_ / _ _ _ | . _ |_ |_ |_)\/ \__)(-| )|__|(_)| )|_ . */ using AnonymiceLibrary for uint8; struct Trait { string traitName; string traitType; } struct HashNeeds { uint16 startHash; uint16 startNonce; } //Mappings mapping(uint256 => Trait[]) public traitTypes; mapping(address => uint256) private lastWrite; //Mint Checks mapping(address => bool) addressWhitelistMinted; mapping(address => bool) contributorMints; uint256 public contributorCount = 0; uint256 public regularCount = 0; //uint256s uint256 public constant MAX_SUPPLY = 533; uint256 public constant WL_MINT_COST = 0.03 ether; uint256 public constant PUBLIC_MINT_COST = 0.05 ether; //public mint start timestamp uint256 public constant PUBLIC_START_TIME = 1653525000; mapping(uint256 => HashNeeds) tokenIdToHashNeeds; uint16 SEED_NONCE = 0; //minting flag bool ogMinted = false; bool public MINTING_LIVE = false; //uint arrays uint16[][8] TIERS; //p5js url string p5jsUrl; string p5jsIntegrity; string imageUrl; string animationUrl; //stillSnowCrash bytes32 constant whitelistRoot = 0x358899790e0e071faed348a1b72ef18efe59029543a4a4da16e13fa2abf2a578; constructor() payable ERC721("FoldedFaces", "FFACE") { //Declare all the rarity tiers //Universe TIERS[0] = [8000, 1000, 1000]; //Border TIERS[1] = [1000, 9000]; //Resolution TIERS[2] = [9800, 200]; //WarpSpeed TIERS[3] = [2250, 2250, 2250, 2250, 1000]; //Folds TIERS[4] = [2500, 2500, 2500, 2500]; //Color TIERS[5] = [1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000]; //TwoFace TIERS[6] = [9000, 1000]; //Water TIERS[7] = [1000, 9000]; } //prevents someone calling read functions the same block they mint modifier disallowIfStateIsChanging() { require( owner() == msg.sender || lastWrite[msg.sender] < block.number, "not so fast!" ); _; } /* __ __ __ __ __ ______ __ __ __ ______ /\ "-./ \ /\ \ /\ "-.\ \ /\__ _\ /\ \ /\ "-.\ \ /\ ___\ \ \ \-./\ \ \ \ \ \ \ \-. \ \/_/\ \/ \ \ \ \ \ \-. \ \ \ \__ \ \ \_\ \ \_\ \ \_\ \ \_\\"\_\ \ \_\ \ \_\ \ \_\\"\_\ \ \_____\ \/_/ \/_/ \/_/ \/_/ \/_/ \/_/ \/_/ \/_/ \/_/ \/_____/ */ /** * @dev Converts a digit from 0 - 10000 into its corresponding rarity based on the given rarity tier. * @param _randinput The input from 0 - 10000 to use for rarity gen. * @param _rarityTier The tier to use. */ function rarityGen(uint256 _randinput, uint8 _rarityTier) internal view returns (uint8) { uint16 currentLowerBound = 0; for (uint8 i = 0; i < TIERS[_rarityTier].length; i++) { uint16 thisPercentage = TIERS[_rarityTier][i]; if ( _randinput >= currentLowerBound && _randinput < currentLowerBound + thisPercentage ) return i; currentLowerBound = currentLowerBound + thisPercentage; } revert(); } /** * @param _a The address to be used within the hash. */ function hash(address _a) internal view returns (uint16) { uint16 _randinput = uint16( uint256( keccak256( abi.encodePacked(block.timestamp, block.difficulty, _a) ) ) % 10000 ); return _randinput; } /** * @dev Mint internal, this is to avoid code duplication. */ function mintInternal() internal { require( MINTING_LIVE == true || msg.sender == owner(), "Minting not live" ); uint256 _totalSupply = totalSupply() - 1; require(_totalSupply < MAX_SUPPLY, "Minted out"); require(!AnonymiceLibrary.isContract(msg.sender), "No Contracts"); require(regularCount < 519, "Minted Out Non Reserved Spots"); uint256 thisTokenId = _totalSupply; tokenIdToHashNeeds[thisTokenId] = HashNeeds( hash(msg.sender), SEED_NONCE ); lastWrite[msg.sender] = block.number; SEED_NONCE += 8; _mint(msg.sender, thisTokenId); } function mintOgBatch(address[] memory _addresses) external payable onlyOwner { require(ogMinted == false); require(_addresses.length == 14); uint16 _nonce = SEED_NONCE; for (uint256 i = 0; i < 14; i++) { uint256 thisTokenId = i; tokenIdToHashNeeds[thisTokenId] = HashNeeds( hash(_addresses[i]), _nonce ); _mint(_addresses[i], thisTokenId); _nonce += 8; } regularCount = 14; SEED_NONCE += 112; ogMinted = true; } /** * @dev Mints new tokens. */ function mintWLFoldedFaces(address account, bytes32[] calldata merkleProof) external payable { bytes32 node = keccak256(abi.encodePacked(account)); require( MerkleProof.verify(merkleProof, whitelistRoot, node), "Not on WL" ); require(account == msg.sender, "Self mint only"); require(msg.value == WL_MINT_COST, "Insufficient ETH sent"); require( addressWhitelistMinted[msg.sender] != true, "Address already minted WL" ); addressWhitelistMinted[msg.sender] = true; ++regularCount; return mintInternal(); } function mintPublicFoldedFaces() external payable { require(msg.value == PUBLIC_MINT_COST, "Insufficient ETH sent"); require(block.timestamp > PUBLIC_START_TIME, "Public mint not started"); ++regularCount; return mintInternal(); } function mintCircolorsContributor() external { require(contributorMints[msg.sender] == true); require(contributorCount < 15); contributorMints[msg.sender] = false; ++contributorCount; return mintInternal(); } /* ______ ______ ______ _____ __ __ __ ______ /\ == \ /\ ___\ /\ __ \ /\ __-. /\ \ /\ "-.\ \ /\ ___\ \ \ __< \ \ __\ \ \ __ \ \ \ \/\ \ \ \ \ \ \ \-. \ \ \ \__ \ \ \_\ \_\ \ \_____\ \ \_\ \_\ \ \____- \ \_\ \ \_\\"\_\ \ \_____\ \/_/ /_/ \/_____/ \/_/\/_/ \/____/ \/_/ \/_/ \/_/ \/_____/ */ function buildHash(uint256 _t) internal view returns (string memory) { // This will generate a 8 character string. string memory currentHash = ""; uint256 rInput = tokenIdToHashNeeds[_t].startHash; uint256 _nonce = tokenIdToHashNeeds[_t].startNonce; for (uint8 i = 0; i < 8; i++) { ++_nonce; uint16 _randinput = uint16( uint256(keccak256(abi.encodePacked(rInput, _t, _nonce))) % 10000 ); currentHash = string( abi.encodePacked( currentHash, rarityGen(_randinput, i).toString() ) ); } return currentHash; } /** * @dev Hash to HTML function */ function hashToHTML(string memory _hash, uint256 _tokenId) external view disallowIfStateIsChanging returns (string memory) { string memory htmlString = string( abi.encodePacked( "data:text/html,%3Chtml%3E%3Chead%3E%3Cscript%20src%3D%22", p5jsUrl, "%22%20integrity%3D%22", p5jsIntegrity, "%22%20crossorigin%3D%22anonymous%22%3E%3C%2Fscript%3E%3C%2Fhead%3E%3Cbody%3E%3Cscript%3Evar%20tokenId%3D", AnonymiceLibrary.toString(_tokenId), "%3Bvar%20hash%3D%22", _hash, "%22%3B" ) ); htmlString = string( abi.encodePacked( htmlString, "function%20setup%28%29%7Bs%3D%5B.45%2C1%5D%2Cc%3D%5B0%2C1%5D%2Cn%3D%5B0%2C1%5D%2Cnnw%3D0%2Cci%3D%5B0%2C1%5D%2Cnv%3D%5B%5B.001%2C.0025%5D%2C%5B.0025%2C.01%5D%2C%5B.01%2C.0025%5D%2C%5B.0025%2C.001%5D%2C%5B.001%2C.001%5D%5D%2Cov%3D%5B%5B4500%2C5500%2C6500%2C8e3%5D%2C%5B750%2C950%2C1150%2C1250%5D%2C%5B750%2C950%2C1150%2C1250%5D%2C%5B4500%2C5500%2C6500%2C8e3%5D%2C%5B4e3%2C5e3%2C6e3%2C15e3%5D%5D%2Cp%3D%5B%5B%22%2365010c%22%2C%22%23cb1b16%22%2C%22%23ef3c2d%22%2C%22%23f26a4f%22%2C%22%23f29479%22%2C%22%23fedfd4%22%2C%22%239dcee2%22%2C%22%234091c9%22%2C%22%231368aa%22%2C%22%23033270%22%2C%22%23000%22%2C%22%23faebd7%22%5D%2C%5B%22%230f3375%22%2C%22%2313459c%22%2C%22%231557c0%22%2C%22%23196bde%22%2C%22%232382f7%22%2C%22%234b9cf9%22%2C%22%2377b6fb%22%2C%22%23a4cefc%22%2C%22%23cce4fd%22%2C%22%23e8f3fe%22%2C%22%23000%22%2C%22%23faebd7%22%5D%2C%5B%22%230e0e0e%22%2C%22%23f3bc17%22%2C%22%23d54b0c%22%2C%22%23154255%22%2C%22%23dcdcdc%22%2C%22%23c0504f%22%2C%22%2368b9b0%22%2C%22%23ecbe2c%22%2C%22%232763ab%22%2C%22%23ce4241%22%2C%22%23faebd7%22%2C%22%23000%22%5D%2C%5B%22%23ff0000%22%2C%22%23fe1c00%22%2C%22%23fd3900%22%2C%22%23fc5500%22%2C%22%23fb7100%22%2C%22%23fb8e00%22%2C%22%23faaa00%22%2C%22%23f9c600%22%2C%22%23f8e300%22%2C%22%23f7ff00%22%2C%22%23000%22%2C%22%23faebd7%22%5D%2C%5B%22%23004733%22%2C%22%232b6a4d%22%2C%22%23568d66%22%2C%22%23a5c1ae%22%2C%22%23f3f4f6%22%2C%22%23dcdfe5%22%2C%22%23df8080%22%2C%22%23cb0b0a%22%2C%22%23ad080f%22%2C%22%238e0413%22%2C%22%23000%22%2C%22%23faebd7%22%5D%2C%5B%22%231e1619%22%2C%22%233c2831%22%2C%22%235d424e%22%2C%22%238c6677%22%2C%22%23ad7787%22%2C%22%23ac675b%22%2C%22%23c86166%22%2C%22%23f078b3%22%2C%22%23ec8782%22%2C%22%23dfde80%22%2C%22%23faebd7%22%2C%22%23000%22%5D%2C%5B%22%23008080%22%2C%22%23008080%22%2C%22%23178c8c%22%2C%22%23f7ff00%22%2C%22%2346a3a3%22%2C%22%235daeae%22%2C%22%2374baba%22%2C%22%238bc5c5%22%2C%22%23a2d1d1%22%2C%22%23b5dada%22%2C%22%23000%22%2C%22%23faebd7%22%5D%2C%5B%22%23669900%22%2C%22%2399cc33%22%2C%22%23ccee66%22%2C%22%23006699%22%2C%22%233399cc%22%2C%22%23990066%22%2C%22%23cc3399%22%2C%22%23ff6600%22%2C%22%23ff9900%22%2C%22%23ffcc00%22%2C%22%23000%22%2C%22%23faebd7%22%5D%2C%5B%22%23000%22%2C%22%23fff%22%2C%22%23000%22%2C%22%23fff%22%2C%22%23000%22%2C%22%23fff%22%2C%22%23000%22%2C%22%23fff%22%2C%22%23000%22%2C%22%23fff%22%2C%22%23000%22%2C%22%23fff%22%5D%2C%5B%22%232c6e49%22%2C%22%23618565%22%2C%22%23969c81%22%2C%22%23cbb39d%22%2C%22%23e5beab%22%2C%22%23ffc9b9%22%2C%22%23f5ba9c%22%2C%22%23ebab7f%22%2C%22%23e19c62%22%2C%22%23d68c45%22%2C%22%23000%22%2C%22%23faebd7%22%5D%2C%5B%22%2365010c%22%2C%22%23cb1b16%22%2C%22%23ef3c2d%22%2C%22%23f26a4f%22%2C%22%23f29479%22%2C%22%23fedfd4%22%2C%22%239dcee2%22%2C%22%234091c9%22%2C%22%231368aa%22%2C%22%23033270%22%2C%22%23faebd7%22%2C%22%23000%22%5D%5D%2CcreateCanvas%28700%2C950%29%2CnoiseSeed%28tokenId%29%2CnoLoop%28%29%2CnoStroke%28%29%2CrectMode%28CENTER%29%2CcolorMode%28HSL%29%2CpixelDensity%285%29%2Co%3Dnoise%2Cf%3Dfill%2Cb%3DnoFill%2Cq%3Dwidth%2Ca%3Dheight%2Cyy%3DparseInt%28hash.substring%280%2C1%29%29%2Cci%3Dci%5BparseInt%28hash.substring%281%2C2%29%29%5D%2Cw%3Ds%5BparseInt%28hash.substring%282%2C3%29%29%5D%2Cx%3DparseInt%28hash.substring%283%2C4%29%29%2Czz%3DparseInt%28hash.substring%284%2C5%29%29%2Caa%3Dnv%5Bx%5D%5B0%5D%2Cvb%3Dnv%5Bx%5D%5B1%5D%2Cgb%3Dov%5Bx%5D%5Bzz%5D%2Cff%3D%5B1e-5%2Caa%5D%2Cz%3DparseInt%28hash.substring%285%2C6%29%29%2Cz2%3Dz%2B1%2Cg%3DparseInt%28hash.substring%286%2C7%29%29%2B1%2Cnnw%3Dff%5BparseInt%28hash.substring%287%2C8%29%29%5D%7Dfunction%20draw%28%29%7Bbackground%28p%5Bz%5D%5B10%5D%29%2C2%3D%3Dx%7C%7C3%3D%3Dx%3Fnn%3Dnnw%3Ann%3Daa%3Bfor%28let%20e%3D25%3Be%3C%3Dq-25%3Be%2B%3Dw%29for%28let%20c%3D25%3Bc%3C%3Da-25%3Bc%2B%3Dw%29n%3Do%28e%2Ann%2Cc%2Aaa%29%2Cn2%3Do%28e%2Avb%2Cc%2Avb%29%2Cn3%3Do%28%28e%2Bgb%2An%29%2Aaa%2C%28c%2Bgb%2An2%29%2Avb%29%2Cn4%3Do%28%28e%2Bgb%2An3%29%2Aaa%2C%28c%2Bgb%2An3%29%2Avb%29%2Cn5%3Do%28%28e%2Bgb%2An4%29%2Aaa%2C%28c%2Bgb%2An4%29%2Avb%29%2C0%3D%3Dyy%3Fe%3Cq%2Fg%3Fn5%3E.58%3Fb%28%29%3An5%3E.55%3Ff%28p%5Bz%5D%5B0%5D%29%3An5%3E.53%3Ff%28p%5Bz%5D%5B1%5D%29%3An5%3E.5%3Ff%28p%5Bz%5D%5B2%5D%29%3An5%3E.47%3Ff%28p%5Bz%5D%5B3%5D%29%3An5%3E.44%3Fb%28%29%3An5%3E.41%3Ff%28p%5Bz%5D%5B4%5D%29%3An5%3E.38%3Ff%28p%5Bz%5D%5B5%5D%29%3An5%3E.35%3Ff%28p%5Bz%5D%5B6%5D%29%3An5%3E.31%3Ff%28p%5Bz%5D%5B7%5D%29%3An5%3E.28%3Ff%28p%5Bz%5D%5B8%5D%29%3An5%3E.25%3Ff%28p%5Bz%5D%5B9%5D%29%3Ab%28%29%3An5%3E.58%3Fb%28%29%3An5%3E.55%3Ff%28p%5Bz2%5D%5B0%5D%29%3An5%3E.53%3Ff%28p%5Bz2%5D%5B1%5D%29%3An5%3E.5%3Ff%28p%5Bz2%5D%5B2%5D%29%3An5%3E.47%3Ff%28p%5Bz2%5D%5B3%5D%29%3An5%3E.44%3Fb%28%29%3An5%3E.41%3Ff%28p%5Bz2%5D%5B4%5D%29%3An5%3E.38%3Ff%28p%5Bz2%5D%5B5%5D%29%3An5%3E.35%3Ff%28p%5Bz2%5D%5B6%5D%29%3An5%3E.31%3Ff%28p%5Bz2%5D%5B7%5D%29%3An5%3E.28%3Ff%28p%5Bz2%5D%5B8%5D%29%3An5%3E.25%3Ff%28p%5Bz2%5D%5B9%5D%29%3Ab%28%29%3A1%3D%3Dyy%3Fn5%3E.6%3Fb%28%29%3An5%3E.4%3Ff%28p%5Bz%5D%5B3%5D%29%3Ab%28%29%3Af%281e3%2An2%2C100%2An5%2C100%2An5%29%2Crect%28e%2Cc%2Cw%29%3B0%3D%3Dci%26%26%28push%28%29%2Cb%28%29%2Cstroke%28p%5Bz%5D%5B10%5D%29%2CstrokeWeight%281570%29%2Ccircle%28q%2F2%2Ca%2F2%2C2e3%29%2Cpop%28%29%29%2Cpush%28%29%2CtextSize%283%29%2CtextAlign%28RIGHT%29%2Cf%28p%5Bz%5D%5B11%5D%29%2Ctext%28%22Folded%20Faces.%202022.%22%2Cq-25%2Ca-15%29%2Ctext%28hash%2Cq-25%2Ca-10%29%2Cpop%28%29%7D%3C%2Fscript%3E%3C%2Fbody%3E%3C%2Fhtml%3E" ) ); return htmlString; } function totalSupply() public view returns (uint256) { return regularCount + contributorCount; } /** * @dev Hash to metadata function */ function hashToMetadata(string memory _hash) public view disallowIfStateIsChanging returns (string memory) { string memory metadataString; uint256 metadataLength; if ( AnonymiceLibrary.parseInt( AnonymiceLibrary.substring(_hash, 0, 1) ) == 0 ) { metadataLength = 6; } else { metadataLength = 5; } for (uint8 i = 0; i < metadataLength; i++) { uint8 thisTraitIndex = AnonymiceLibrary.parseInt( AnonymiceLibrary.substring(_hash, i, i + 1) ); metadataString = string( abi.encodePacked( metadataString, '{"trait_type":"', traitTypes[i][thisTraitIndex].traitType, '","value":"', traitTypes[i][thisTraitIndex].traitName, '"}' ) ); if (i != metadataLength - 1) metadataString = string(abi.encodePacked(metadataString, ",")); } return string(abi.encodePacked("[", metadataString, "]")); } /** * @dev Returns the image and metadata for a token Id * @param _tokenId The tokenId to return the image and metadata for. */ function tokenURI(uint256 _tokenId) public view override returns (string memory) { require(_tokenId < totalSupply()); string memory tokenHash = _tokenIdToHash(_tokenId); string memory description = '", "description": "533 FoldedFaces. Traits generated on chain & metadata, images mirrored on chain permanently.",'; string memory encodedTokenId = AnonymiceLibrary.encode( bytes(string(abi.encodePacked(AnonymiceLibrary.toString(_tokenId)))) ); string memory encodedHash = AnonymiceLibrary.encode( bytes(string(abi.encodePacked(tokenHash))) ); return string( abi.encodePacked( "data:application/json;base64,", AnonymiceLibrary.encode( bytes( string( abi.encodePacked( '{"name": "FoldedFaces #', AnonymiceLibrary.toString(_tokenId), description, '"external_url":"', animationUrl, encodedTokenId, "&t=", encodedHash, '","image":"', imageUrl, AnonymiceLibrary.toString(_tokenId), "&t=", tokenHash, '","attributes":', hashToMetadata(tokenHash), "}" ) ) ) ) ) ); } /** * @dev Returns a hash for a given tokenId * @param _tokenId The tokenId to return the hash for. */ function _tokenIdToHash(uint256 _tokenId) public view disallowIfStateIsChanging returns (string memory) { require(_tokenId < totalSupply()); string memory tokenHash = buildHash(_tokenId); return tokenHash; } /* ______ __ __ __ __ ______ ______ /\ __ \ /\ \ _ \ \ /\ "-.\ \ /\ ___\ /\ == \ \ \ \/\ \ \ \ \/ ".\ \ \ \ \-. \ \ \ __\ \ \ __< \ \_____\ \ \__/".~\_\ \ \_\\"\_\ \ \_____\ \ \_\ \_\ \/_____/ \/_/ \/_/ \/_/ \/_/ \/_____/ \/_/ /_/ /** * @dev Add a trait type * @param _traitTypeIndex The trait type index * @param traits Array of traits to add */ function addTraitType(uint256 _traitTypeIndex, Trait[] memory traits) external payable onlyOwner { for (uint256 i = 0; i < traits.length; i++) { traitTypes[_traitTypeIndex].push( Trait(traits[i].traitName, traits[i].traitType) ); } return; } function addContributorMint(address _account) external payable onlyOwner { contributorMints[_account] = true; } function flipMintingSwitch() external payable onlyOwner { MINTING_LIVE = !MINTING_LIVE; } /** * @dev Sets the p5js url * @param _p5jsUrl The address of the p5js file hosted on CDN */ function setJsAddress(string memory _p5jsUrl) external payable onlyOwner { p5jsUrl = _p5jsUrl; } /** * @dev Sets the p5js resource integrity * @param _p5jsIntegrity The hash of the p5js file (to protect w subresource integrity) */ function setJsIntegrity(string memory _p5jsIntegrity) external payable onlyOwner { p5jsIntegrity = _p5jsIntegrity; } /** * @dev Sets the base image url * @param _imageUrl The base url for image field */ function setImageUrl(string memory _imageUrl) external payable onlyOwner { imageUrl = _imageUrl; } function setAnimationUrl(string memory _animationUrl) external payable onlyOwner { animationUrl = _animationUrl; } function withdraw() external payable onlyOwner { uint256 sixtyFive = (address(this).balance / 100) * 65; uint256 fifteen = (address(this).balance / 100) * 15; uint256 five = (address(this).balance / 100) * 5; (bool sentT, ) = payable( address(0xE4260Df86f5261A41D19c2066f1Eb2Eb4F009e84) ).call{value: fifteen}(""); require(sentT, "Failed to send"); (bool sentI, ) = payable( address(0x4533d1F65906368ebfd61259dAee561DF3f3559D) ).call{value: fifteen}(""); require(sentI, "Failed to send"); (bool sentC, ) = payable( address(0x888f8AA938dbb18b28bdD111fa4A0D3B8e10C871) ).call{value: five}(""); require(sentC, "Failed to send"); (bool sentG, ) = payable( address(0xeFEed35D024CF5B59482Fa4BC594AaeAf694E669) ).call{value: sixtyFive}(""); require(sentG, "Failed to send"); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_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 { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } return computedHash; } }
pragma solidity ^0.8.0; library AnonymiceLibrary { string internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; function encode(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; } /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { 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); } function parseInt(string memory _a) internal pure returns (uint8 _parsedInt) { bytes memory bresult = bytes(_a); uint8 mint = 0; for (uint8 i = 0; i < bresult.length; i++) { if ( (uint8(uint8(bresult[i])) >= 48) && (uint8(uint8(bresult[i])) <= 57) ) { mint *= 10; mint += uint8(bresult[i]) - 48; } } return mint; } function substring( string memory str, uint256 startIndex, uint256 endIndex ) internal pure returns (string memory) { bytes memory strBytes = bytes(str); bytes memory result = new bytes(endIndex - startIndex); for (uint256 i = startIndex; i < endIndex; i++) { result[i - startIndex] = strBytes[i]; } return string(result); } function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; /// @notice Modern, minimalist, and gas efficient ERC-721 implementation. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol) abstract contract ERC721 { /*////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer( address indexed from, address indexed to, uint256 indexed id ); event Approval( address indexed owner, address indexed spender, uint256 indexed id ); event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /*////////////////////////////////////////////////////////////// METADATA STORAGE/LOGIC //////////////////////////////////////////////////////////////*/ string public name; string public symbol; function tokenURI(uint256 id) public view virtual returns (string memory); /*////////////////////////////////////////////////////////////// ERC721 BALANCE/OWNER STORAGE //////////////////////////////////////////////////////////////*/ mapping(uint256 => address) internal _ownerOf; mapping(address => uint256) internal _balanceOf; function ownerOf(uint256 id) public view virtual returns (address owner) { require((owner = _ownerOf[id]) != address(0), "NOT_MINTED"); } function balanceOf(address owner) public view virtual returns (uint256) { require(owner != address(0), "ZERO_ADDRESS"); return _balanceOf[owner]; } /*////////////////////////////////////////////////////////////// ERC721 APPROVAL STORAGE //////////////////////////////////////////////////////////////*/ mapping(uint256 => address) public getApproved; mapping(address => mapping(address => bool)) public isApprovedForAll; /*////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor(string memory _name, string memory _symbol) { name = _name; symbol = _symbol; } /*////////////////////////////////////////////////////////////// ERC721 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 id) public virtual { address owner = _ownerOf[id]; require( msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_AUTHORIZED" ); getApproved[id] = spender; emit Approval(owner, spender, id); } function setApprovalForAll(address operator, bool approved) public virtual { isApprovedForAll[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } function transferFrom( address from, address to, uint256 id ) public virtual { require(from == _ownerOf[id], "WRONG_FROM"); require(to != address(0), "INVALID_RECIPIENT"); require( msg.sender == from || isApprovedForAll[from][msg.sender] || msg.sender == getApproved[id], "NOT_AUTHORIZED" ); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. unchecked { _balanceOf[from]--; _balanceOf[to]++; } _ownerOf[id] = to; delete getApproved[id]; emit Transfer(from, to, id); } function safeTransferFrom( address from, address to, uint256 id ) public virtual { transferFrom(from, to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received( msg.sender, from, id, "" ) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } function safeTransferFrom( address from, address to, uint256 id, bytes calldata data ) public virtual { transferFrom(from, to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received( msg.sender, from, id, data ) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } /*////////////////////////////////////////////////////////////// ERC165 LOGIC //////////////////////////////////////////////////////////////*/ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165 interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721 interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata } /*////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 id) internal virtual { require(to != address(0), "INVALID_RECIPIENT"); require(_ownerOf[id] == address(0), "ALREADY_MINTED"); // Counter overflow is incredibly unrealistic. unchecked { _balanceOf[to]++; } _ownerOf[id] = to; emit Transfer(address(0), to, id); } function _burn(uint256 id) internal virtual { address owner = _ownerOf[id]; require(owner != address(0), "NOT_MINTED"); // Ownership check above ensures no underflow. unchecked { _balanceOf[owner]--; } delete _ownerOf[id]; delete getApproved[id]; emit Transfer(owner, address(0), id); } /*////////////////////////////////////////////////////////////// INTERNAL SAFE MINT LOGIC //////////////////////////////////////////////////////////////*/ function _safeMint(address to, uint256 id) internal virtual { _mint(to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received( msg.sender, address(0), id, "" ) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } function _safeMint( address to, uint256 id, bytes memory data ) internal virtual { _mint(to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received( msg.sender, address(0), id, data ) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } } /// @notice A generic interface for a contract which properly accepts ERC721 tokens. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol) abstract contract ERC721TokenReceiver { function onERC721Received( address, address, uint256, bytes calldata ) external virtual returns (bytes4) { return ERC721TokenReceiver.onERC721Received.selector; } }
{ "evmVersion": "london", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 200 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTING_LIVE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_MINT_COST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_START_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WL_MINT_COST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"_tokenIdToHash","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"addContributorMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_traitTypeIndex","type":"uint256"},{"components":[{"internalType":"string","name":"traitName","type":"string"},{"internalType":"string","name":"traitType","type":"string"}],"internalType":"struct FoldedFaces.Trait[]","name":"traits","type":"tuple[]"}],"name":"addTraitType","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contributorCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipMintingSwitch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_hash","type":"string"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"hashToHTML","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_hash","type":"string"}],"name":"hashToMetadata","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintCircolorsContributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"mintOgBatch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPublicFoldedFaces","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"mintWLFoldedFaces","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"regularCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_animationUrl","type":"string"}],"name":"setAnimationUrl","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_imageUrl","type":"string"}],"name":"setImageUrl","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"_p5jsUrl","type":"string"}],"name":"setJsAddress","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"_p5jsIntegrity","type":"string"}],"name":"setJsIntegrity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"traitTypes","outputs":[{"internalType":"string","name":"traitName","type":"string"},{"internalType":"string","name":"traitType","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6000600b818155600c829055600e805463ffffffff1916905560808181526a466f6c646564466163657360a81b60a0908152610100604052600560c090815264464641434560d81b60e052919391926200005b92919062000291565b5080516200007190600190602084019062000291565b5050506200008e620000886200023b60201b60201c565b6200023f565b60408051606081018252611f4081526103e86020820181905291810191909152620000be90600f90600362000320565b50604080518082019091526103e881526123286020820152620000e690601090600262000320565b5060408051808201909152612648815260c860208201526200010d90601190600262000320565b506040805160a0810182526108ca8082526020820181905291810182905260608101919091526103e860808201526200014b90601290600562000320565b50604080516080810182526109c48082526020820181905291810182905260608101919091526200018190601390600462000320565b5060408051610140810182526103e880825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810191909152620001e490601490600a62000320565b506040805180820190915261232881526103e860208201526200020c90601590600262000320565b50604080518082019091526103e8815261232860208201526200023490601690600262000320565b506200041a565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200029f90620003dd565b90600052602060002090601f016020900481019282620002c357600085556200030e565b82601f10620002de57805160ff19168380011785556200030e565b828001600101855582156200030e579182015b828111156200030e578251825591602001919060010190620002f1565b506200031c929150620003c6565b5090565b82805482825590600052602060002090600f016010900481019282156200030e5791602002820160005b838211156200038c57835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026200034a565b8015620003bc5782816101000a81549061ffff02191690556002016020816001010492830192600103026200038c565b50506200031c9291505b5b808211156200031c5760008155600101620003c7565b600181811c90821680620003f257607f821691505b602082108114156200041457634e487b7160e01b600052602260045260246000fd5b50919050565b614fda806200042a6000396000f3fe60806040526004361061023a5760003560e01c806342842e0e1161012e578063ae93e4bc116100ab578063e985e9c51161006f578063e985e9c514610620578063ecfd89281461065b578063f26c942214610671578063f2fde38b1461068c578063f3c81d2a146106ac57600080fd5b8063ae93e4bc146105a4578063b88d4fde146105b7578063c082508c146105d7578063c87b56dd146105ed578063d9d262831461060d57600080fd5b806372f90ac1116100f257806372f90ac1146105155780638da5cb5b1461053657806395d89b4114610554578063a2080c5b14610569578063a22cb4651461058457600080fd5b806342842e0e146104805780636352211e146104a057806366e33870146104c057806370a08231146104e0578063715018a61461050057600080fd5b806328e56c5e116101bc57806332cb6b0c1161018057806332cb6b0c14610427578063349d27481461043d578063363bcb74146104505780633ccfd60b14610465578063411bb7371461046d57600080fd5b806328e56c5e146103a8578063297c4143146103bb5780632abff1f2146103d35780632beacbb2146103e65780632fb098d2146103f957600080fd5b80630a3d4cc4116102035780630a3d4cc41461032a57806313fb44bf1461034a57806318160ddd1461035d5780631aa06ac61461038057806323b872dd1461038857600080fd5b80625ea3071461023f57806301ffc9a71461027557806306fdde03146102a5578063081812fc146102ba578063095ea7b314610308575b600080fd5b34801561024b57600080fd5b5061025f61025a366004612bb1565b6106b4565b60405161026c9190614ba0565b60405180910390f35b34801561028157600080fd5b50610295610290366004612aff565b610738565b604051901515815260200161026c565b3480156102b157600080fd5b5061025f61078a565b3480156102c657600080fd5b506102f06102d5366004612bb1565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561031457600080fd5b50610328610323366004612a32565b610818565b005b34801561033657600080fd5b5061025f610345366004612b6d565b6108fa565b610328610358366004612b39565b6109ab565b34801561036957600080fd5b506103726109ec565b60405190815260200161026c565b610328610a03565b34801561039457600080fd5b506103286103a336600461289b565b610ac1565b6103286103b6366004612b39565b610c88565b3480156103c757600080fd5b5061037263628eca0881565b6103286103e1366004612b39565b610cc5565b6103286103f4366004612846565b610d02565b34801561040557600080fd5b50610419610414366004612ce1565b610d50565b60405161026c929190614bb3565b34801561043357600080fd5b5061037261021581565b61032861044b366004612bca565b610ea1565b34801561045c57600080fd5b50610328610f9b565b610328610ff2565b61032861047b366004612971565b611264565b34801561048c57600080fd5b5061032861049b36600461289b565b61146e565b3480156104ac57600080fd5b506102f06104bb366004612bb1565b611570565b3480156104cc57600080fd5b5061025f6104db366004612b39565b6115c2565b3480156104ec57600080fd5b506103726104fb366004612846565b611781565b34801561050c57600080fd5b506103286117e4565b34801561052157600080fd5b50600e54610295906301000000900460ff1681565b34801561054257600080fd5b506006546001600160a01b03166102f0565b34801561056057600080fd5b5061025f611818565b34801561057557600080fd5b5061037266b1a2bc2ec5000081565b34801561059057600080fd5b5061032861059f3660046129f6565b611825565b6103286105b2366004612a5c565b611891565b3480156105c357600080fd5b506103286105d23660046128d7565b611a03565b3480156105e357600080fd5b50610372600c5481565b3480156105f957600080fd5b5061025f610608366004612bb1565b611afa565b61032861061b366004612b39565b611bed565b34801561062c57600080fd5b5061029561063b366004612868565b600560209081526000928352604080842090915290825290205460ff1681565b34801561066757600080fd5b50610372600b5481565b34801561067d57600080fd5b50610372666a94d74f43000081565b34801561069857600080fd5b506103286106a7366004612846565b611c2a565b610328611cc5565b6060336106c96006546001600160a01b031690565b6001600160a01b031614806106ec57503360009081526008602052604090205443115b6107115760405162461bcd60e51b815260040161070890614be1565b60405180910390fd5b6107196109ec565b821061072457600080fd5b600061072f83611d10565b9150505b919050565b60006301ffc9a760e01b6001600160e01b03198316148061076957506380ac58cd60e01b6001600160e01b03198316145b806107845750635b5e139f60e01b6001600160e01b03198316145b92915050565b6000805461079790614dfb565b80601f01602080910402602001604051908101604052809291908181526020018280546107c390614dfb565b80156108105780601f106107e557610100808354040283529160200191610810565b820191906000526020600020905b8154815290600101906020018083116107f357829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b03163381148061086157506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b61089e5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610708565b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60603361090f6006546001600160a01b031690565b6001600160a01b0316148061093257503360009081526008602052604090205443115b61094e5760405162461bcd60e51b815260040161070890614be1565b60006017601861095d85611df8565b866040516020016109719493929190614820565b6040516020818303038152906040529050806040516020016109939190612e30565b60408051808303601f19018152919052949350505050565b6006546001600160a01b031633146109d55760405162461bcd60e51b815260040161070890614c07565b80516109e8906018906020840190612727565b5050565b6000600b54600c546109fe9190614cfc565b905090565b66b1a2bc2ec500003414610a515760405162461bcd60e51b8152602060048201526015602482015274125b9cdd59999a58da595b9d08115512081cd95b9d605a1b6044820152606401610708565b63628eca084211610aa45760405162461bcd60e51b815260206004820152601760248201527f5075626c6963206d696e74206e6f7420737461727465640000000000000000006044820152606401610708565b600c60008154610ab390614e36565b90915550610abf611efd565b565b6000818152600260205260409020546001600160a01b03848116911614610b175760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b6044820152606401610708565b6001600160a01b038216610b615760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610708565b336001600160a01b0384161480610b9b57506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b80610bbc57506000818152600460205260409020546001600160a01b031633145b610bf95760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610708565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6006546001600160a01b03163314610cb25760405162461bcd60e51b815260040161070890614c07565b80516109e890601a906020840190612727565b6006546001600160a01b03163314610cef5760405162461bcd60e51b815260040161070890614c07565b80516109e8906019906020840190612727565b6006546001600160a01b03163314610d2c5760405162461bcd60e51b815260040161070890614c07565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b60076020528160005260406000208181548110610d6c57600080fd5b906000526020600020906002020160009150915050806000018054610d9090614dfb565b80601f0160208091040260200160405190810160405280929190818152602001828054610dbc90614dfb565b8015610e095780601f10610dde57610100808354040283529160200191610e09565b820191906000526020600020905b815481529060010190602001808311610dec57829003601f168201915b505050505090806001018054610e1e90614dfb565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4a90614dfb565b8015610e975780601f10610e6c57610100808354040283529160200191610e97565b820191906000526020600020905b815481529060010190602001808311610e7a57829003601f168201915b5050505050905082565b6006546001600160a01b03163314610ecb5760405162461bcd60e51b815260040161070890614c07565b60005b8151811015610f9657600760008481526020019081526020016000206040518060400160405280848481518110610f0757610f07614eb1565b6020026020010151600001518152602001848481518110610f2a57610f2a614eb1565b602090810291909101810151810151909152825460018101845560009384529281902082518051939460020290910192610f679284920190612727565b506020828101518051610f809260018501920190612727565b5050508080610f8e90614e36565b915050610ece565b505050565b336000908152600a602052604090205460ff161515600114610fbc57600080fd5b600f600b5410610fcb57600080fd5b336000908152600a60205260408120805460ff19169055600b8054909190610ab390614e36565b6006546001600160a01b0316331461101c5760405162461bcd60e51b815260040161070890614c07565b6000611029606447614d39565b611034906041614d4d565b90506000611043606447614d39565b61104e90600f614d4d565b9050600061105d606447614d39565b611068906005614d4d565b60405190915060009073e4260df86f5261a41d19c2066f1eb2eb4f009e849084908381818185875af1925050503d80600081146110c1576040519150601f19603f3d011682016040523d82523d6000602084013e6110c6565b606091505b50509050806110e75760405162461bcd60e51b815260040161070890614c3c565b604051600090734533d1f65906368ebfd61259daee561df3f3559d9085908381818185875af1925050503d806000811461113d576040519150601f19603f3d011682016040523d82523d6000602084013e611142565b606091505b50509050806111635760405162461bcd60e51b815260040161070890614c3c565b60405160009073888f8aa938dbb18b28bdd111fa4a0d3b8e10c8719085908381818185875af1925050503d80600081146111b9576040519150601f19603f3d011682016040523d82523d6000602084013e6111be565b606091505b50509050806111df5760405162461bcd60e51b815260040161070890614c3c565b60405160009073efeed35d024cf5b59482fa4bc594aaeaf694e6699088908381818185875af1925050503d8060008114611235576040519150601f19603f3d011682016040523d82523d6000602084013e61123a565b606091505b505090508061125b5760405162461bcd60e51b815260040161070890614c3c565b50505050505050565b6040516bffffffffffffffffffffffff19606085901b1660208201526000906034016040516020818303038152906040528051906020012090506112fe8383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152507f358899790e0e071faed348a1b72ef18efe59029543a4a4da16e13fa2abf2a57892508591506120ef9050565b6113365760405162461bcd60e51b8152602060048201526009602482015268139bdd081bdb8815d360ba1b6044820152606401610708565b6001600160a01b038416331461137f5760405162461bcd60e51b815260206004820152600e60248201526d53656c66206d696e74206f6e6c7960901b6044820152606401610708565b666a94d74f43000034146113cd5760405162461bcd60e51b8152602060048201526015602482015274125b9cdd59999a58da595b9d08115512081cd95b9d605a1b6044820152606401610708565b3360009081526009602052604090205460ff161515600114156114325760405162461bcd60e51b815260206004820152601960248201527f4164647265737320616c7265616479206d696e74656420574c000000000000006044820152606401610708565b336000908152600960205260408120805460ff19166001179055600c805490919061145c90614e36565b90915550611468611efd565b50505050565b611479838383610ac1565b6001600160a01b0382163b15806115315750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a401602060405180830381600087803b1580156114ed57600080fd5b505af1158015611501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115259190612b1c565b6001600160e01b031916145b610f965760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610708565b6000818152600260205260409020546001600160a01b0316806107335760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b6044820152606401610708565b6060336115d76006546001600160a01b031690565b6001600160a01b031614806115fa57503360009081526008602052604090205443115b6116165760405162461bcd60e51b815260040161070890614be1565b6060600061162f61162a8560006001612105565b6121d1565b60ff1661163e57506006611642565b5060055b60005b818160ff16101561175757600061167061162a8760ff8516611668866001614d14565b60ff16612105565b905083600760008460ff1681526020019081526020016000208260ff168154811061169d5761169d614eb1565b9060005260206000209060020201600101600760008560ff1681526020019081526020016000208360ff16815481106116d8576116d8614eb1565b90600052602060002090600202016000016040516020016116fb939291906147b3565b60408051601f198184030181529190529350611718600184614d95565b8260ff16146117445783604051602001611732919061478e565b60405160208183030381529060405293505b508061174f81614e51565b915050611645565b5081604051602001611769919061498a565b60405160208183030381529060405292505050919050565b60006001600160a01b0382166117c85760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610708565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b0316331461180e5760405162461bcd60e51b815260040161070890614c07565b610abf600061228f565b6001805461079790614dfb565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b031633146118bb5760405162461bcd60e51b815260040161070890614c07565b600e5462010000900460ff16156118d157600080fd5b8051600e146118df57600080fd5b600e5461ffff1660005b600e8110156119b0576000819050604051806040016040528061192486858151811061191757611917614eb1565b60200260200101516122e1565b61ffff90811682528581166020928301526000848152600d8352604090208351815494909301518216620100000263ffffffff199094169290911691909117919091179055835161198f9085908490811061198157611981614eb1565b602002602001015182612342565b61199a600884614cdf565b92505080806119a890614e36565b9150506118e9565b50600e600c8190558054607091906000906119d090849061ffff16614cdf565b825461ffff9182166101009390930a92830291909202199091161790555050600e805462ff000019166201000017905550565b611a0e858585610ac1565b6001600160a01b0384163b1580611ab45750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290611a569033908a90899089908990600401614b4c565b602060405180830381600087803b158015611a7057600080fd5b505af1158015611a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa89190612b1c565b6001600160e01b031916145b611af35760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610708565b5050505050565b6060611b046109ec565b8210611b0f57600080fd5b6000611b1a836106b4565b905060006040518060a0016040528060718152602001614ef46071913990506000611b6b611b4786611df8565b604051602001611b579190612de5565b60405160208183030381529060405261244d565b90506000611b8384604051602001611b579190612de5565b9050611bc3611b9187611df8565b84601a85856019611ba18d611df8565b8b611bab8d6115c2565b604051602001611b57999897969594939291906149be565b604051602001611bd39190614b07565b604051602081830303815290604052945050505050919050565b6006546001600160a01b03163314611c175760405162461bcd60e51b815260040161070890614c07565b80516109e8906017906020840190612727565b6006546001600160a01b03163314611c545760405162461bcd60e51b815260040161070890614c07565b6001600160a01b038116611cb95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610708565b611cc28161228f565b50565b6006546001600160a01b03163314611cef5760405162461bcd60e51b815260040161070890614c07565b600e805463ff00000019811663010000009182900460ff1615909102179055565b60408051602080820183526000808352848152600d9091529182205460609261ffff8083169262010000900416905b60088160ff161015611dee57611d5482614e36565b604080516020810186905290810188905260608101829052909250600090612710906080016040516020818303038152906040528051906020012060001c611d9c9190614e71565b905084611db8611db08361ffff16856125b4565b60ff16611df8565b604051602001611dc9929190612e01565b6040516020818303038152906040529450508080611de690614e51565b915050611d3f565b5091949350505050565b606081611e1c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e465780611e3081614e36565b9150611e3f9050600a83614d39565b9150611e20565b6000816001600160401b03811115611e6057611e60614ec7565b6040519080825280601f01601f191660200182016040528015611e8a576020820181803683370190505b5090505b8415611ef557611e9f600183614d95565b9150611eac600a86614e71565b611eb7906030614cfc565b60f81b818381518110611ecc57611ecc614eb1565b60200101906001600160f81b031916908160001a905350611eee600a86614d39565b9450611e8e565b949350505050565b600e546301000000900460ff16151560011480611f2457506006546001600160a01b031633145b611f635760405162461bcd60e51b815260206004820152601060248201526f4d696e74696e67206e6f74206c69766560801b6044820152606401610708565b60006001611f6f6109ec565b611f799190614d95565b90506102158110611fb95760405162461bcd60e51b815260206004820152600a602482015269135a5b9d1959081bdd5d60b21b6044820152606401610708565b333b15611ff75760405162461bcd60e51b815260206004820152600c60248201526b4e6f20436f6e74726163747360a01b6044820152606401610708565b610207600c541061204a5760405162461bcd60e51b815260206004820152601d60248201527f4d696e746564204f7574204e6f6e2052657365727665642053706f74730000006044820152606401610708565b60008190506040518060400160405280612063336122e1565b61ffff9081168252600e805482166020938401526000858152600d8452604080822086518154978701518616620100000263ffffffff19909816908616179690961790955533815260089384905293842043905580549293909290916120cb91859116614cdf565b92506101000a81548161ffff021916908361ffff1602179055506109e83382612342565b6000826120fc8584612683565b14949350505050565b60608360006121148585614d95565b6001600160401b0381111561212b5761212b614ec7565b6040519080825280601f01601f191660200182016040528015612155576020820181803683370190505b509050845b848110156121c75782818151811061217457612174614eb1565b01602001516001600160f81b0319168261218e8884614d95565b8151811061219e5761219e614eb1565b60200101906001600160f81b031916908160001a905350806121bf81614e36565b91505061215a565b5095945050505050565b60008181805b82518160ff161015612287576030838260ff16815181106121fa576121fa614eb1565b016020015160f81c1080159061222d57506039838260ff168151811061222257612222614eb1565b016020015160f81c11155b156122755761223d600a83614d6c565b91506030838260ff168151811061225657612256614eb1565b0160200151612268919060f81c614dac565b6122729083614d14565b91505b8061227f81614e51565b9150506121d7565b509392505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008061271042448560405160200161231f93929190928352602083019190915260601b6bffffffffffffffffffffffff1916604082015260540190565b6040516020818303038152906040528051906020012060001c61072f9190614e71565b6001600160a01b03821661238c5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610708565b6000818152600260205260409020546001600160a01b0316156123e25760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b6044820152606401610708565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606081516000141561246d57505060408051602081019091526000815290565b6000604051806060016040528060408152602001614f65604091399050600060038451600261249c9190614cfc565b6124a69190614d39565b6124b1906004614d4d565b905060006124c0826020614cfc565b6001600160401b038111156124d7576124d7614ec7565b6040519080825280601f01601f191660200182016040528015612501576020820181803683370190505b509050818152600183018586518101602084015b8183101561256f5760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401612515565b600389510660018114612589576002811461259a576125a6565b613d3d60f01b6001198301526125a6565b603d60f81b6000198301525b509398975050505050505050565b600080805b600f8460ff16600881106125cf576125cf614eb1565b015460ff8216101561267d576000600f8560ff16600881106125f3576125f3614eb1565b018260ff168154811061260857612608614eb1565b90600052602060002090601091828204019190066002029054906101000a900461ffff1690508261ffff16861015801561264e57506126478184614cdf565b61ffff1686105b1561265d575091506107849050565b6126678184614cdf565b925050808061267590614e51565b9150506125b9565b50600080fd5b600081815b84518110156122875760008582815181106126a5576126a5614eb1565b602002602001015190508083116126e7576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250612714565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061271f81614e36565b915050612688565b82805461273390614dfb565b90600052602060002090601f016020900481019282612755576000855561279b565b82601f1061276e57805160ff191683800117855561279b565b8280016001018555821561279b579182015b8281111561279b578251825591602001919060010190612780565b506127a79291506127ab565b5090565b5b808211156127a757600081556001016127ac565b80356001600160a01b038116811461073357600080fd5b600082601f8301126127e857600080fd5b81356001600160401b0381111561280157612801614ec7565b612814601f8201601f1916602001614c8c565b81815284602083860101111561282957600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561285857600080fd5b612861826127c0565b9392505050565b6000806040838503121561287b57600080fd5b612884836127c0565b9150612892602084016127c0565b90509250929050565b6000806000606084860312156128b057600080fd5b6128b9846127c0565b92506128c7602085016127c0565b9150604084013590509250925092565b6000806000806000608086880312156128ef57600080fd5b6128f8866127c0565b9450612906602087016127c0565b93506040860135925060608601356001600160401b038082111561292957600080fd5b818801915088601f83011261293d57600080fd5b81358181111561294c57600080fd5b89602082850101111561295e57600080fd5b9699959850939650602001949392505050565b60008060006040848603121561298657600080fd5b61298f846127c0565b925060208401356001600160401b03808211156129ab57600080fd5b818601915086601f8301126129bf57600080fd5b8135818111156129ce57600080fd5b8760208260051b85010111156129e357600080fd5b6020830194508093505050509250925092565b60008060408385031215612a0957600080fd5b612a12836127c0565b915060208301358015158114612a2757600080fd5b809150509250929050565b60008060408385031215612a4557600080fd5b612a4e836127c0565b946020939093013593505050565b60006020808385031215612a6f57600080fd5b82356001600160401b03811115612a8557600080fd5b8301601f81018513612a9657600080fd5b8035612aa9612aa482614cbc565b614c8c565b80828252848201915084840188868560051b8701011115612ac957600080fd5b600094505b83851015612af357612adf816127c0565b835260019490940193918501918501612ace565b50979650505050505050565b600060208284031215612b1157600080fd5b813561286181614edd565b600060208284031215612b2e57600080fd5b815161286181614edd565b600060208284031215612b4b57600080fd5b81356001600160401b03811115612b6157600080fd5b611ef5848285016127d7565b60008060408385031215612b8057600080fd5b82356001600160401b03811115612b9657600080fd5b612ba2858286016127d7565b95602094909401359450505050565b600060208284031215612bc357600080fd5b5035919050565b60008060408385031215612bdd57600080fd5b823591506020808401356001600160401b0380821115612bfc57600080fd5b818601915086601f830112612c1057600080fd5b8135612c1e612aa482614cbc565b8082825285820191508585018a878560051b8801011115612c3e57600080fd5b60005b84811015612cd057813586811115612c5857600080fd5b87016040818e03601f19011215612c6e57600080fd5b612c76614c64565b8982013588811115612c8757600080fd5b612c958f8c838601016127d7565b825250604082013588811115612caa57600080fd5b612cb88f8c838601016127d7565b828c0152508552509287019290870190600101612c41565b50979a909950975050505050505050565b60008060408385031215612cf457600080fd5b50508035926020909101359150565b60008151808452612d1b816020860160208601614dcf565b601f01601f19169290920160200192915050565b60008151612d41818560208601614dcf565b9290920192915050565b8054600090600181811c9080831680612d6557607f831692505b6020808410821415612d8757634e487b7160e01b600052602260045260246000fd5b818015612d9b5760018114612dac57612dd9565b60ff19861689528489019650612dd9565b60008881526020902060005b86811015612dd15781548b820152908501908301612db8565b505084890196505b50505050505092915050565b60008251612df7818460208701614dcf565b9190910192915050565b60008351612e13818460208801614dcf565b835190830190612e27818360208801614dcf565b01949350505050565b60008251612e42818460208701614dcf565b7f66756e6374696f6e2532307365747570253238253239253742732533442535429201918252507f2e3435253243312535442532436325334425354230253243312535442532436e60208201527f25334425354230253243312535442532436e6e7725334430253243636925334460408201527f25354230253243312535442532436e762533442535422535422e30303125324360608201527f2e303032352535442532432535422e303032352532432e30312535442532432560808201527f35422e30312532432e303032352535442532432535422e303032352532432e3060a08201527f30312535442532432535422e3030312532432e3030312535442535442532436f60c08201527f762533442535422535423435303025324335353030253243363530302532433860e08201527f65332535442532432535423735302532433935302532433131353025324331326101008201527f35302535442532432535423735302532433935302532433131353025324331326101208201527f35302535442532432535423435303025324335353030253243363530302532436101408201527f38653325354425324325354234653325324335653325324336653325324331356101608201527f65332535442535442532437025334425354225354225323225323336353031306101808201527f63253232253243253232253233636231623136253232253243253232253233656101a08201527f66336332642532322532432532322532336632366134662532322532432532326101c08201527f25323366323934373925323225324325323225323366656466643425323225326101e08201527f43253232253233396463656532253232253243253232253233343039316339256102008201527f32322532432532322532333133363861612532322532432532322532333033336102208201527f32373025323225324325323225323330303025323225324325323225323366616102408201527f65626437253232253544253243253542253232253233306633333735253232256102608201527f32432532322532333133343539632532322532432532322532333135353763306102808201527f25323225324325323225323331393662646525323225324325323225323332336102a08201527f38326637253232253243253232253233346239636639253232253243253232256102c08201527f32333737623666622532322532432532322532336134636566632532322532436102e08201527f25323225323363636534666425323225324325323225323365386633666525326103008201527f32253243253232253233303030253232253243253232253233666165626437256103208201527f32322535442532432535422532322532333065306530652532322532432532326103408201527f25323366336263313725323225324325323225323364353462306325323225326103608201527f43253232253233313534323535253232253243253232253233646364636463256103808201527f32322532432532322532336330353034662532322532432532322532333638626103a08201527f39623025323225324325323225323365636265326325323225324325323225326103c08201527f33323736336162253232253243253232253233636534323431253232253243256103e08201527f32322532336661656264372532322532432532322532333030302532322535446104008201527f25324325354225323225323366663030303025323225324325323225323366656104208201527f31633030253232253243253232253233666433393030253232253243253232256104408201527f32336663353530302532322532432532322532336662373130302532322532436104608201527f25323225323366623865303025323225324325323225323366616161303025326104808201527f32253243253232253233663963363030253232253243253232253233663865336104a08201527f30302532322532432532322532336637666630302532322532432532322532336104c08201527f30303025323225324325323225323366616562643725323225354425324325356104e08201527f42253232253233303034373333253232253243253232253233326236613464256105008201527f32322532432532322532333536386436362532322532432532322532336135636105208201527f31616525323225324325323225323366336634663625323225324325323225326105408201527f33646364666535253232253243253232253233646638303830253232253243256105608201527f32322532336362306230612532322532432532322532336164303830662532326105808201527f25324325323225323338653034313325323225324325323225323330303025326105a08201527f32253243253232253233666165626437253232253544253243253542253232256105c08201527f32333165313631392532322532432532322532333363323833312532322532436105e08201527f25323225323335643432346525323225324325323225323338633636373725326106008201527f32253243253232253233616437373837253232253243253232253233616336376106208201527f35622532322532432532322532336338363136362532322532432532322532336106408201527f66303738623325323225324325323225323365633837383225323225324325326106608201527f32253233646664653830253232253243253232253233666165626437253232256106808201527f32432532322532333030302532322535442532432535422532322532333030386106a08201527f30383025323225324325323225323330303830383025323225324325323225326106c08201527f33313738633863253232253243253232253233663766663030253232253243256106e08201527f32322532333436613361332532322532432532322532333564616561652532326107008201527f25324325323225323337346261626125323225324325323225323338626335636107208201527f35253232253243253232253233613264316431253232253243253232253233626107408201527f35646164612532322532432532322532333030302532322532432532322532336107608201527f66616562643725323225354425324325354225323225323336363939303025326107808201527f32253243253232253233393963633333253232253243253232253233636365656107a08201527f36362532322532432532322532333030363639392532322532432532322532336107c08201527f33333939636325323225324325323225323339393030363625323225324325326107e08201527f32253233636333333939253232253243253232253233666636363030253232256108008201527f32432532322532336666393930302532322532432532322532336666636330306108208201527f25323225324325323225323330303025323225324325323225323366616562646108408201527f37253232253544253243253542253232253233303030253232253243253232256108608201527f32336666662532322532432532322532333030302532322532432532322532336108808201527f66666625323225324325323225323330303025323225324325323225323366666108a08201527f66253232253243253232253233303030253232253243253232253233666666256108c08201527f32322532432532322532333030302532322532432532322532336666662532326108e08201527f25324325323225323330303025323225324325323225323366666625323225356109008201527f44253243253542253232253233326336653439253232253243253232253233366109208201527f31383536352532322532432532322532333936396338312532322532432532326109408201527f25323363626233396425323225324325323225323365356265616225323225326109608201527f43253232253233666663396239253232253243253232253233663562613963256109808201527f32322532432532322532336562616237662532322532432532322532336531396109a08201527f63363225323225324325323225323364363863343525323225324325323225326109c08201527f33303030253232253243253232253233666165626437253232253544253243256109e08201527f3542253232253233363530313063253232253243253232253233636231623136610a008201527f2532322532432532322532336566336332642532322532432532322532336632610a208201527f3661346625323225324325323225323366323934373925323225324325323225610a408201527f3233666564666434253232253243253232253233396463656532253232253243610a608201527f2532322532333430393163392532322532432532322532333133363861612532610a808201527f3225324325323225323330333332373025323225324325323225323366616562610aa08201527f6437253232253243253232253233303030253232253544253544253243637265610ac08201527f61746543616e7661732532383730302532433935302532392532436e6f697365610ae08201527f53656564253238746f6b656e49642532392532436e6f4c6f6f70253238253239610b008201527f2532436e6f5374726f6b65253238253239253243726563744d6f646525323843610b208201527f454e544552253239253243636f6c6f724d6f646525323848534c253239253243610b408201527f706978656c44656e73697479253238352532392532436f2533446e6f69736525610b608201527f32436625334466696c6c253243622533446e6f46696c6c253243712533447769610b808201527f6474682532436125334468656967687425324379792533447061727365496e74610ba08201527f253238686173682e737562737472696e67253238302532433125323925323925610bc08201527f3243636925334463692535427061727365496e74253238686173682e73756273610be08201527f7472696e67253238312532433225323925323925354425324377253344732535610c008201527f427061727365496e74253238686173682e737562737472696e67253238322532610c208201527f4333253239253239253544253243782533447061727365496e74253238686173610c408201527f682e737562737472696e6725323833253243342532392532392532437a7a2533610c608201527f447061727365496e74253238686173682e737562737472696e67253238342532610c808201527f433525323925323925324361612533446e762535427825354425354230253544610ca08201527f25324376622533446e7625354278253544253542312535442532436762253344610cc08201527f6f76253542782535442535427a7a253544253243666625334425354231652d35610ce08201527f25324361612535442532437a2533447061727365496e74253238686173682e73610d008201527f7562737472696e6725323835253243362532392532392532437a322533447a25610d208201527f324231253243672533447061727365496e74253238686173682e737562737472610d408201527f696e672532383625324337253239253239253242312532436e6e772533446666610d608201527f2535427061727365496e74253238686173682e737562737472696e6725323837610d808201527f2532433825323925323925354425374466756e6374696f6e2532306472617725610da08201527f32382532392537426261636b67726f756e64253238702535427a253544253542610dc08201527f3130253544253239253243322533442533447825374325374333253344253344610de08201527f782533466e6e2533446e6e772533416e6e2533446161253342666f722532386c610e008201527f657425323065253344323525334265253343253344712d323525334265253242610e208201527f25334477253239666f722532386c657425323063253344323525334263253343610e408201527f253344612d323525334263253242253344772532396e2533446f253238652532610e608201527f416e6e2532436325324161612532392532436e322533446f2532386525324176610e808201527f622532436325324176622532392532436e332533446f25323825323865253242610ea08201527f67622532416e25323925324161612532432532386325324267622532416e3225610ec08201527f323925324176622532392532436e342533446f25323825323865253242676225610ee08201527f32416e3325323925324161612532432532386325324267622532416e33253239610f008201527f25324176622532392532436e352533446f253238253238652532426762253241610f208201527f6e3425323925324161612532432532386325324267622532416e342532392532610f408201527f4176622532392532433025334425334479792533466525334371253246672533610f608201527f466e352533452e3538253346622532382532392533416e352533452e35352533610f808201527f4666253238702535427a253544253542302535442532392533416e352533452e610fa08201527f353325334666253238702535427a253544253542312535442532392533416e35610fc08201527f2533452e3525334666253238702535427a253544253542322535442532392533610fe08201527f416e352533452e343725334666253238702535427a25354425354233253544256110008201527f32392533416e352533452e3434253346622532382532392533416e352533452e6110208201527f343125334666253238702535427a253544253542342535442532392533416e356110408201527f2533452e333825334666253238702535427a25354425354235253544253239256110608201527f33416e352533452e333525334666253238702535427a253544253542362535446110808201527f2532392533416e352533452e333125334666253238702535427a2535442535426110a08201527f372535442532392533416e352533452e323825334666253238702535427a25356110c08201527f44253542382535442532392533416e352533452e3235253346662532387025356110e08201527f427a25354425354239253544253239253341622532382532392533416e3525336111008201527f452e3538253346622532382532392533416e352533452e3535253346662532386111208201527f702535427a32253544253542302535442532392533416e352533452e353325336111408201527f4666253238702535427a32253544253542312535442532392533416e352533456111608201527f2e3525334666253238702535427a32253544253542322535442532392533416e6111808201527f352533452e343725334666253238702535427a322535442535423325354425326111a08201527f392533416e352533452e3434253346622532382532392533416e352533452e346111c08201527f3125334666253238702535427a32253544253542342535442532392533416e356111e08201527f2533452e333825334666253238702535427a32253544253542352535442532396112008201527f2533416e352533452e333525334666253238702535427a3225354425354236256112208201527f35442532392533416e352533452e333125334666253238702535427a322535446112408201527f253542372535442532392533416e352533452e323825334666253238702535426112608201527f7a32253544253542382535442532392533416e352533452e32352533466625326112808201527f38702535427a32253544253542392535442532392533416225323825323925336112a08201527f413125334425334479792533466e352533452e362533466225323825323925336112c08201527f416e352533452e3425334666253238702535427a2535442535423325354425326112e08201527f3925334162253238253239253341662532383165332532416e322532433130306113008201527f2532416e352532433130302532416e35253239253243726563742532386525326113208201527f43632532437725323925334230253344253344636925323625323625323870756113408201527f7368253238253239253243622532382532392532437374726f6b6525323870256113608201527f35427a25354425354231302535442532392532437374726f6b655765696768746113808201527f25323831353730253239253243636972636c65253238712532463225324361256113a08201527f324632253243326533253239253243706f7025323825323925323925324370756113c08201527f73682532382532392532437465787453697a65253238332532392532437465786113e08201527f74416c69676e253238524947485425323925324366253238702535427a2535446114008201527f253542313125354425323925324374657874253238253232466f6c64656425326114208201527f3046616365732e253230323032322e253232253243712d3235253243612d31356114408201527f2532392532437465787425323868617368253243712d3235253243612d3130256114608201527f3239253243706f702532382532392537442533432532467363726970742533456114808201527f253343253246626f647925334525334325324668746d6c2533450000000000006114a08201526114ba01919050565b600082516147a0818460208701614dcf565b600b60fa1b920191825250600101919050565b600084516147c5818460208901614dcf565b6e3d913a3930b4ba2fba3cb832911d1160891b9083019081526147eb600f820186612d4b565b6a1116113b30b63ab2911d1160a91b8152905061480b600b820185612d4b565b61227d60f01b81526002019695505050505050565b7f646174613a746578742f68746d6c2c25334368746d6c2533452533436865616481527f2533452533437363726970742532307372632533442532320000000000000000602082015260006148786038830187612d4b565b7412991912991834b73a32b3b934ba3c9299a212991960591b81526148a06015820187612d4b565b90507f25323225323063726f73736f726967696e253344253232616e6f6e796d6f757381527f253232253345253343253246736372697074253345253343253246686561642560208201527f3345253343626f6479253345253343736372697074253345766172253230746f6040820152671ad95b9259094cd160c21b60608201528451614935816068840160208901614dcf565b721299a13b30b91299183430b9b41299a212991960691b60689290910191820152835161496981607b840160208801614dcf565b651299191299a160d11b607b92909101918201526081019695505050505050565b605b60f81b8152600082516149a6816001850160208701614dcf565b605d60f81b6001939091019283015250600201919050565b7f7b226e616d65223a2022466f6c64656446616365732023000000000000000000815260008a516149f6816017850160208f01614dcf565b8a5190830190614a0d816017840160208f01614dcf565b6f1132bc3a32b93730b62fbab936111d1160811b60179290910191820152614a38602782018b612d4b565b90508851614a4a818360208d01614dcf565b6226743d60e81b91019081528751614a69816003840160208c01614dcf565b6a11161134b6b0b3b2911d1160a91b60039290910191820152614a8f600e820188612d4b565b90508551614aa1818360208a01614dcf565b614af6614ae9614ae3614ac8614ac28587016226743d60e81b815260030190565b8a612d2f565b6e11161130ba3a3934b13aba32b9911d60891b8152600f0190565b87612d2f565b607d60f81b815260010190565b9d9c50505050505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251614b3f81601d850160208701614dcf565b91909101601d0192915050565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6020815260006128616020830184612d03565b604081526000614bc66040830185612d03565b8281036020840152614bd88185612d03565b95945050505050565b6020808252600c908201526b6e6f7420736f20666173742160a01b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600e908201526d11985a5b1959081d1bc81cd95b9960921b604082015260600190565b604080519081016001600160401b0381118282101715614c8657614c86614ec7565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614cb457614cb4614ec7565b604052919050565b60006001600160401b03821115614cd557614cd5614ec7565b5060051b60200190565b600061ffff808316818516808303821115612e2757612e27614e85565b60008219821115614d0f57614d0f614e85565b500190565b600060ff821660ff84168060ff03821115614d3157614d31614e85565b019392505050565b600082614d4857614d48614e9b565b500490565b6000816000190483118215151615614d6757614d67614e85565b500290565b600060ff821660ff84168160ff0481118215151615614d8d57614d8d614e85565b029392505050565b600082821015614da757614da7614e85565b500390565b600060ff821660ff841680821015614dc657614dc6614e85565b90039392505050565b60005b83811015614dea578181015183820152602001614dd2565b838111156114685750506000910152565b600181811c90821680614e0f57607f821691505b60208210811415614e3057634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415614e4a57614e4a614e85565b5060010190565b600060ff821660ff811415614e6857614e68614e85565b60010192915050565b600082614e8057614e80614e9b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611cc257600080fdfe222c20226465736372697074696f6e223a202235333320466f6c64656446616365732e205472616974732067656e657261746564206f6e20636861696e2026206d657461646174612c20696d61676573206d6972726f726564206f6e20636861696e207065726d616e656e746c792e222c4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122098eab694f46d5b5715dfb6ecbb19ef7b08ecd8497fe4b6cb4cc6c128b803846a64736f6c63430008070033
Deployed Bytecode
0x60806040526004361061023a5760003560e01c806342842e0e1161012e578063ae93e4bc116100ab578063e985e9c51161006f578063e985e9c514610620578063ecfd89281461065b578063f26c942214610671578063f2fde38b1461068c578063f3c81d2a146106ac57600080fd5b8063ae93e4bc146105a4578063b88d4fde146105b7578063c082508c146105d7578063c87b56dd146105ed578063d9d262831461060d57600080fd5b806372f90ac1116100f257806372f90ac1146105155780638da5cb5b1461053657806395d89b4114610554578063a2080c5b14610569578063a22cb4651461058457600080fd5b806342842e0e146104805780636352211e146104a057806366e33870146104c057806370a08231146104e0578063715018a61461050057600080fd5b806328e56c5e116101bc57806332cb6b0c1161018057806332cb6b0c14610427578063349d27481461043d578063363bcb74146104505780633ccfd60b14610465578063411bb7371461046d57600080fd5b806328e56c5e146103a8578063297c4143146103bb5780632abff1f2146103d35780632beacbb2146103e65780632fb098d2146103f957600080fd5b80630a3d4cc4116102035780630a3d4cc41461032a57806313fb44bf1461034a57806318160ddd1461035d5780631aa06ac61461038057806323b872dd1461038857600080fd5b80625ea3071461023f57806301ffc9a71461027557806306fdde03146102a5578063081812fc146102ba578063095ea7b314610308575b600080fd5b34801561024b57600080fd5b5061025f61025a366004612bb1565b6106b4565b60405161026c9190614ba0565b60405180910390f35b34801561028157600080fd5b50610295610290366004612aff565b610738565b604051901515815260200161026c565b3480156102b157600080fd5b5061025f61078a565b3480156102c657600080fd5b506102f06102d5366004612bb1565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b34801561031457600080fd5b50610328610323366004612a32565b610818565b005b34801561033657600080fd5b5061025f610345366004612b6d565b6108fa565b610328610358366004612b39565b6109ab565b34801561036957600080fd5b506103726109ec565b60405190815260200161026c565b610328610a03565b34801561039457600080fd5b506103286103a336600461289b565b610ac1565b6103286103b6366004612b39565b610c88565b3480156103c757600080fd5b5061037263628eca0881565b6103286103e1366004612b39565b610cc5565b6103286103f4366004612846565b610d02565b34801561040557600080fd5b50610419610414366004612ce1565b610d50565b60405161026c929190614bb3565b34801561043357600080fd5b5061037261021581565b61032861044b366004612bca565b610ea1565b34801561045c57600080fd5b50610328610f9b565b610328610ff2565b61032861047b366004612971565b611264565b34801561048c57600080fd5b5061032861049b36600461289b565b61146e565b3480156104ac57600080fd5b506102f06104bb366004612bb1565b611570565b3480156104cc57600080fd5b5061025f6104db366004612b39565b6115c2565b3480156104ec57600080fd5b506103726104fb366004612846565b611781565b34801561050c57600080fd5b506103286117e4565b34801561052157600080fd5b50600e54610295906301000000900460ff1681565b34801561054257600080fd5b506006546001600160a01b03166102f0565b34801561056057600080fd5b5061025f611818565b34801561057557600080fd5b5061037266b1a2bc2ec5000081565b34801561059057600080fd5b5061032861059f3660046129f6565b611825565b6103286105b2366004612a5c565b611891565b3480156105c357600080fd5b506103286105d23660046128d7565b611a03565b3480156105e357600080fd5b50610372600c5481565b3480156105f957600080fd5b5061025f610608366004612bb1565b611afa565b61032861061b366004612b39565b611bed565b34801561062c57600080fd5b5061029561063b366004612868565b600560209081526000928352604080842090915290825290205460ff1681565b34801561066757600080fd5b50610372600b5481565b34801561067d57600080fd5b50610372666a94d74f43000081565b34801561069857600080fd5b506103286106a7366004612846565b611c2a565b610328611cc5565b6060336106c96006546001600160a01b031690565b6001600160a01b031614806106ec57503360009081526008602052604090205443115b6107115760405162461bcd60e51b815260040161070890614be1565b60405180910390fd5b6107196109ec565b821061072457600080fd5b600061072f83611d10565b9150505b919050565b60006301ffc9a760e01b6001600160e01b03198316148061076957506380ac58cd60e01b6001600160e01b03198316145b806107845750635b5e139f60e01b6001600160e01b03198316145b92915050565b6000805461079790614dfb565b80601f01602080910402602001604051908101604052809291908181526020018280546107c390614dfb565b80156108105780601f106107e557610100808354040283529160200191610810565b820191906000526020600020905b8154815290600101906020018083116107f357829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b03163381148061086157506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b61089e5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610708565b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60603361090f6006546001600160a01b031690565b6001600160a01b0316148061093257503360009081526008602052604090205443115b61094e5760405162461bcd60e51b815260040161070890614be1565b60006017601861095d85611df8565b866040516020016109719493929190614820565b6040516020818303038152906040529050806040516020016109939190612e30565b60408051808303601f19018152919052949350505050565b6006546001600160a01b031633146109d55760405162461bcd60e51b815260040161070890614c07565b80516109e8906018906020840190612727565b5050565b6000600b54600c546109fe9190614cfc565b905090565b66b1a2bc2ec500003414610a515760405162461bcd60e51b8152602060048201526015602482015274125b9cdd59999a58da595b9d08115512081cd95b9d605a1b6044820152606401610708565b63628eca084211610aa45760405162461bcd60e51b815260206004820152601760248201527f5075626c6963206d696e74206e6f7420737461727465640000000000000000006044820152606401610708565b600c60008154610ab390614e36565b90915550610abf611efd565b565b6000818152600260205260409020546001600160a01b03848116911614610b175760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b6044820152606401610708565b6001600160a01b038216610b615760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610708565b336001600160a01b0384161480610b9b57506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b80610bbc57506000818152600460205260409020546001600160a01b031633145b610bf95760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610708565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6006546001600160a01b03163314610cb25760405162461bcd60e51b815260040161070890614c07565b80516109e890601a906020840190612727565b6006546001600160a01b03163314610cef5760405162461bcd60e51b815260040161070890614c07565b80516109e8906019906020840190612727565b6006546001600160a01b03163314610d2c5760405162461bcd60e51b815260040161070890614c07565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b60076020528160005260406000208181548110610d6c57600080fd5b906000526020600020906002020160009150915050806000018054610d9090614dfb565b80601f0160208091040260200160405190810160405280929190818152602001828054610dbc90614dfb565b8015610e095780601f10610dde57610100808354040283529160200191610e09565b820191906000526020600020905b815481529060010190602001808311610dec57829003601f168201915b505050505090806001018054610e1e90614dfb565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4a90614dfb565b8015610e975780601f10610e6c57610100808354040283529160200191610e97565b820191906000526020600020905b815481529060010190602001808311610e7a57829003601f168201915b5050505050905082565b6006546001600160a01b03163314610ecb5760405162461bcd60e51b815260040161070890614c07565b60005b8151811015610f9657600760008481526020019081526020016000206040518060400160405280848481518110610f0757610f07614eb1565b6020026020010151600001518152602001848481518110610f2a57610f2a614eb1565b602090810291909101810151810151909152825460018101845560009384529281902082518051939460020290910192610f679284920190612727565b506020828101518051610f809260018501920190612727565b5050508080610f8e90614e36565b915050610ece565b505050565b336000908152600a602052604090205460ff161515600114610fbc57600080fd5b600f600b5410610fcb57600080fd5b336000908152600a60205260408120805460ff19169055600b8054909190610ab390614e36565b6006546001600160a01b0316331461101c5760405162461bcd60e51b815260040161070890614c07565b6000611029606447614d39565b611034906041614d4d565b90506000611043606447614d39565b61104e90600f614d4d565b9050600061105d606447614d39565b611068906005614d4d565b60405190915060009073e4260df86f5261a41d19c2066f1eb2eb4f009e849084908381818185875af1925050503d80600081146110c1576040519150601f19603f3d011682016040523d82523d6000602084013e6110c6565b606091505b50509050806110e75760405162461bcd60e51b815260040161070890614c3c565b604051600090734533d1f65906368ebfd61259daee561df3f3559d9085908381818185875af1925050503d806000811461113d576040519150601f19603f3d011682016040523d82523d6000602084013e611142565b606091505b50509050806111635760405162461bcd60e51b815260040161070890614c3c565b60405160009073888f8aa938dbb18b28bdd111fa4a0d3b8e10c8719085908381818185875af1925050503d80600081146111b9576040519150601f19603f3d011682016040523d82523d6000602084013e6111be565b606091505b50509050806111df5760405162461bcd60e51b815260040161070890614c3c565b60405160009073efeed35d024cf5b59482fa4bc594aaeaf694e6699088908381818185875af1925050503d8060008114611235576040519150601f19603f3d011682016040523d82523d6000602084013e61123a565b606091505b505090508061125b5760405162461bcd60e51b815260040161070890614c3c565b50505050505050565b6040516bffffffffffffffffffffffff19606085901b1660208201526000906034016040516020818303038152906040528051906020012090506112fe8383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152507f358899790e0e071faed348a1b72ef18efe59029543a4a4da16e13fa2abf2a57892508591506120ef9050565b6113365760405162461bcd60e51b8152602060048201526009602482015268139bdd081bdb8815d360ba1b6044820152606401610708565b6001600160a01b038416331461137f5760405162461bcd60e51b815260206004820152600e60248201526d53656c66206d696e74206f6e6c7960901b6044820152606401610708565b666a94d74f43000034146113cd5760405162461bcd60e51b8152602060048201526015602482015274125b9cdd59999a58da595b9d08115512081cd95b9d605a1b6044820152606401610708565b3360009081526009602052604090205460ff161515600114156114325760405162461bcd60e51b815260206004820152601960248201527f4164647265737320616c7265616479206d696e74656420574c000000000000006044820152606401610708565b336000908152600960205260408120805460ff19166001179055600c805490919061145c90614e36565b90915550611468611efd565b50505050565b611479838383610ac1565b6001600160a01b0382163b15806115315750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a401602060405180830381600087803b1580156114ed57600080fd5b505af1158015611501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115259190612b1c565b6001600160e01b031916145b610f965760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610708565b6000818152600260205260409020546001600160a01b0316806107335760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b6044820152606401610708565b6060336115d76006546001600160a01b031690565b6001600160a01b031614806115fa57503360009081526008602052604090205443115b6116165760405162461bcd60e51b815260040161070890614be1565b6060600061162f61162a8560006001612105565b6121d1565b60ff1661163e57506006611642565b5060055b60005b818160ff16101561175757600061167061162a8760ff8516611668866001614d14565b60ff16612105565b905083600760008460ff1681526020019081526020016000208260ff168154811061169d5761169d614eb1565b9060005260206000209060020201600101600760008560ff1681526020019081526020016000208360ff16815481106116d8576116d8614eb1565b90600052602060002090600202016000016040516020016116fb939291906147b3565b60408051601f198184030181529190529350611718600184614d95565b8260ff16146117445783604051602001611732919061478e565b60405160208183030381529060405293505b508061174f81614e51565b915050611645565b5081604051602001611769919061498a565b60405160208183030381529060405292505050919050565b60006001600160a01b0382166117c85760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610708565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b0316331461180e5760405162461bcd60e51b815260040161070890614c07565b610abf600061228f565b6001805461079790614dfb565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6006546001600160a01b031633146118bb5760405162461bcd60e51b815260040161070890614c07565b600e5462010000900460ff16156118d157600080fd5b8051600e146118df57600080fd5b600e5461ffff1660005b600e8110156119b0576000819050604051806040016040528061192486858151811061191757611917614eb1565b60200260200101516122e1565b61ffff90811682528581166020928301526000848152600d8352604090208351815494909301518216620100000263ffffffff199094169290911691909117919091179055835161198f9085908490811061198157611981614eb1565b602002602001015182612342565b61199a600884614cdf565b92505080806119a890614e36565b9150506118e9565b50600e600c8190558054607091906000906119d090849061ffff16614cdf565b825461ffff9182166101009390930a92830291909202199091161790555050600e805462ff000019166201000017905550565b611a0e858585610ac1565b6001600160a01b0384163b1580611ab45750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290611a569033908a90899089908990600401614b4c565b602060405180830381600087803b158015611a7057600080fd5b505af1158015611a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa89190612b1c565b6001600160e01b031916145b611af35760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610708565b5050505050565b6060611b046109ec565b8210611b0f57600080fd5b6000611b1a836106b4565b905060006040518060a0016040528060718152602001614ef46071913990506000611b6b611b4786611df8565b604051602001611b579190612de5565b60405160208183030381529060405261244d565b90506000611b8384604051602001611b579190612de5565b9050611bc3611b9187611df8565b84601a85856019611ba18d611df8565b8b611bab8d6115c2565b604051602001611b57999897969594939291906149be565b604051602001611bd39190614b07565b604051602081830303815290604052945050505050919050565b6006546001600160a01b03163314611c175760405162461bcd60e51b815260040161070890614c07565b80516109e8906017906020840190612727565b6006546001600160a01b03163314611c545760405162461bcd60e51b815260040161070890614c07565b6001600160a01b038116611cb95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610708565b611cc28161228f565b50565b6006546001600160a01b03163314611cef5760405162461bcd60e51b815260040161070890614c07565b600e805463ff00000019811663010000009182900460ff1615909102179055565b60408051602080820183526000808352848152600d9091529182205460609261ffff8083169262010000900416905b60088160ff161015611dee57611d5482614e36565b604080516020810186905290810188905260608101829052909250600090612710906080016040516020818303038152906040528051906020012060001c611d9c9190614e71565b905084611db8611db08361ffff16856125b4565b60ff16611df8565b604051602001611dc9929190612e01565b6040516020818303038152906040529450508080611de690614e51565b915050611d3f565b5091949350505050565b606081611e1c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611e465780611e3081614e36565b9150611e3f9050600a83614d39565b9150611e20565b6000816001600160401b03811115611e6057611e60614ec7565b6040519080825280601f01601f191660200182016040528015611e8a576020820181803683370190505b5090505b8415611ef557611e9f600183614d95565b9150611eac600a86614e71565b611eb7906030614cfc565b60f81b818381518110611ecc57611ecc614eb1565b60200101906001600160f81b031916908160001a905350611eee600a86614d39565b9450611e8e565b949350505050565b600e546301000000900460ff16151560011480611f2457506006546001600160a01b031633145b611f635760405162461bcd60e51b815260206004820152601060248201526f4d696e74696e67206e6f74206c69766560801b6044820152606401610708565b60006001611f6f6109ec565b611f799190614d95565b90506102158110611fb95760405162461bcd60e51b815260206004820152600a602482015269135a5b9d1959081bdd5d60b21b6044820152606401610708565b333b15611ff75760405162461bcd60e51b815260206004820152600c60248201526b4e6f20436f6e74726163747360a01b6044820152606401610708565b610207600c541061204a5760405162461bcd60e51b815260206004820152601d60248201527f4d696e746564204f7574204e6f6e2052657365727665642053706f74730000006044820152606401610708565b60008190506040518060400160405280612063336122e1565b61ffff9081168252600e805482166020938401526000858152600d8452604080822086518154978701518616620100000263ffffffff19909816908616179690961790955533815260089384905293842043905580549293909290916120cb91859116614cdf565b92506101000a81548161ffff021916908361ffff1602179055506109e83382612342565b6000826120fc8584612683565b14949350505050565b60608360006121148585614d95565b6001600160401b0381111561212b5761212b614ec7565b6040519080825280601f01601f191660200182016040528015612155576020820181803683370190505b509050845b848110156121c75782818151811061217457612174614eb1565b01602001516001600160f81b0319168261218e8884614d95565b8151811061219e5761219e614eb1565b60200101906001600160f81b031916908160001a905350806121bf81614e36565b91505061215a565b5095945050505050565b60008181805b82518160ff161015612287576030838260ff16815181106121fa576121fa614eb1565b016020015160f81c1080159061222d57506039838260ff168151811061222257612222614eb1565b016020015160f81c11155b156122755761223d600a83614d6c565b91506030838260ff168151811061225657612256614eb1565b0160200151612268919060f81c614dac565b6122729083614d14565b91505b8061227f81614e51565b9150506121d7565b509392505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008061271042448560405160200161231f93929190928352602083019190915260601b6bffffffffffffffffffffffff1916604082015260540190565b6040516020818303038152906040528051906020012060001c61072f9190614e71565b6001600160a01b03821661238c5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610708565b6000818152600260205260409020546001600160a01b0316156123e25760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b6044820152606401610708565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606081516000141561246d57505060408051602081019091526000815290565b6000604051806060016040528060408152602001614f65604091399050600060038451600261249c9190614cfc565b6124a69190614d39565b6124b1906004614d4d565b905060006124c0826020614cfc565b6001600160401b038111156124d7576124d7614ec7565b6040519080825280601f01601f191660200182016040528015612501576020820181803683370190505b509050818152600183018586518101602084015b8183101561256f5760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401612515565b600389510660018114612589576002811461259a576125a6565b613d3d60f01b6001198301526125a6565b603d60f81b6000198301525b509398975050505050505050565b600080805b600f8460ff16600881106125cf576125cf614eb1565b015460ff8216101561267d576000600f8560ff16600881106125f3576125f3614eb1565b018260ff168154811061260857612608614eb1565b90600052602060002090601091828204019190066002029054906101000a900461ffff1690508261ffff16861015801561264e57506126478184614cdf565b61ffff1686105b1561265d575091506107849050565b6126678184614cdf565b925050808061267590614e51565b9150506125b9565b50600080fd5b600081815b84518110156122875760008582815181106126a5576126a5614eb1565b602002602001015190508083116126e7576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250612714565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061271f81614e36565b915050612688565b82805461273390614dfb565b90600052602060002090601f016020900481019282612755576000855561279b565b82601f1061276e57805160ff191683800117855561279b565b8280016001018555821561279b579182015b8281111561279b578251825591602001919060010190612780565b506127a79291506127ab565b5090565b5b808211156127a757600081556001016127ac565b80356001600160a01b038116811461073357600080fd5b600082601f8301126127e857600080fd5b81356001600160401b0381111561280157612801614ec7565b612814601f8201601f1916602001614c8c565b81815284602083860101111561282957600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561285857600080fd5b612861826127c0565b9392505050565b6000806040838503121561287b57600080fd5b612884836127c0565b9150612892602084016127c0565b90509250929050565b6000806000606084860312156128b057600080fd5b6128b9846127c0565b92506128c7602085016127c0565b9150604084013590509250925092565b6000806000806000608086880312156128ef57600080fd5b6128f8866127c0565b9450612906602087016127c0565b93506040860135925060608601356001600160401b038082111561292957600080fd5b818801915088601f83011261293d57600080fd5b81358181111561294c57600080fd5b89602082850101111561295e57600080fd5b9699959850939650602001949392505050565b60008060006040848603121561298657600080fd5b61298f846127c0565b925060208401356001600160401b03808211156129ab57600080fd5b818601915086601f8301126129bf57600080fd5b8135818111156129ce57600080fd5b8760208260051b85010111156129e357600080fd5b6020830194508093505050509250925092565b60008060408385031215612a0957600080fd5b612a12836127c0565b915060208301358015158114612a2757600080fd5b809150509250929050565b60008060408385031215612a4557600080fd5b612a4e836127c0565b946020939093013593505050565b60006020808385031215612a6f57600080fd5b82356001600160401b03811115612a8557600080fd5b8301601f81018513612a9657600080fd5b8035612aa9612aa482614cbc565b614c8c565b80828252848201915084840188868560051b8701011115612ac957600080fd5b600094505b83851015612af357612adf816127c0565b835260019490940193918501918501612ace565b50979650505050505050565b600060208284031215612b1157600080fd5b813561286181614edd565b600060208284031215612b2e57600080fd5b815161286181614edd565b600060208284031215612b4b57600080fd5b81356001600160401b03811115612b6157600080fd5b611ef5848285016127d7565b60008060408385031215612b8057600080fd5b82356001600160401b03811115612b9657600080fd5b612ba2858286016127d7565b95602094909401359450505050565b600060208284031215612bc357600080fd5b5035919050565b60008060408385031215612bdd57600080fd5b823591506020808401356001600160401b0380821115612bfc57600080fd5b818601915086601f830112612c1057600080fd5b8135612c1e612aa482614cbc565b8082825285820191508585018a878560051b8801011115612c3e57600080fd5b60005b84811015612cd057813586811115612c5857600080fd5b87016040818e03601f19011215612c6e57600080fd5b612c76614c64565b8982013588811115612c8757600080fd5b612c958f8c838601016127d7565b825250604082013588811115612caa57600080fd5b612cb88f8c838601016127d7565b828c0152508552509287019290870190600101612c41565b50979a909950975050505050505050565b60008060408385031215612cf457600080fd5b50508035926020909101359150565b60008151808452612d1b816020860160208601614dcf565b601f01601f19169290920160200192915050565b60008151612d41818560208601614dcf565b9290920192915050565b8054600090600181811c9080831680612d6557607f831692505b6020808410821415612d8757634e487b7160e01b600052602260045260246000fd5b818015612d9b5760018114612dac57612dd9565b60ff19861689528489019650612dd9565b60008881526020902060005b86811015612dd15781548b820152908501908301612db8565b505084890196505b50505050505092915050565b60008251612df7818460208701614dcf565b9190910192915050565b60008351612e13818460208801614dcf565b835190830190612e27818360208801614dcf565b01949350505050565b60008251612e42818460208701614dcf565b7f66756e6374696f6e2532307365747570253238253239253742732533442535429201918252507f2e3435253243312535442532436325334425354230253243312535442532436e60208201527f25334425354230253243312535442532436e6e7725334430253243636925334460408201527f25354230253243312535442532436e762533442535422535422e30303125324360608201527f2e303032352535442532432535422e303032352532432e30312535442532432560808201527f35422e30312532432e303032352535442532432535422e303032352532432e3060a08201527f30312535442532432535422e3030312532432e3030312535442535442532436f60c08201527f762533442535422535423435303025324335353030253243363530302532433860e08201527f65332535442532432535423735302532433935302532433131353025324331326101008201527f35302535442532432535423735302532433935302532433131353025324331326101208201527f35302535442532432535423435303025324335353030253243363530302532436101408201527f38653325354425324325354234653325324335653325324336653325324331356101608201527f65332535442535442532437025334425354225354225323225323336353031306101808201527f63253232253243253232253233636231623136253232253243253232253233656101a08201527f66336332642532322532432532322532336632366134662532322532432532326101c08201527f25323366323934373925323225324325323225323366656466643425323225326101e08201527f43253232253233396463656532253232253243253232253233343039316339256102008201527f32322532432532322532333133363861612532322532432532322532333033336102208201527f32373025323225324325323225323330303025323225324325323225323366616102408201527f65626437253232253544253243253542253232253233306633333735253232256102608201527f32432532322532333133343539632532322532432532322532333135353763306102808201527f25323225324325323225323331393662646525323225324325323225323332336102a08201527f38326637253232253243253232253233346239636639253232253243253232256102c08201527f32333737623666622532322532432532322532336134636566632532322532436102e08201527f25323225323363636534666425323225324325323225323365386633666525326103008201527f32253243253232253233303030253232253243253232253233666165626437256103208201527f32322535442532432535422532322532333065306530652532322532432532326103408201527f25323366336263313725323225324325323225323364353462306325323225326103608201527f43253232253233313534323535253232253243253232253233646364636463256103808201527f32322532432532322532336330353034662532322532432532322532333638626103a08201527f39623025323225324325323225323365636265326325323225324325323225326103c08201527f33323736336162253232253243253232253233636534323431253232253243256103e08201527f32322532336661656264372532322532432532322532333030302532322535446104008201527f25324325354225323225323366663030303025323225324325323225323366656104208201527f31633030253232253243253232253233666433393030253232253243253232256104408201527f32336663353530302532322532432532322532336662373130302532322532436104608201527f25323225323366623865303025323225324325323225323366616161303025326104808201527f32253243253232253233663963363030253232253243253232253233663865336104a08201527f30302532322532432532322532336637666630302532322532432532322532336104c08201527f30303025323225324325323225323366616562643725323225354425324325356104e08201527f42253232253233303034373333253232253243253232253233326236613464256105008201527f32322532432532322532333536386436362532322532432532322532336135636105208201527f31616525323225324325323225323366336634663625323225324325323225326105408201527f33646364666535253232253243253232253233646638303830253232253243256105608201527f32322532336362306230612532322532432532322532336164303830662532326105808201527f25324325323225323338653034313325323225324325323225323330303025326105a08201527f32253243253232253233666165626437253232253544253243253542253232256105c08201527f32333165313631392532322532432532322532333363323833312532322532436105e08201527f25323225323335643432346525323225324325323225323338633636373725326106008201527f32253243253232253233616437373837253232253243253232253233616336376106208201527f35622532322532432532322532336338363136362532322532432532322532336106408201527f66303738623325323225324325323225323365633837383225323225324325326106608201527f32253233646664653830253232253243253232253233666165626437253232256106808201527f32432532322532333030302532322535442532432535422532322532333030386106a08201527f30383025323225324325323225323330303830383025323225324325323225326106c08201527f33313738633863253232253243253232253233663766663030253232253243256106e08201527f32322532333436613361332532322532432532322532333564616561652532326107008201527f25324325323225323337346261626125323225324325323225323338626335636107208201527f35253232253243253232253233613264316431253232253243253232253233626107408201527f35646164612532322532432532322532333030302532322532432532322532336107608201527f66616562643725323225354425324325354225323225323336363939303025326107808201527f32253243253232253233393963633333253232253243253232253233636365656107a08201527f36362532322532432532322532333030363639392532322532432532322532336107c08201527f33333939636325323225324325323225323339393030363625323225324325326107e08201527f32253233636333333939253232253243253232253233666636363030253232256108008201527f32432532322532336666393930302532322532432532322532336666636330306108208201527f25323225324325323225323330303025323225324325323225323366616562646108408201527f37253232253544253243253542253232253233303030253232253243253232256108608201527f32336666662532322532432532322532333030302532322532432532322532336108808201527f66666625323225324325323225323330303025323225324325323225323366666108a08201527f66253232253243253232253233303030253232253243253232253233666666256108c08201527f32322532432532322532333030302532322532432532322532336666662532326108e08201527f25324325323225323330303025323225324325323225323366666625323225356109008201527f44253243253542253232253233326336653439253232253243253232253233366109208201527f31383536352532322532432532322532333936396338312532322532432532326109408201527f25323363626233396425323225324325323225323365356265616225323225326109608201527f43253232253233666663396239253232253243253232253233663562613963256109808201527f32322532432532322532336562616237662532322532432532322532336531396109a08201527f63363225323225324325323225323364363863343525323225324325323225326109c08201527f33303030253232253243253232253233666165626437253232253544253243256109e08201527f3542253232253233363530313063253232253243253232253233636231623136610a008201527f2532322532432532322532336566336332642532322532432532322532336632610a208201527f3661346625323225324325323225323366323934373925323225324325323225610a408201527f3233666564666434253232253243253232253233396463656532253232253243610a608201527f2532322532333430393163392532322532432532322532333133363861612532610a808201527f3225324325323225323330333332373025323225324325323225323366616562610aa08201527f6437253232253243253232253233303030253232253544253544253243637265610ac08201527f61746543616e7661732532383730302532433935302532392532436e6f697365610ae08201527f53656564253238746f6b656e49642532392532436e6f4c6f6f70253238253239610b008201527f2532436e6f5374726f6b65253238253239253243726563744d6f646525323843610b208201527f454e544552253239253243636f6c6f724d6f646525323848534c253239253243610b408201527f706978656c44656e73697479253238352532392532436f2533446e6f69736525610b608201527f32436625334466696c6c253243622533446e6f46696c6c253243712533447769610b808201527f6474682532436125334468656967687425324379792533447061727365496e74610ba08201527f253238686173682e737562737472696e67253238302532433125323925323925610bc08201527f3243636925334463692535427061727365496e74253238686173682e73756273610be08201527f7472696e67253238312532433225323925323925354425324377253344732535610c008201527f427061727365496e74253238686173682e737562737472696e67253238322532610c208201527f4333253239253239253544253243782533447061727365496e74253238686173610c408201527f682e737562737472696e6725323833253243342532392532392532437a7a2533610c608201527f447061727365496e74253238686173682e737562737472696e67253238342532610c808201527f433525323925323925324361612533446e762535427825354425354230253544610ca08201527f25324376622533446e7625354278253544253542312535442532436762253344610cc08201527f6f76253542782535442535427a7a253544253243666625334425354231652d35610ce08201527f25324361612535442532437a2533447061727365496e74253238686173682e73610d008201527f7562737472696e6725323835253243362532392532392532437a322533447a25610d208201527f324231253243672533447061727365496e74253238686173682e737562737472610d408201527f696e672532383625324337253239253239253242312532436e6e772533446666610d608201527f2535427061727365496e74253238686173682e737562737472696e6725323837610d808201527f2532433825323925323925354425374466756e6374696f6e2532306472617725610da08201527f32382532392537426261636b67726f756e64253238702535427a253544253542610dc08201527f3130253544253239253243322533442533447825374325374333253344253344610de08201527f782533466e6e2533446e6e772533416e6e2533446161253342666f722532386c610e008201527f657425323065253344323525334265253343253344712d323525334265253242610e208201527f25334477253239666f722532386c657425323063253344323525334263253343610e408201527f253344612d323525334263253242253344772532396e2533446f253238652532610e608201527f416e6e2532436325324161612532392532436e322533446f2532386525324176610e808201527f622532436325324176622532392532436e332533446f25323825323865253242610ea08201527f67622532416e25323925324161612532432532386325324267622532416e3225610ec08201527f323925324176622532392532436e342533446f25323825323865253242676225610ee08201527f32416e3325323925324161612532432532386325324267622532416e33253239610f008201527f25324176622532392532436e352533446f253238253238652532426762253241610f208201527f6e3425323925324161612532432532386325324267622532416e342532392532610f408201527f4176622532392532433025334425334479792533466525334371253246672533610f608201527f466e352533452e3538253346622532382532392533416e352533452e35352533610f808201527f4666253238702535427a253544253542302535442532392533416e352533452e610fa08201527f353325334666253238702535427a253544253542312535442532392533416e35610fc08201527f2533452e3525334666253238702535427a253544253542322535442532392533610fe08201527f416e352533452e343725334666253238702535427a25354425354233253544256110008201527f32392533416e352533452e3434253346622532382532392533416e352533452e6110208201527f343125334666253238702535427a253544253542342535442532392533416e356110408201527f2533452e333825334666253238702535427a25354425354235253544253239256110608201527f33416e352533452e333525334666253238702535427a253544253542362535446110808201527f2532392533416e352533452e333125334666253238702535427a2535442535426110a08201527f372535442532392533416e352533452e323825334666253238702535427a25356110c08201527f44253542382535442532392533416e352533452e3235253346662532387025356110e08201527f427a25354425354239253544253239253341622532382532392533416e3525336111008201527f452e3538253346622532382532392533416e352533452e3535253346662532386111208201527f702535427a32253544253542302535442532392533416e352533452e353325336111408201527f4666253238702535427a32253544253542312535442532392533416e352533456111608201527f2e3525334666253238702535427a32253544253542322535442532392533416e6111808201527f352533452e343725334666253238702535427a322535442535423325354425326111a08201527f392533416e352533452e3434253346622532382532392533416e352533452e346111c08201527f3125334666253238702535427a32253544253542342535442532392533416e356111e08201527f2533452e333825334666253238702535427a32253544253542352535442532396112008201527f2533416e352533452e333525334666253238702535427a3225354425354236256112208201527f35442532392533416e352533452e333125334666253238702535427a322535446112408201527f253542372535442532392533416e352533452e323825334666253238702535426112608201527f7a32253544253542382535442532392533416e352533452e32352533466625326112808201527f38702535427a32253544253542392535442532392533416225323825323925336112a08201527f413125334425334479792533466e352533452e362533466225323825323925336112c08201527f416e352533452e3425334666253238702535427a2535442535423325354425326112e08201527f3925334162253238253239253341662532383165332532416e322532433130306113008201527f2532416e352532433130302532416e35253239253243726563742532386525326113208201527f43632532437725323925334230253344253344636925323625323625323870756113408201527f7368253238253239253243622532382532392532437374726f6b6525323870256113608201527f35427a25354425354231302535442532392532437374726f6b655765696768746113808201527f25323831353730253239253243636972636c65253238712532463225324361256113a08201527f324632253243326533253239253243706f7025323825323925323925324370756113c08201527f73682532382532392532437465787453697a65253238332532392532437465786113e08201527f74416c69676e253238524947485425323925324366253238702535427a2535446114008201527f253542313125354425323925324374657874253238253232466f6c64656425326114208201527f3046616365732e253230323032322e253232253243712d3235253243612d31356114408201527f2532392532437465787425323868617368253243712d3235253243612d3130256114608201527f3239253243706f702532382532392537442533432532467363726970742533456114808201527f253343253246626f647925334525334325324668746d6c2533450000000000006114a08201526114ba01919050565b600082516147a0818460208701614dcf565b600b60fa1b920191825250600101919050565b600084516147c5818460208901614dcf565b6e3d913a3930b4ba2fba3cb832911d1160891b9083019081526147eb600f820186612d4b565b6a1116113b30b63ab2911d1160a91b8152905061480b600b820185612d4b565b61227d60f01b81526002019695505050505050565b7f646174613a746578742f68746d6c2c25334368746d6c2533452533436865616481527f2533452533437363726970742532307372632533442532320000000000000000602082015260006148786038830187612d4b565b7412991912991834b73a32b3b934ba3c9299a212991960591b81526148a06015820187612d4b565b90507f25323225323063726f73736f726967696e253344253232616e6f6e796d6f757381527f253232253345253343253246736372697074253345253343253246686561642560208201527f3345253343626f6479253345253343736372697074253345766172253230746f6040820152671ad95b9259094cd160c21b60608201528451614935816068840160208901614dcf565b721299a13b30b91299183430b9b41299a212991960691b60689290910191820152835161496981607b840160208801614dcf565b651299191299a160d11b607b92909101918201526081019695505050505050565b605b60f81b8152600082516149a6816001850160208701614dcf565b605d60f81b6001939091019283015250600201919050565b7f7b226e616d65223a2022466f6c64656446616365732023000000000000000000815260008a516149f6816017850160208f01614dcf565b8a5190830190614a0d816017840160208f01614dcf565b6f1132bc3a32b93730b62fbab936111d1160811b60179290910191820152614a38602782018b612d4b565b90508851614a4a818360208d01614dcf565b6226743d60e81b91019081528751614a69816003840160208c01614dcf565b6a11161134b6b0b3b2911d1160a91b60039290910191820152614a8f600e820188612d4b565b90508551614aa1818360208a01614dcf565b614af6614ae9614ae3614ac8614ac28587016226743d60e81b815260030190565b8a612d2f565b6e11161130ba3a3934b13aba32b9911d60891b8152600f0190565b87612d2f565b607d60f81b815260010190565b9d9c50505050505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251614b3f81601d850160208701614dcf565b91909101601d0192915050565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6020815260006128616020830184612d03565b604081526000614bc66040830185612d03565b8281036020840152614bd88185612d03565b95945050505050565b6020808252600c908201526b6e6f7420736f20666173742160a01b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600e908201526d11985a5b1959081d1bc81cd95b9960921b604082015260600190565b604080519081016001600160401b0381118282101715614c8657614c86614ec7565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614cb457614cb4614ec7565b604052919050565b60006001600160401b03821115614cd557614cd5614ec7565b5060051b60200190565b600061ffff808316818516808303821115612e2757612e27614e85565b60008219821115614d0f57614d0f614e85565b500190565b600060ff821660ff84168060ff03821115614d3157614d31614e85565b019392505050565b600082614d4857614d48614e9b565b500490565b6000816000190483118215151615614d6757614d67614e85565b500290565b600060ff821660ff84168160ff0481118215151615614d8d57614d8d614e85565b029392505050565b600082821015614da757614da7614e85565b500390565b600060ff821660ff841680821015614dc657614dc6614e85565b90039392505050565b60005b83811015614dea578181015183820152602001614dd2565b838111156114685750506000910152565b600181811c90821680614e0f57607f821691505b60208210811415614e3057634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415614e4a57614e4a614e85565b5060010190565b600060ff821660ff811415614e6857614e68614e85565b60010192915050565b600082614e8057614e80614e9b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611cc257600080fdfe222c20226465736372697074696f6e223a202235333320466f6c64656446616365732e205472616974732067656e657261746564206f6e20636861696e2026206d657461646174612c20696d61676573206d6972726f726564206f6e20636861696e207065726d616e656e746c792e222c4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122098eab694f46d5b5715dfb6ecbb19ef7b08ecd8497fe4b6cb4cc6c128b803846a64736f6c63430008070033
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.