ERC-721
Overview
Max Total Supply
2,545 Chickens
Holders
612
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
0 ChickensLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Chickens
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-08 */ // File: contracts/ITraits.sol pragma solidity ^0.8.0; interface ITraits { function tokenURI(uint256 tokenId) external view returns (string memory); } // File: contracts/ERC721.sol pragma solidity ^0.8.7; /// @notice Modern and gas efficient ERC-721 + ERC-20/EIP-2612-like implementation, /// including the MetaData, and partially, Enumerable extensions. contract ERC721 { /*/////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed spender, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /*/////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ address implementation_; address public admin; //Lame requirement from opensea /*/////////////////////////////////////////////////////////////// ERC-721 STORAGE //////////////////////////////////////////////////////////////*/ uint256 public totalSupply; uint256 public oldSupply; uint256 public minted; mapping(address => uint256) public balanceOf; mapping(uint256 => address) public ownerOf; mapping(uint256 => address) public getApproved; mapping(address => mapping(address => bool)) public isApprovedForAll; /*/////////////////////////////////////////////////////////////// VIEW FUNCTION //////////////////////////////////////////////////////////////*/ function owner() external view returns (address) { return admin; } /*/////////////////////////////////////////////////////////////// ERC-20-LIKE LOGIC //////////////////////////////////////////////////////////////*/ function transfer(address to, uint256 tokenId) external { require(msg.sender == ownerOf[tokenId], "NOT_OWNER"); _transfer(msg.sender, to, tokenId); } /*/////////////////////////////////////////////////////////////// ERC-721 LOGIC //////////////////////////////////////////////////////////////*/ function supportsInterface(bytes4 interfaceId) external pure returns (bool supported) { supported = interfaceId == 0x80ac58cd || interfaceId == 0x5b5e139f; } function approve(address spender, uint256 tokenId) external { address owner_ = ownerOf[tokenId]; require(msg.sender == owner_ || isApprovedForAll[owner_][msg.sender], "NOT_APPROVED"); getApproved[tokenId] = spender; emit Approval(owner_, spender, tokenId); } function setApprovalForAll(address operator, bool approved) external { isApprovedForAll[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } function transferFrom(address from, address to, uint256 tokenId) public { require( msg.sender == from || msg.sender == getApproved[tokenId] || isApprovedForAll[from][msg.sender], "NOT_APPROVED" ); _transfer(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId) external { safeTransferFrom(from, to, tokenId, ""); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public { transferFrom(from, to, tokenId); if (to.code.length != 0) { // selector = `onERC721Received(address,address,uint,bytes)` (, bytes memory returned) = to.staticcall(abi.encodeWithSelector(0x150b7a02, msg.sender, from, tokenId, data)); bytes4 selector = abi.decode(returned, (bytes4)); require(selector == 0x150b7a02, "NOT_ERC721_RECEIVER"); } } /*/////////////////////////////////////////////////////////////// INTERNAL UTILS //////////////////////////////////////////////////////////////*/ function _transfer(address from, address to, uint256 tokenId) internal { require(ownerOf[tokenId] == from, "not owner"); balanceOf[from]--; balanceOf[to]++; delete getApproved[tokenId]; ownerOf[tokenId] = to; emit Transfer(from, to, tokenId); } function _mint(address to, uint256 tokenId) internal { require(ownerOf[tokenId] == address(0), "ALREADY_MINTED"); uint supply = oldSupply + minted++; uint maxSupply = 5000; require(supply <= maxSupply, "MAX SUPPLY REACHED"); totalSupply++; // This is safe because the sum of all user // balances can't exceed type(uint256).max! unchecked { balanceOf[to]++; } ownerOf[tokenId] = to; emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal { address owner_ = ownerOf[tokenId]; require(ownerOf[tokenId] != address(0), "NOT_MINTED"); totalSupply--; balanceOf[owner_]--; delete ownerOf[tokenId]; emit Transfer(owner_, address(0), tokenId); } } // File: contracts/ERC20.sol pragma solidity ^0.8.7; /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) contract ERC20 { /*/////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); /*/////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ string public name; string public symbol; uint8 public decimals; /*/////////////////////////////////////////////////////////////// ERC20 STORAGE //////////////////////////////////////////////////////////////*/ uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; mapping(address => bool) public isMinter; address public ruler; /*/////////////////////////////////////////////////////////////// ERC20 LOGIC //////////////////////////////////////////////////////////////*/ constructor(string memory _name, string memory _symbol, uint8 _decimals) { ruler = msg.sender; name = _name; symbol = _symbol; decimals = _decimals; } function approve(address spender, uint256 value) external returns (bool) { allowance[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } function transfer(address to, uint256 value) external returns (bool) { balanceOf[msg.sender] -= value; // This is safe because the sum of all user // balances can't exceed type(uint256).max! unchecked { balanceOf[to] += value; } emit Transfer(msg.sender, to, value); return true; } function transferFrom( address from, address to, uint256 value ) external returns (bool) { if (allowance[from][msg.sender] != type(uint256).max) { allowance[from][msg.sender] -= value; } balanceOf[from] -= value; // This is safe because the sum of all user // balances can't exceed type(uint256).max! unchecked { balanceOf[to] += value; } emit Transfer(from, to, value); return true; } /*/////////////////////////////////////////////////////////////// ORC PRIVILEGE //////////////////////////////////////////////////////////////*/ function mint(address to, uint256 value) external { require(isMinter[msg.sender], "FORBIDDEN TO MINT"); _mint(to, value); } function burn(address from, uint256 value) external { require(isMinter[msg.sender], "FORBIDDEN TO BURN"); _burn(from, value); } /*/////////////////////////////////////////////////////////////// Ruler Function //////////////////////////////////////////////////////////////*/ function setMinter(address minter, bool status) external { require(msg.sender == ruler, "NOT ALLOWED TO RULE"); isMinter[minter] = status; } function setRuler(address ruler_) external { require(msg.sender == ruler ||ruler == address(0), "NOT ALLOWED TO RULE"); ruler = ruler_; } /*/////////////////////////////////////////////////////////////// INTERNAL UTILS //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 value) internal { totalSupply += value; // This is safe because the sum of all user // balances can't exceed type(uint256).max! unchecked { balanceOf[to] += value; } emit Transfer(address(0), to, value); } function _burn(address from, uint256 value) internal { balanceOf[from] -= value; // This is safe because a user won't ever // have a balance larger than totalSupply! unchecked { totalSupply -= value; } emit Transfer(from, address(0), value); } } // File: hardhat/console.sol pragma solidity >= 0.4.22 <0.9.0; library console { address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67); function _sendLogPayload(bytes memory payload) private view { uint256 payloadLength = payload.length; address consoleAddress = CONSOLE_ADDRESS; assembly { let payloadStart := add(payload, 32) let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0) } } function log() internal view { _sendLogPayload(abi.encodeWithSignature("log()")); } function logInt(int p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(int)", p0)); } function logUint(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function logString(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function logBool(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function logAddress(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function logBytes(bytes memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); } function logBytes1(bytes1 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); } function logBytes2(bytes2 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); } function logBytes3(bytes3 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); } function logBytes4(bytes4 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); } function logBytes5(bytes5 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); } function logBytes6(bytes6 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); } function logBytes7(bytes7 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); } function logBytes8(bytes8 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); } function logBytes9(bytes9 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); } function logBytes10(bytes10 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); } function logBytes11(bytes11 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); } function logBytes12(bytes12 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); } function logBytes13(bytes13 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); } function logBytes14(bytes14 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); } function logBytes15(bytes15 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); } function logBytes16(bytes16 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); } function logBytes17(bytes17 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); } function logBytes18(bytes18 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); } function logBytes19(bytes19 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); } function logBytes20(bytes20 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); } function logBytes21(bytes21 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); } function logBytes22(bytes22 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); } function logBytes23(bytes23 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); } function logBytes24(bytes24 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); } function logBytes25(bytes25 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); } function logBytes26(bytes26 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); } function logBytes27(bytes27 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); } function logBytes28(bytes28 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); } function logBytes29(bytes29 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); } function logBytes30(bytes30 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); } function logBytes31(bytes31 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); } function logBytes32(bytes32 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); } function log(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function log(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function log(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function log(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function log(uint p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1)); } function log(uint p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1)); } function log(uint p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1)); } function log(uint p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1)); } function log(string memory p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1)); } function log(string memory p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); } function log(string memory p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); } function log(string memory p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); } function log(bool p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1)); } function log(bool p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); } function log(bool p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); } function log(bool p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); } function log(address p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1)); } function log(address p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); } function log(address p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); } function log(address p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); } function log(uint p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2)); } function log(uint p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2)); } function log(uint p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2)); } function log(uint p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2)); } function log(uint p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2)); } function log(uint p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2)); } function log(uint p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2)); } function log(uint p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2)); } function log(uint p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2)); } function log(uint p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2)); } function log(uint p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2)); } function log(uint p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2)); } function log(uint p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2)); } function log(uint p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2)); } function log(uint p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2)); } function log(uint p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2)); } function log(string memory p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2)); } function log(string memory p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2)); } function log(string memory p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2)); } function log(string memory p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2)); } function log(string memory p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2)); } function log(string memory p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); } function log(string memory p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); } function log(string memory p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); } function log(string memory p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2)); } function log(string memory p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); } function log(string memory p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); } function log(string memory p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); } function log(string memory p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2)); } function log(string memory p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); } function log(string memory p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); } function log(string memory p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); } function log(bool p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2)); } function log(bool p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2)); } function log(bool p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2)); } function log(bool p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2)); } function log(bool p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2)); } function log(bool p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); } function log(bool p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); } function log(bool p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); } function log(bool p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2)); } function log(bool p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); } function log(bool p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); } function log(bool p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); } function log(bool p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2)); } function log(bool p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); } function log(bool p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); } function log(bool p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); } function log(address p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2)); } function log(address p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2)); } function log(address p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2)); } function log(address p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2)); } function log(address p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2)); } function log(address p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); } function log(address p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); } function log(address p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); } function log(address p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2)); } function log(address p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); } function log(address p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); } function log(address p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); } function log(address p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2)); } function log(address p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); } function log(address p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); } function log(address p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); } function log(uint p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); } } // File: contracts/Chicken.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.7; contract Chickens is ERC721 { uint256 public constant MAX_SUPPLY = 5000; bool public mintActive; uint8[] public raritiesFatness; uint8[] public aliasesFatness; // used to ensure there are no duplicates mapping(uint256 => uint256) public existingCombinations; // fatness level: 1-5 uint256[] public feedingPrice; mapping(address => bool) public auth; mapping(uint256 => Chicken) internal chickens; mapping(uint256 => Action) public activities; // god chickens : Chicken, Cow, Omnipollo, FatHen mapping(uint256 => uint8) public godChicken; // tokenId => godId uint8 public godMinted; // reference to Traits ITraits public traits; ERC20 public egg; uint256 public eggClaimedTotal; bytes32 internal entropySauce; mapping(uint256 => uint256) public mintBlocks; function setAddresses( address _traits, address _egg ) external onlyOwner { traits = ITraits(_traits); egg = ERC20(_egg); } function setAuth(address add, bool isAuth) external onlyOwner { auth[add] = isAuth; } function transferOwnership(address newOwner) external onlyOwner { admin = newOwner; } function setMintStatus(bool _status) external onlyOwner { mintActive = _status; } // Render function tokenURI(uint256 tokenId) public view returns (string memory) { // chickens[tokenId] empty check require(mintBlocks[tokenId] != block.number, "ERC721Metadata: URI query for nonexistent token"); return traits.tokenURI(tokenId); } event ActionMade( address owner, uint256 id, uint256 timestamp, uint8 activity ); event ActionFeedChickens( address owner, uint256 id, uint256 newLevel ); event GodChickenMinted( address owner, uint256 tokenId, uint8 godId ); struct Chicken { uint8 comb; uint8 face; uint8 body; // Colors - Primary, Secondary, Tertiary uint8 color1; uint8 color2; uint8 color3; uint8 fatness; uint8 lvlFatness; uint16 level; } enum Actions { UNSTAKED, FARMING, LEVELUP } struct Action { address owner; uint88 timestamp; Actions action; } // Constructor constructor() { admin = msg.sender; } function initialize() public onlyOwner { admin = msg.sender; auth[msg.sender] = true; mintActive = false; // A.J. Walker's Alias Algorithm raritiesFatness = [189, 253, 127, 94, 31]; aliasesFatness = [1, 4, 0, 0, 0]; feedingPrice = [ 3 ether, 5 ether, 10 ether, 20 ether ]; } // Modifiers modifier noCheaters() { uint256 size = 0; address acc = msg.sender; assembly { size := extcodesize(acc) } require( auth[msg.sender] || (msg.sender == tx.origin && size == 0), "you're trying to cheat!" ); _; // We'll use the last caller hash to add entropy to next caller entropySauce = keccak256(abi.encodePacked(acc, block.coinbase, entropySauce)); } modifier ownerOfChicken(uint256 id) { require( ownerOf[id] == msg.sender || activities[id].owner == msg.sender, "not your chicken" ); _; } modifier onlyOwner() { require(msg.sender == admin); _; } // Public Functions function mintChickens() public noCheaters { require(mintActive, "Must be active to mint"); require(totalSupply <= MAX_SUPPLY, "All supply minted"); uint256 cost = mintPriceEgg(); if (cost > 0) egg.burn(msg.sender, cost); _mintChicken(msg.sender); } function feedChickens(uint256 id) public noCheaters { _claim(id); uint8 lvlFatness = chickens[id].lvlFatness; require(lvlFatness < 5, "Already max level"); egg.burn(msg.sender, feedingPrice[lvlFatness-1]); chickens[id].lvlFatness = lvlFatness + 1; emit ActionFeedChickens(msg.sender, id, lvlFatness + 1); } function mintGodChickens(uint256 id) public noCheaters { require(godMinted < 4, "Minted all"); require(chickens[id].level >= 24, "Low level"); _claim(id); egg.burn(msg.sender, 300 ether); godMinted++; godChicken[id] = godMinted; emit GodChickenMinted(msg.sender, id, godMinted); } function doAction(uint256 id, Actions action_) public ownerOfChicken(id) noCheaters { _doAction(id, msg.sender, action_); } function _doAction( uint256 id, address chickenOwner, Actions action_ ) internal { Action memory action = activities[id]; require(action.action != action_, "already doing that"); // if ((action.action == Actions.FARMING) && (action_ == Actions.LEVELUP) || (action.action == Actions.LEVELUP) && (action_ == Actions.FARMING)) // not allowed? // Picking the largest value between block.timestamp, action.timestamp and startingTime uint88 timestamp = uint88( block.timestamp > action.timestamp ? block.timestamp : action.timestamp ); if (action.action == Actions.UNSTAKED) _transfer(chickenOwner, address(this), id); else { if (block.timestamp > action.timestamp) _claim(id); timestamp = timestamp > action.timestamp ? timestamp : action.timestamp; } address owner_ = action_ == Actions.UNSTAKED ? address(0) : chickenOwner; if (action_ == Actions.UNSTAKED) _transfer(address(this), chickenOwner, id); activities[id] = Action({ owner: owner_, timestamp: timestamp, action: action_ }); emit ActionMade(chickenOwner, id, block.timestamp, uint8(action_)); } function doActionWithManyChickens(uint256[] calldata ids, Actions action_) external { for (uint256 index = 0; index < ids.length; index++) { require( ownerOf[ids[index]] == msg.sender || activities[ids[index]].owner == msg.sender, "Not your chicken" ); _doAction(ids[index], msg.sender, action_); } } function claim(uint256[] calldata ids) external { for (uint256 index = 0; index < ids.length; index++) { _claim(ids[index]); } } function _claim(uint256 id) internal noCheaters { Action memory action = activities[id]; if (block.timestamp <= action.timestamp) return; uint256 timeDiff = uint256(block.timestamp - action.timestamp); if (action.action == Actions.FARMING) { uint256 eggAmount = claimableEgg(timeDiff, id, action.owner); egg.mint(action.owner, eggAmount); eggClaimedTotal += eggAmount; } else if (action.action == Actions.LEVELUP) { chickens[id].level += uint16(timeDiff / 1 days); } activities[id].timestamp = uint88(block.timestamp); } // Viewers function getTokenTraits(uint256 tokenId) external view virtual returns (Chicken memory) { if (mintBlocks[tokenId] == block.number) return chickens[0]; return chickens[tokenId]; } function mintPriceEgg() public view returns (uint256) { uint256 supply = minted; if (supply < 2500) return 0; if (supply < 3000) return 10 ether; if (supply < 3500) return 20 ether; if (supply < 4000) return 25 ether; if (supply < 4500) return 30 ether; if (supply < 5000) return 50 ether; return 50 ether; } function claimable(uint256 id) external view returns (uint256) { if (activities[id].action == Actions.FARMING) { uint256 timeDiff = block.timestamp > activities[id].timestamp ? uint256(block.timestamp - activities[id].timestamp) : 0; return claimableEgg(timeDiff, id, activities[id].owner); } if (activities[id].action == Actions.LEVELUP) { uint256 timeDiff = block.timestamp > activities[id].timestamp ? uint256(block.timestamp - activities[id].timestamp) : 0; return timeDiff / 1 days; } return 0; } function name() external pure returns (string memory) { return "Chickens"; } function symbol() external pure returns (string memory) { return "Chickens"; } // Internal Functions function _mintChicken(address to) internal { uint16 id = uint16(totalSupply + 1); mintBlocks[id] = block.number; uint256 seed = random(id); generate(id, seed); _mint(to, id); } function claimableEgg(uint256 timeDiff, uint256 id, address owner_) internal view returns (uint256) { if(eggClaimedTotal >= 250_000 ether) return 0; Chicken memory chicken = chickens[id]; uint256 eggAmount = (timeDiff * 1 ether * chicken.lvlFatness) / 1 days; return eggAmount; } function generate(uint256 tokenId, uint256 seed) internal returns (Chicken memory t) { t = selectTraits(seed); chickens[tokenId] = t; return t; // keep the following code for future use, current version using different seed, so no need for now // if (existingCombinations[structToHash(t)] == 0) { // chickens[tokenId] = t; // existingCombinations[structToHash(t)] = tokenId; // return t; // } // return generate(tokenId, random(seed)); } function selectTrait(uint16 seed, uint8 traitType) internal view returns (uint8) { if (traitType == 0) return uint8(seed) % 12; if (traitType == 1) return uint8(seed) % 12; if (traitType == 2) return uint8(seed) % 12; if (traitType == 3) return uint8(seed) % 20; if (traitType == 4) return uint8(seed) % 20; if (traitType == 5) return uint8(seed) % 20; if (traitType == 6) return uint8(seed) % 5; // fatness rarity uint8 trait = uint8(seed) % uint8(raritiesFatness.length); if (seed >> 8 < raritiesFatness[trait]) return trait; return aliasesFatness[trait]; } function selectTraits(uint256 seed) internal view returns (Chicken memory t) { t.comb = selectTrait(uint16(seed & 0xFFFF), 0); seed >>= 16; t.face = selectTrait(uint16(seed & 0xFFFF), 1); seed >>= 16; t.body = selectTrait(uint16(seed & 0xFFFF), 2); seed >>= 16; t.color1 = selectTrait(uint16(seed & 0xFFFF), 3); seed >>= 16; t.color2 = selectTrait(uint16(seed & 0xFFFF), 4); seed >>= 16; t.color3 = selectTrait(uint16(seed & 0xFFFF), 5); seed >>= 16; t.fatness = selectTrait(uint16(seed & 0xFFFF), 6); seed >>= 16; t.lvlFatness = selectTrait(uint16(seed & 0xFFFF), 7) + 1; t.level = 1; } function structToHash(Chicken memory s) internal pure returns (uint256) { return uint256(bytes32( abi.encodePacked( s.comb, s.face, s.body, s.color1, s.color2, s.color3, s.fatness, s.lvlFatness ) )); } function random(uint256 seed) internal view returns (uint256) { return uint256(keccak256(abi.encodePacked( tx.origin, blockhash(block.number - 1), block.timestamp, seed ))); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newLevel","type":"uint256"}],"name":"ActionFeedChickens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"activity","type":"uint8"}],"name":"ActionMade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","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":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"godId","type":"uint8"}],"name":"GodChickenMinted","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":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"activities","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint88","name":"timestamp","type":"uint88"},{"internalType":"enum Chickens.Actions","name":"action","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"aliasesFatness","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"auth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"claimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"enum Chickens.Actions","name":"action_","type":"uint8"}],"name":"doAction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"enum Chickens.Actions","name":"action_","type":"uint8"}],"name":"doActionWithManyChickens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"egg","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eggClaimedTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"existingCombinations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"feedChickens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"feedingPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenTraits","outputs":[{"components":[{"internalType":"uint8","name":"comb","type":"uint8"},{"internalType":"uint8","name":"face","type":"uint8"},{"internalType":"uint8","name":"body","type":"uint8"},{"internalType":"uint8","name":"color1","type":"uint8"},{"internalType":"uint8","name":"color2","type":"uint8"},{"internalType":"uint8","name":"color3","type":"uint8"},{"internalType":"uint8","name":"fatness","type":"uint8"},{"internalType":"uint8","name":"lvlFatness","type":"uint8"},{"internalType":"uint16","name":"level","type":"uint16"}],"internalType":"struct Chickens.Chicken","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"godChicken","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"godMinted","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","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":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mintBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintChickens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"mintGodChickens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintPriceEgg","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"oldSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"raritiesFatness","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","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":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_traits","type":"address"},{"internalType":"address","name":"_egg","type":"address"}],"name":"setAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"},{"internalType":"bool","name":"isAuth","type":"bool"}],"name":"setAuth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setMintStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"supported","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":[],"name":"traits","outputs":[{"internalType":"contract ITraits","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50600180546001600160a01b03191633179055612f70806100326000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c80638de7ddd311610167578063cc1ed202116100ce578063e1fc334f11610087578063e1fc334f14610667578063e3abc3741461067f578063e985e9c514610692578063f2fde38b146106c0578063f363c7b5146106d3578063f851a440146106db57600080fd5b8063cc1ed202146105de578063cd5d2118146105f1578063d0fb0f8c14610614578063d1d58b2514610634578063d8d8422914610647578063dc2f500c1461065457600080fd5b8063a9059cbb11610120578063a9059cbb14610577578063b88d4fde1461058a578063bc39eb5f1461059d578063bfc56b4a146105b0578063c06abfc7146105b8578063c87b56dd146105cb57600080fd5b80638de7ddd31461050857806390107afe1461051157806394e568471461052457806395d89b41146102d9578063a1b8f37414610544578063a22cb4651461056457600080fd5b806332cb6b0c1161020b5780636352211e116101c45780636352211e146104805780636ba4c138146104a957806370a08231146104bc57806376f0d51a146104dc5780638129fc1c146104ef5780638da5cb5b146104f757600080fd5b806332cb6b0c14610400578063338eebf4146104095780633cb16c671461043e57806342842e0e146104515780634f02c420146104645780635f69c1ac1461046d57600080fd5b80630b44a2181161025d5780630b44a2181461035c5780630d1657e81461036f57806318160ddd146103c45780631f85e3ca146103cd57806323b872dd146103e057806325fd90f3146103f357600080fd5b806301ffc9a71461029a57806305850844146102c257806306fdde03146102d9578063081812fc14610306578063095ea7b314610347575b600080fd5b6102ad6102a836600461279f565b6106ee565b60405190151581526020015b60405180910390f35b6102cb60035481565b6040519081526020016102b9565b604080518082019091526008815267436869636b656e7360c01b60208201525b6040516102b9919061280c565b61032f61031436600461281f565b6007602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102b9565b61035a610355366004612854565b610725565b005b61035a61036a36600461288e565b61080a565b6103b561037d36600461281f565b6010602052600090815260409020546001600160a01b03811690600160a01b81046001600160581b031690600160f81b900460ff1683565b6040516102b9939291906128d7565b6102cb60025481565b61035a6103db366004612922565b61084c565b61035a6103ee36600461293d565b610876565b6009546102ad9060ff1681565b6102cb61138881565b61042c61041736600461281f565b60116020526000908152604090205460ff1681565b60405160ff90911681526020016102b9565b6102cb61044c36600461281f565b61091c565b61035a61045f36600461293d565b61093d565b6102cb60045481565b61042c61047b36600461281f565b610958565b61032f61048e36600461281f565b6006602052600090815260409020546001600160a01b031681565b61035a6104b73660046129c5565b61098c565b6102cb6104ca366004612a07565b60056020526000908152604090205481565b61035a6104ea366004612a31565b6109ca565b61035a610ad0565b6001546001600160a01b031661032f565b6102cb60145481565b61035a61051f366004612a54565b610bea565b61053761053236600461281f565b610c39565b6040516102b99190612a7e565b6102cb61055236600461281f565b600c6020526000908152604090205481565b61035a61057236600461288e565b610db2565b61035a610585366004612854565b610e1e565b61035a610598366004612b9b565b610e7f565b61042c6105ab36600461281f565b610fb6565b6102cb610fc6565b60135461032f906001600160a01b031681565b6102f96105d936600461281f565b61106f565b61035a6105ec366004612c46565b61115d565b6102ad6105ff366004612a07565b600e6020526000908152604090205460ff1681565b6102cb61062236600461281f565b60166020526000908152604090205481565b6102cb61064236600461281f565b611259565b60125461042c9060ff1681565b61035a61066236600461281f565b6113ad565b60125461032f9061010090046001600160a01b031681565b61035a61068d36600461281f565b6115d2565b6102ad6106a0366004612a54565b600860209081526000928352604080842090915290825290205460ff1681565b61035a6106ce366004612a07565b6117c3565b61035a6117fc565b60015461032f906001600160a01b031681565b60006380ac58cd60e01b6001600160e01b03198316148061071f5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6000818152600660205260409020546001600160a01b03163381148061076e57506001600160a01b038116600090815260086020908152604080832033845290915290205460ff165b6107ae5760405162461bcd60e51b815260206004820152600c60248201526b1393d517d054141493d5915160a21b60448201526064015b60405180910390fd5b60008281526007602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6001546001600160a01b0316331461082157600080fd5b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6001546001600160a01b0316331461086357600080fd5b6009805460ff1916911515919091179055565b336001600160a01b03841614806108a357506000818152600760205260409020546001600160a01b031633145b806108d157506001600160a01b038316600090815260086020908152604080832033845290915290205460ff165b61090c5760405162461bcd60e51b815260206004820152600c60248201526b1393d517d054141493d5915160a21b60448201526064016107a5565b61091783838361198c565b505050565b600d818154811061092c57600080fd5b600091825260209091200154905081565b61091783838360405180602001604052806000815250610e7f565b600b818154811061096857600080fd5b9060005260206000209060209182820401919006915054906101000a900460ff1681565b60005b81811015610917576109b88383838181106109ac576109ac612c9a565b90506020020135611aa4565b806109c281612cc6565b91505061098f565b60008281526006602052604090205482906001600160a01b0316331480610a0757506000818152601060205260409020546001600160a01b031633145b610a465760405162461bcd60e51b815260206004820152601060248201526f3737ba103cb7bab91031b434b1b5b2b760811b60448201526064016107a5565b336000818152600e6020526040902054813b919060ff1680610a7057503332148015610a70575081155b610a8c5760405162461bcd60e51b81526004016107a590612cdf565b610a97853386611d08565b8041601554604051602001610aae93929190612d16565b60408051601f1981840301815291905280516020909101206015555050505050565b6001546001600160a01b03163314610ae757600080fd5b600180546001600160a01b0319163390811782556000908152600e6020908152604091829020805460ff19908116909417905560098054909316909255805160a08101825260bd815260fd92810192909252607f90820152605e6060820152601f6080820152610b5b90600a90600561263a565b506040805160a08101825260018152600460208201526000918101829052606081018290526080810191909152610b9690600b90600561263a565b50604080516080810182526729a2241af62c00008152674563918244f400006020820152678ac7230489e80000918101919091526801158e460913d000006060820152610be790600d9060046126e0565b50565b6001546001600160a01b03163314610c0157600080fd5b60128054610100600160a81b0319166101006001600160a01b0394851602179055601380546001600160a01b03191691909216179055565b610c41612728565b600082815260166020526040902054439003610d1457505060008052600f602090815260408051610120810182527ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3755460ff80821683526101008083048216958401959095526201000082048116938301939093526301000000810483166060830152640100000000810483166080830152600160281b8104831660a0830152600160301b8104831660c0830152600160381b810490921660e0820152600160401b90910461ffff169181019190915290565b506000908152600f6020908152604091829020825161012081018452905460ff80821683526101008083048216948401949094526201000082048116948301949094526301000000810484166060830152640100000000810484166080830152600160281b8104841660a0830152600160301b8104841660c0830152600160381b810490931660e0820152600160401b90920461ffff169082015290565b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000818152600660205260409020546001600160a01b03163314610e705760405162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b60448201526064016107a5565b610e7b33838361198c565b5050565b610e8a848484610876565b6001600160a01b0383163b15610fb0576000836001600160a01b031663150b7a0233878686604051602401610ec29493929190612d44565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051610efb9190612d77565b600060405180830381855afa9150503d8060008114610f36576040519150601f19603f3d011682016040523d82523d6000602084013e610f3b565b606091505b50915050600081806020019051810190610f559190612d93565b9050630a85bd0160e11b6001600160e01b0319821614610fad5760405162461bcd60e51b81526020600482015260136024820152722727aa2fa2a9219b9918afa922a1a2a4ab22a960691b60448201526064016107a5565b50505b50505050565b600a818154811061096857600080fd5b6004546000906109c4811015610fde57600091505090565b610bb8811015610ff757678ac7230489e8000091505090565b610dac811015611011576801158e460913d0000091505090565b610fa081101561102b5768015af1d78b58c4000091505090565b611194811015611045576801a055690d9db8000091505090565b61138881101561105f576802b5e3af16b188000091505090565b6802b5e3af16b188000091505090565b6000818152601660205260409020546060904390036110e85760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016107a5565b60125460405163c87b56dd60e01b8152600481018490526101009091046001600160a01b03169063c87b56dd90602401600060405180830381865afa158015611135573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261071f9190810190612db0565b60005b82811015610fb057336006600086868581811061117f5761117f612c9a565b60209081029290920135835250810191909152604001600020546001600160a01b031614806111e5575033601060008686858181106111c0576111c0612c9a565b60209081029290920135835250810191909152604001600020546001600160a01b0316145b6112245760405162461bcd60e51b815260206004820152601060248201526f2737ba103cb7bab91031b434b1b5b2b760811b60448201526064016107a5565b61124784848381811061123957611239612c9a565b905060200201353384611d08565b8061125181612cc6565b915050611160565b60006001600083815260106020526040902054600160f81b900460ff166002811115611287576112876128c1565b0361131057600082815260106020526040812054600160a01b90046001600160581b031642116112b85760006112e1565b6000838152601060205260409020546112e190600160a01b90046001600160581b031642612e27565b60008481526010602052604090205490915061130990829085906001600160a01b0316611ff7565b9392505050565b6002600083815260106020526040902054600160f81b900460ff16600281111561133c5761133c6128c1565b036113a557600082815260106020526040812054600160a01b90046001600160581b0316421161136d576000611396565b60008381526010602052604090205461139690600160a01b90046001600160581b031642612e27565b90506113096201518082612e50565b506000919050565b336000818152600e6020526040902054813b919060ff16806113d7575033321480156113d7575081155b6113f35760405162461bcd60e51b81526004016107a590612cdf565b601254600460ff909116106114375760405162461bcd60e51b815260206004820152600a602482015269135a5b9d195908185b1b60b21b60448201526064016107a5565b6000838152600f60205260409020546018600160401b90910461ffff16101561148e5760405162461bcd60e51b8152602060048201526009602482015268131bddc81b195d995b60ba1b60448201526064016107a5565b61149783611aa4565b601354604051632770a7eb60e21b8152336004820152681043561a882930000060248201526001600160a01b0390911690639dc29fac90604401600060405180830381600087803b1580156114eb57600080fd5b505af11580156114ff573d6000803e3d6000fd5b50506012805460ff1692509050600061151783612e64565b82546101009290920a60ff81810219909316918316021790915560128054600087815260116020908152604091829020805493861660ff199094169390931790925591548251338152918201889052909216908201527f5adfc489bdc5da44dd63a1543f510c2154fe2b5c77842bf01fd0ad15d0b60094915060600160405180910390a180416015546040516020016115b293929190612d16565b60408051601f198184030181529190528051602090910120601555505050565b336000818152600e6020526040902054813b919060ff16806115fc575033321480156115fc575081155b6116185760405162461bcd60e51b81526004016107a590612cdf565b61162183611aa4565b6000838152600f6020526040902054600160381b900460ff166005811061167e5760405162461bcd60e51b8152602060048201526011602482015270105b1c9958591e481b585e081b195d995b607a1b60448201526064016107a5565b6013546001600160a01b0316639dc29fac33600d61169d600186612e83565b60ff16815481106116b0576116b0612c9a565b6000918252602090912001546040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561170257600080fd5b505af1158015611716573d6000803e3d6000fd5b505050508060016117279190612e9c565b6000858152600f60205260409020805460ff92909216600160381b0260ff60381b199092169190911790557f620f7ca5296af9ceccd4e69cf6fdf017af8e9d4129a4aeab21a21d1fbfc59a993385611780846001612e9c565b604080516001600160a01b039094168452602084019290925260ff169082015260600160405180910390a15080416015546040516020016115b293929190612d16565b6001546001600160a01b031633146117da57600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b336000818152600e6020526040902054813b919060ff168061182657503332148015611826575081155b6118425760405162461bcd60e51b81526004016107a590612cdf565b60095460ff1661188d5760405162461bcd60e51b8152602060048201526016602482015275135d5cdd081899481858dd1a5d99481d1bc81b5a5b9d60521b60448201526064016107a5565b61138860025411156118d55760405162461bcd60e51b8152602060048201526011602482015270105b1b081cdd5c1c1b1e481b5a5b9d1959607a1b60448201526064016107a5565b60006118df610fc6565b9050801561194c57601354604051632770a7eb60e21b8152336004820152602481018390526001600160a01b0390911690639dc29fac90604401600060405180830381600087803b15801561193357600080fd5b505af1158015611947573d6000803e3d6000fd5b505050505b611955336120ea565b50804160155460405160200161196d93929190612d16565b60408051601f1981840301815291905280516020909101206015555050565b6000818152600660205260409020546001600160a01b038481169116146119e15760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b60448201526064016107a5565b6001600160a01b0383166000908152600560205260408120805491611a0583612eb5565b90915550506001600160a01b0382166000908152600560205260408120805491611a2e83612cc6565b9091555050600081815260076020908152604080832080546001600160a01b0319908116909155600690925280832080546001600160a01b038781169190941681179091559051849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b336000818152600e6020526040902054813b919060ff1680611ace57503332148015611ace575081155b611aea5760405162461bcd60e51b81526004016107a590612cdf565b6000838152601060209081526040808320815160608101835281546001600160a01b0381168252600160a01b81046001600160581b031694820194909452929091830190600160f81b900460ff166002811115611b4957611b496128c1565b6002811115611b5a57611b5a6128c1565b81525050905080602001516001600160581b03164211611b7a5750611cf1565b600081602001516001600160581b031642611b959190612e27565b9050600182604001516002811115611baf57611baf6128c1565b03611c4c576000611bc582878560000151611ff7565b60135484516040516340c10f1960e01b81526001600160a01b0391821660048201526024810184905292935016906340c10f1990604401600060405180830381600087803b158015611c1657600080fd5b505af1158015611c2a573d6000803e3d6000fd5b505050508060146000828254611c409190612ecc565b90915550611cba915050565b600282604001516002811115611c6457611c646128c1565b03611cba57611c766201518082612e50565b6000868152600f602052604090208054600890611c9f908490600160401b900461ffff16612edf565b92506101000a81548161ffff021916908361ffff1602179055505b5050600083815260106020526040902080546affffffffffffffffffffff60a01b1916600160a01b426001600160581b0316021790555b80416015546040516020016115b293929190612d16565b6000838152601060209081526040808320815160608101835281546001600160a01b0381168252600160a01b81046001600160581b031694820194909452929091830190600160f81b900460ff166002811115611d6757611d676128c1565b6002811115611d7857611d786128c1565b9052509050816002811115611d8f57611d8f6128c1565b81604001516002811115611da557611da56128c1565b03611de75760405162461bcd60e51b8152602060048201526012602482015271185b1c9958591e48191bda5b99c81d1a185d60721b60448201526064016107a5565b600081602001516001600160581b03164211611e105781602001516001600160581b0316611e12565b425b9050600082604001516002811115611e2c57611e2c6128c1565b03611e4157611e3c84308761198c565b611e8b565b81602001516001600160581b0316421115611e5f57611e5f85611aa4565b81602001516001600160581b0316816001600160581b031611611e86578160200151611e88565b805b90505b600080846002811115611ea057611ea06128c1565b14611eab5784611eae565b60005b90506000846002811115611ec457611ec46128c1565b03611ed457611ed430868861198c565b6040518060600160405280826001600160a01b03168152602001836001600160581b03168152602001856002811115611f0f57611f0f6128c1565b905260008781526010602090815260409182902083518154928501516001600160581b0316600160a01b026001600160f81b03199093166001600160a01b03909116179190911780825591830151909182906001600160f81b0316600160f81b836002811115611f8157611f816128c1565b02179055509050507f12e0cc56edd6c3536e9da2076ca9a265cc04a9b2064bc61ebbe5c25ea280c036858742876002811115611fbf57611fbf6128c1565b604080516001600160a01b03909516855260208501939093529183015260ff16606082015260800160405180910390a1505050505050565b60006934f086f3b33b684000006014541061201457506000611309565b6000838152600f60209081526040808320815161012081018352905460ff80821683526101008083048216958401959095526201000082048116938301939093526301000000810483166060830152640100000000810483166080830152600160281b8104831660a0830152600160301b8104831660c0830152600160381b810490921660e08201819052600160401b90920461ffff169281019290925290919062015180906120cc88670de0b6b3a7640000612f01565b6120d69190612f01565b6120e09190612e50565b9695505050505050565b600060025460016120fb9190612ecc565b61ffff8116600081815260166020526040812043905591925061211d9061213c565b905061212d8261ffff168261219b565b50610917838361ffff166122b0565b60003261214a600143612e27565b60405160609290921b6bffffffffffffffffffffffff191660208301524060348201524260548201526074810183905260940160408051601f19818403018152919052805160209091012092915050565b6121a3612728565b6121ac826123f4565b6000848152600f60209081526040918290208351815492850151938501516060860151608087015160a088015160c089015160e08a0151610100808c015160ff98891661ffff19909b169a909a179a8816029990991763ffff00001916620100009587169590950263ff0000001916949094176301000000938616939093029290921765ffff0000000019166401000000009185169190910265ff0000000000191617600160281b918416919091021767ffff0000000000001916600160301b9183169190910260ff60381b191617600160381b91909416029290921769ffff00000000000000001916600160401b61ffff90921691909102179055905092915050565b6000818152600660205260409020546001600160a01b0316156123065760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b60448201526064016107a5565b600480546000918261231783612cc6565b919050556003546123289190612ecc565b9050611388808211156123725760405162461bcd60e51b81526020600482015260126024820152711350560814d5541413164814915050d2115160721b60448201526064016107a5565b6002805490600061238283612cc6565b90915550506001600160a01b038416600081815260056020908152604080832080546001019055868352600690915280822080546001600160a01b0319168417905551859291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a450505050565b6123fc612728565b61240b8261ffff1660006124fa565b60ff16815260109190911c9061242661ffff831660016124fa565b60ff16602082015260109190911c9061244461ffff831660026124fa565b60ff16604082015260109190911c9061246261ffff831660036124fa565b60ff16606082015260109190911c9061248061ffff831660046124fa565b60ff16608082015260109190911c9061249e61ffff831660056124fa565b60ff1660a082015260109190911c906124bc61ffff831660066124fa565b60ff1660c082015260109190911c906124da61ffff831660076124fa565b6124e5906001612e9c565b60ff1660e08201526001610100820152919050565b60008160ff1660000361251957612512600c84612f18565b905061071f565b8160ff1660010361252f57612512600c84612f18565b8160ff1660020361254557612512600c84612f18565b8160ff1660030361255b57612512601484612f18565b8160ff1660040361257157612512601484612f18565b8160ff1660050361258757612512601484612f18565b8160ff1660060361259d57612512600584612f18565b600a546000906125ad9085612f18565b9050600a8160ff16815481106125c5576125c5612c9a565b60009182526020918290209181049091015460ff601f9092166101000a90048116600886901c90911610156125fb57905061071f565b600b8160ff168154811061261157612611612c9a565b90600052602060002090602091828204019190069054906101000a900460ff1691505092915050565b82805482825590600052602060002090601f016020900481019282156126d05791602002820160005b838211156126a157835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302612663565b80156126ce5782816101000a81549060ff02191690556001016020816000010492830192600103026126a1565b505b506126dc929150612774565b5090565b8280548282559060005260206000209081019282156126d0579160200282015b828111156126d0578251829068ffffffffffffffffff16905591602001919060010190612700565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915290565b5b808211156126dc5760008155600101612775565b6001600160e01b031981168114610be757600080fd5b6000602082840312156127b157600080fd5b813561130981612789565b60005b838110156127d75781810151838201526020016127bf565b50506000910152565b600081518084526127f88160208601602086016127bc565b601f01601f19169290920160200192915050565b60208152600061130960208301846127e0565b60006020828403121561283157600080fd5b5035919050565b80356001600160a01b038116811461284f57600080fd5b919050565b6000806040838503121561286757600080fd5b61287083612838565b946020939093013593505050565b8035801515811461284f57600080fd5b600080604083850312156128a157600080fd5b6128aa83612838565b91506128b86020840161287e565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03841681526001600160581b0383166020820152606081016003831061291457634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b60006020828403121561293457600080fd5b6113098261287e565b60008060006060848603121561295257600080fd5b61295b84612838565b925061296960208501612838565b9150604084013590509250925092565b60008083601f84011261298b57600080fd5b50813567ffffffffffffffff8111156129a357600080fd5b6020830191508360208260051b85010111156129be57600080fd5b9250929050565b600080602083850312156129d857600080fd5b823567ffffffffffffffff8111156129ef57600080fd5b6129fb85828601612979565b90969095509350505050565b600060208284031215612a1957600080fd5b61130982612838565b80356003811061284f57600080fd5b60008060408385031215612a4457600080fd5b823591506128b860208401612a22565b60008060408385031215612a6757600080fd5b612a7083612838565b91506128b860208401612838565b60006101208201905060ff835116825260ff60208401511660208301526040830151612aaf604084018260ff169052565b506060830151612ac4606084018260ff169052565b506080830151612ad9608084018260ff169052565b5060a0830151612aee60a084018260ff169052565b5060c0830151612b0360c084018260ff169052565b5060e0830151612b1860e084018260ff169052565b506101009283015161ffff16919092015290565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612b6b57612b6b612b2c565b604052919050565b600067ffffffffffffffff821115612b8d57612b8d612b2c565b50601f01601f191660200190565b60008060008060808587031215612bb157600080fd5b612bba85612838565b9350612bc860208601612838565b925060408501359150606085013567ffffffffffffffff811115612beb57600080fd5b8501601f81018713612bfc57600080fd5b8035612c0f612c0a82612b73565b612b42565b818152886020838501011115612c2457600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b600080600060408486031215612c5b57600080fd5b833567ffffffffffffffff811115612c7257600080fd5b612c7e86828701612979565b9094509250612c91905060208501612a22565b90509250925092565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612cd857612cd8612cb0565b5060010190565b60208082526017908201527f796f7527726520747279696e6720746f20636865617421000000000000000000604082015260600190565b6bffffffffffffffffffffffff19606094851b811682529290931b9091166014830152602882015260480190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906120e0908301846127e0565b60008251612d898184602087016127bc565b9190910192915050565b600060208284031215612da557600080fd5b815161130981612789565b600060208284031215612dc257600080fd5b815167ffffffffffffffff811115612dd957600080fd5b8201601f81018413612dea57600080fd5b8051612df8612c0a82612b73565b818152856020838501011115612e0d57600080fd5b612e1e8260208301602086016127bc565b95945050505050565b8181038181111561071f5761071f612cb0565b634e487b7160e01b600052601260045260246000fd5b600082612e5f57612e5f612e3a565b500490565b600060ff821660ff8103612e7a57612e7a612cb0565b60010192915050565b60ff828116828216039081111561071f5761071f612cb0565b60ff818116838216019081111561071f5761071f612cb0565b600081612ec457612ec4612cb0565b506000190190565b8082018082111561071f5761071f612cb0565b61ffff818116838216019080821115612efa57612efa612cb0565b5092915050565b808202811582820484141761071f5761071f612cb0565b600060ff831680612f2b57612f2b612e3a565b8060ff8416069150509291505056fea26469706673582212207be02979b966c3b87dc35399b6952e10d84e46159058626faa66eb12d30f788864736f6c63430008120033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102955760003560e01c80638de7ddd311610167578063cc1ed202116100ce578063e1fc334f11610087578063e1fc334f14610667578063e3abc3741461067f578063e985e9c514610692578063f2fde38b146106c0578063f363c7b5146106d3578063f851a440146106db57600080fd5b8063cc1ed202146105de578063cd5d2118146105f1578063d0fb0f8c14610614578063d1d58b2514610634578063d8d8422914610647578063dc2f500c1461065457600080fd5b8063a9059cbb11610120578063a9059cbb14610577578063b88d4fde1461058a578063bc39eb5f1461059d578063bfc56b4a146105b0578063c06abfc7146105b8578063c87b56dd146105cb57600080fd5b80638de7ddd31461050857806390107afe1461051157806394e568471461052457806395d89b41146102d9578063a1b8f37414610544578063a22cb4651461056457600080fd5b806332cb6b0c1161020b5780636352211e116101c45780636352211e146104805780636ba4c138146104a957806370a08231146104bc57806376f0d51a146104dc5780638129fc1c146104ef5780638da5cb5b146104f757600080fd5b806332cb6b0c14610400578063338eebf4146104095780633cb16c671461043e57806342842e0e146104515780634f02c420146104645780635f69c1ac1461046d57600080fd5b80630b44a2181161025d5780630b44a2181461035c5780630d1657e81461036f57806318160ddd146103c45780631f85e3ca146103cd57806323b872dd146103e057806325fd90f3146103f357600080fd5b806301ffc9a71461029a57806305850844146102c257806306fdde03146102d9578063081812fc14610306578063095ea7b314610347575b600080fd5b6102ad6102a836600461279f565b6106ee565b60405190151581526020015b60405180910390f35b6102cb60035481565b6040519081526020016102b9565b604080518082019091526008815267436869636b656e7360c01b60208201525b6040516102b9919061280c565b61032f61031436600461281f565b6007602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102b9565b61035a610355366004612854565b610725565b005b61035a61036a36600461288e565b61080a565b6103b561037d36600461281f565b6010602052600090815260409020546001600160a01b03811690600160a01b81046001600160581b031690600160f81b900460ff1683565b6040516102b9939291906128d7565b6102cb60025481565b61035a6103db366004612922565b61084c565b61035a6103ee36600461293d565b610876565b6009546102ad9060ff1681565b6102cb61138881565b61042c61041736600461281f565b60116020526000908152604090205460ff1681565b60405160ff90911681526020016102b9565b6102cb61044c36600461281f565b61091c565b61035a61045f36600461293d565b61093d565b6102cb60045481565b61042c61047b36600461281f565b610958565b61032f61048e36600461281f565b6006602052600090815260409020546001600160a01b031681565b61035a6104b73660046129c5565b61098c565b6102cb6104ca366004612a07565b60056020526000908152604090205481565b61035a6104ea366004612a31565b6109ca565b61035a610ad0565b6001546001600160a01b031661032f565b6102cb60145481565b61035a61051f366004612a54565b610bea565b61053761053236600461281f565b610c39565b6040516102b99190612a7e565b6102cb61055236600461281f565b600c6020526000908152604090205481565b61035a61057236600461288e565b610db2565b61035a610585366004612854565b610e1e565b61035a610598366004612b9b565b610e7f565b61042c6105ab36600461281f565b610fb6565b6102cb610fc6565b60135461032f906001600160a01b031681565b6102f96105d936600461281f565b61106f565b61035a6105ec366004612c46565b61115d565b6102ad6105ff366004612a07565b600e6020526000908152604090205460ff1681565b6102cb61062236600461281f565b60166020526000908152604090205481565b6102cb61064236600461281f565b611259565b60125461042c9060ff1681565b61035a61066236600461281f565b6113ad565b60125461032f9061010090046001600160a01b031681565b61035a61068d36600461281f565b6115d2565b6102ad6106a0366004612a54565b600860209081526000928352604080842090915290825290205460ff1681565b61035a6106ce366004612a07565b6117c3565b61035a6117fc565b60015461032f906001600160a01b031681565b60006380ac58cd60e01b6001600160e01b03198316148061071f5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6000818152600660205260409020546001600160a01b03163381148061076e57506001600160a01b038116600090815260086020908152604080832033845290915290205460ff165b6107ae5760405162461bcd60e51b815260206004820152600c60248201526b1393d517d054141493d5915160a21b60448201526064015b60405180910390fd5b60008281526007602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6001546001600160a01b0316331461082157600080fd5b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6001546001600160a01b0316331461086357600080fd5b6009805460ff1916911515919091179055565b336001600160a01b03841614806108a357506000818152600760205260409020546001600160a01b031633145b806108d157506001600160a01b038316600090815260086020908152604080832033845290915290205460ff165b61090c5760405162461bcd60e51b815260206004820152600c60248201526b1393d517d054141493d5915160a21b60448201526064016107a5565b61091783838361198c565b505050565b600d818154811061092c57600080fd5b600091825260209091200154905081565b61091783838360405180602001604052806000815250610e7f565b600b818154811061096857600080fd5b9060005260206000209060209182820401919006915054906101000a900460ff1681565b60005b81811015610917576109b88383838181106109ac576109ac612c9a565b90506020020135611aa4565b806109c281612cc6565b91505061098f565b60008281526006602052604090205482906001600160a01b0316331480610a0757506000818152601060205260409020546001600160a01b031633145b610a465760405162461bcd60e51b815260206004820152601060248201526f3737ba103cb7bab91031b434b1b5b2b760811b60448201526064016107a5565b336000818152600e6020526040902054813b919060ff1680610a7057503332148015610a70575081155b610a8c5760405162461bcd60e51b81526004016107a590612cdf565b610a97853386611d08565b8041601554604051602001610aae93929190612d16565b60408051601f1981840301815291905280516020909101206015555050505050565b6001546001600160a01b03163314610ae757600080fd5b600180546001600160a01b0319163390811782556000908152600e6020908152604091829020805460ff19908116909417905560098054909316909255805160a08101825260bd815260fd92810192909252607f90820152605e6060820152601f6080820152610b5b90600a90600561263a565b506040805160a08101825260018152600460208201526000918101829052606081018290526080810191909152610b9690600b90600561263a565b50604080516080810182526729a2241af62c00008152674563918244f400006020820152678ac7230489e80000918101919091526801158e460913d000006060820152610be790600d9060046126e0565b50565b6001546001600160a01b03163314610c0157600080fd5b60128054610100600160a81b0319166101006001600160a01b0394851602179055601380546001600160a01b03191691909216179055565b610c41612728565b600082815260166020526040902054439003610d1457505060008052600f602090815260408051610120810182527ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3755460ff80821683526101008083048216958401959095526201000082048116938301939093526301000000810483166060830152640100000000810483166080830152600160281b8104831660a0830152600160301b8104831660c0830152600160381b810490921660e0820152600160401b90910461ffff169181019190915290565b506000908152600f6020908152604091829020825161012081018452905460ff80821683526101008083048216948401949094526201000082048116948301949094526301000000810484166060830152640100000000810484166080830152600160281b8104841660a0830152600160301b8104841660c0830152600160381b810490931660e0820152600160401b90920461ffff169082015290565b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000818152600660205260409020546001600160a01b03163314610e705760405162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b60448201526064016107a5565b610e7b33838361198c565b5050565b610e8a848484610876565b6001600160a01b0383163b15610fb0576000836001600160a01b031663150b7a0233878686604051602401610ec29493929190612d44565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051610efb9190612d77565b600060405180830381855afa9150503d8060008114610f36576040519150601f19603f3d011682016040523d82523d6000602084013e610f3b565b606091505b50915050600081806020019051810190610f559190612d93565b9050630a85bd0160e11b6001600160e01b0319821614610fad5760405162461bcd60e51b81526020600482015260136024820152722727aa2fa2a9219b9918afa922a1a2a4ab22a960691b60448201526064016107a5565b50505b50505050565b600a818154811061096857600080fd5b6004546000906109c4811015610fde57600091505090565b610bb8811015610ff757678ac7230489e8000091505090565b610dac811015611011576801158e460913d0000091505090565b610fa081101561102b5768015af1d78b58c4000091505090565b611194811015611045576801a055690d9db8000091505090565b61138881101561105f576802b5e3af16b188000091505090565b6802b5e3af16b188000091505090565b6000818152601660205260409020546060904390036110e85760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016107a5565b60125460405163c87b56dd60e01b8152600481018490526101009091046001600160a01b03169063c87b56dd90602401600060405180830381865afa158015611135573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261071f9190810190612db0565b60005b82811015610fb057336006600086868581811061117f5761117f612c9a565b60209081029290920135835250810191909152604001600020546001600160a01b031614806111e5575033601060008686858181106111c0576111c0612c9a565b60209081029290920135835250810191909152604001600020546001600160a01b0316145b6112245760405162461bcd60e51b815260206004820152601060248201526f2737ba103cb7bab91031b434b1b5b2b760811b60448201526064016107a5565b61124784848381811061123957611239612c9a565b905060200201353384611d08565b8061125181612cc6565b915050611160565b60006001600083815260106020526040902054600160f81b900460ff166002811115611287576112876128c1565b0361131057600082815260106020526040812054600160a01b90046001600160581b031642116112b85760006112e1565b6000838152601060205260409020546112e190600160a01b90046001600160581b031642612e27565b60008481526010602052604090205490915061130990829085906001600160a01b0316611ff7565b9392505050565b6002600083815260106020526040902054600160f81b900460ff16600281111561133c5761133c6128c1565b036113a557600082815260106020526040812054600160a01b90046001600160581b0316421161136d576000611396565b60008381526010602052604090205461139690600160a01b90046001600160581b031642612e27565b90506113096201518082612e50565b506000919050565b336000818152600e6020526040902054813b919060ff16806113d7575033321480156113d7575081155b6113f35760405162461bcd60e51b81526004016107a590612cdf565b601254600460ff909116106114375760405162461bcd60e51b815260206004820152600a602482015269135a5b9d195908185b1b60b21b60448201526064016107a5565b6000838152600f60205260409020546018600160401b90910461ffff16101561148e5760405162461bcd60e51b8152602060048201526009602482015268131bddc81b195d995b60ba1b60448201526064016107a5565b61149783611aa4565b601354604051632770a7eb60e21b8152336004820152681043561a882930000060248201526001600160a01b0390911690639dc29fac90604401600060405180830381600087803b1580156114eb57600080fd5b505af11580156114ff573d6000803e3d6000fd5b50506012805460ff1692509050600061151783612e64565b82546101009290920a60ff81810219909316918316021790915560128054600087815260116020908152604091829020805493861660ff199094169390931790925591548251338152918201889052909216908201527f5adfc489bdc5da44dd63a1543f510c2154fe2b5c77842bf01fd0ad15d0b60094915060600160405180910390a180416015546040516020016115b293929190612d16565b60408051601f198184030181529190528051602090910120601555505050565b336000818152600e6020526040902054813b919060ff16806115fc575033321480156115fc575081155b6116185760405162461bcd60e51b81526004016107a590612cdf565b61162183611aa4565b6000838152600f6020526040902054600160381b900460ff166005811061167e5760405162461bcd60e51b8152602060048201526011602482015270105b1c9958591e481b585e081b195d995b607a1b60448201526064016107a5565b6013546001600160a01b0316639dc29fac33600d61169d600186612e83565b60ff16815481106116b0576116b0612c9a565b6000918252602090912001546040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561170257600080fd5b505af1158015611716573d6000803e3d6000fd5b505050508060016117279190612e9c565b6000858152600f60205260409020805460ff92909216600160381b0260ff60381b199092169190911790557f620f7ca5296af9ceccd4e69cf6fdf017af8e9d4129a4aeab21a21d1fbfc59a993385611780846001612e9c565b604080516001600160a01b039094168452602084019290925260ff169082015260600160405180910390a15080416015546040516020016115b293929190612d16565b6001546001600160a01b031633146117da57600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b336000818152600e6020526040902054813b919060ff168061182657503332148015611826575081155b6118425760405162461bcd60e51b81526004016107a590612cdf565b60095460ff1661188d5760405162461bcd60e51b8152602060048201526016602482015275135d5cdd081899481858dd1a5d99481d1bc81b5a5b9d60521b60448201526064016107a5565b61138860025411156118d55760405162461bcd60e51b8152602060048201526011602482015270105b1b081cdd5c1c1b1e481b5a5b9d1959607a1b60448201526064016107a5565b60006118df610fc6565b9050801561194c57601354604051632770a7eb60e21b8152336004820152602481018390526001600160a01b0390911690639dc29fac90604401600060405180830381600087803b15801561193357600080fd5b505af1158015611947573d6000803e3d6000fd5b505050505b611955336120ea565b50804160155460405160200161196d93929190612d16565b60408051601f1981840301815291905280516020909101206015555050565b6000818152600660205260409020546001600160a01b038481169116146119e15760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b60448201526064016107a5565b6001600160a01b0383166000908152600560205260408120805491611a0583612eb5565b90915550506001600160a01b0382166000908152600560205260408120805491611a2e83612cc6565b9091555050600081815260076020908152604080832080546001600160a01b0319908116909155600690925280832080546001600160a01b038781169190941681179091559051849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b336000818152600e6020526040902054813b919060ff1680611ace57503332148015611ace575081155b611aea5760405162461bcd60e51b81526004016107a590612cdf565b6000838152601060209081526040808320815160608101835281546001600160a01b0381168252600160a01b81046001600160581b031694820194909452929091830190600160f81b900460ff166002811115611b4957611b496128c1565b6002811115611b5a57611b5a6128c1565b81525050905080602001516001600160581b03164211611b7a5750611cf1565b600081602001516001600160581b031642611b959190612e27565b9050600182604001516002811115611baf57611baf6128c1565b03611c4c576000611bc582878560000151611ff7565b60135484516040516340c10f1960e01b81526001600160a01b0391821660048201526024810184905292935016906340c10f1990604401600060405180830381600087803b158015611c1657600080fd5b505af1158015611c2a573d6000803e3d6000fd5b505050508060146000828254611c409190612ecc565b90915550611cba915050565b600282604001516002811115611c6457611c646128c1565b03611cba57611c766201518082612e50565b6000868152600f602052604090208054600890611c9f908490600160401b900461ffff16612edf565b92506101000a81548161ffff021916908361ffff1602179055505b5050600083815260106020526040902080546affffffffffffffffffffff60a01b1916600160a01b426001600160581b0316021790555b80416015546040516020016115b293929190612d16565b6000838152601060209081526040808320815160608101835281546001600160a01b0381168252600160a01b81046001600160581b031694820194909452929091830190600160f81b900460ff166002811115611d6757611d676128c1565b6002811115611d7857611d786128c1565b9052509050816002811115611d8f57611d8f6128c1565b81604001516002811115611da557611da56128c1565b03611de75760405162461bcd60e51b8152602060048201526012602482015271185b1c9958591e48191bda5b99c81d1a185d60721b60448201526064016107a5565b600081602001516001600160581b03164211611e105781602001516001600160581b0316611e12565b425b9050600082604001516002811115611e2c57611e2c6128c1565b03611e4157611e3c84308761198c565b611e8b565b81602001516001600160581b0316421115611e5f57611e5f85611aa4565b81602001516001600160581b0316816001600160581b031611611e86578160200151611e88565b805b90505b600080846002811115611ea057611ea06128c1565b14611eab5784611eae565b60005b90506000846002811115611ec457611ec46128c1565b03611ed457611ed430868861198c565b6040518060600160405280826001600160a01b03168152602001836001600160581b03168152602001856002811115611f0f57611f0f6128c1565b905260008781526010602090815260409182902083518154928501516001600160581b0316600160a01b026001600160f81b03199093166001600160a01b03909116179190911780825591830151909182906001600160f81b0316600160f81b836002811115611f8157611f816128c1565b02179055509050507f12e0cc56edd6c3536e9da2076ca9a265cc04a9b2064bc61ebbe5c25ea280c036858742876002811115611fbf57611fbf6128c1565b604080516001600160a01b03909516855260208501939093529183015260ff16606082015260800160405180910390a1505050505050565b60006934f086f3b33b684000006014541061201457506000611309565b6000838152600f60209081526040808320815161012081018352905460ff80821683526101008083048216958401959095526201000082048116938301939093526301000000810483166060830152640100000000810483166080830152600160281b8104831660a0830152600160301b8104831660c0830152600160381b810490921660e08201819052600160401b90920461ffff169281019290925290919062015180906120cc88670de0b6b3a7640000612f01565b6120d69190612f01565b6120e09190612e50565b9695505050505050565b600060025460016120fb9190612ecc565b61ffff8116600081815260166020526040812043905591925061211d9061213c565b905061212d8261ffff168261219b565b50610917838361ffff166122b0565b60003261214a600143612e27565b60405160609290921b6bffffffffffffffffffffffff191660208301524060348201524260548201526074810183905260940160408051601f19818403018152919052805160209091012092915050565b6121a3612728565b6121ac826123f4565b6000848152600f60209081526040918290208351815492850151938501516060860151608087015160a088015160c089015160e08a0151610100808c015160ff98891661ffff19909b169a909a179a8816029990991763ffff00001916620100009587169590950263ff0000001916949094176301000000938616939093029290921765ffff0000000019166401000000009185169190910265ff0000000000191617600160281b918416919091021767ffff0000000000001916600160301b9183169190910260ff60381b191617600160381b91909416029290921769ffff00000000000000001916600160401b61ffff90921691909102179055905092915050565b6000818152600660205260409020546001600160a01b0316156123065760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b60448201526064016107a5565b600480546000918261231783612cc6565b919050556003546123289190612ecc565b9050611388808211156123725760405162461bcd60e51b81526020600482015260126024820152711350560814d5541413164814915050d2115160721b60448201526064016107a5565b6002805490600061238283612cc6565b90915550506001600160a01b038416600081815260056020908152604080832080546001019055868352600690915280822080546001600160a01b0319168417905551859291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a450505050565b6123fc612728565b61240b8261ffff1660006124fa565b60ff16815260109190911c9061242661ffff831660016124fa565b60ff16602082015260109190911c9061244461ffff831660026124fa565b60ff16604082015260109190911c9061246261ffff831660036124fa565b60ff16606082015260109190911c9061248061ffff831660046124fa565b60ff16608082015260109190911c9061249e61ffff831660056124fa565b60ff1660a082015260109190911c906124bc61ffff831660066124fa565b60ff1660c082015260109190911c906124da61ffff831660076124fa565b6124e5906001612e9c565b60ff1660e08201526001610100820152919050565b60008160ff1660000361251957612512600c84612f18565b905061071f565b8160ff1660010361252f57612512600c84612f18565b8160ff1660020361254557612512600c84612f18565b8160ff1660030361255b57612512601484612f18565b8160ff1660040361257157612512601484612f18565b8160ff1660050361258757612512601484612f18565b8160ff1660060361259d57612512600584612f18565b600a546000906125ad9085612f18565b9050600a8160ff16815481106125c5576125c5612c9a565b60009182526020918290209181049091015460ff601f9092166101000a90048116600886901c90911610156125fb57905061071f565b600b8160ff168154811061261157612611612c9a565b90600052602060002090602091828204019190069054906101000a900460ff1691505092915050565b82805482825590600052602060002090601f016020900481019282156126d05791602002820160005b838211156126a157835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302612663565b80156126ce5782816101000a81549060ff02191690556001016020816000010492830192600103026126a1565b505b506126dc929150612774565b5090565b8280548282559060005260206000209081019282156126d0579160200282015b828111156126d0578251829068ffffffffffffffffff16905591602001919060010190612700565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915290565b5b808211156126dc5760008155600101612775565b6001600160e01b031981168114610be757600080fd5b6000602082840312156127b157600080fd5b813561130981612789565b60005b838110156127d75781810151838201526020016127bf565b50506000910152565b600081518084526127f88160208601602086016127bc565b601f01601f19169290920160200192915050565b60208152600061130960208301846127e0565b60006020828403121561283157600080fd5b5035919050565b80356001600160a01b038116811461284f57600080fd5b919050565b6000806040838503121561286757600080fd5b61287083612838565b946020939093013593505050565b8035801515811461284f57600080fd5b600080604083850312156128a157600080fd5b6128aa83612838565b91506128b86020840161287e565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03841681526001600160581b0383166020820152606081016003831061291457634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b60006020828403121561293457600080fd5b6113098261287e565b60008060006060848603121561295257600080fd5b61295b84612838565b925061296960208501612838565b9150604084013590509250925092565b60008083601f84011261298b57600080fd5b50813567ffffffffffffffff8111156129a357600080fd5b6020830191508360208260051b85010111156129be57600080fd5b9250929050565b600080602083850312156129d857600080fd5b823567ffffffffffffffff8111156129ef57600080fd5b6129fb85828601612979565b90969095509350505050565b600060208284031215612a1957600080fd5b61130982612838565b80356003811061284f57600080fd5b60008060408385031215612a4457600080fd5b823591506128b860208401612a22565b60008060408385031215612a6757600080fd5b612a7083612838565b91506128b860208401612838565b60006101208201905060ff835116825260ff60208401511660208301526040830151612aaf604084018260ff169052565b506060830151612ac4606084018260ff169052565b506080830151612ad9608084018260ff169052565b5060a0830151612aee60a084018260ff169052565b5060c0830151612b0360c084018260ff169052565b5060e0830151612b1860e084018260ff169052565b506101009283015161ffff16919092015290565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612b6b57612b6b612b2c565b604052919050565b600067ffffffffffffffff821115612b8d57612b8d612b2c565b50601f01601f191660200190565b60008060008060808587031215612bb157600080fd5b612bba85612838565b9350612bc860208601612838565b925060408501359150606085013567ffffffffffffffff811115612beb57600080fd5b8501601f81018713612bfc57600080fd5b8035612c0f612c0a82612b73565b612b42565b818152886020838501011115612c2457600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b600080600060408486031215612c5b57600080fd5b833567ffffffffffffffff811115612c7257600080fd5b612c7e86828701612979565b9094509250612c91905060208501612a22565b90509250925092565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612cd857612cd8612cb0565b5060010190565b60208082526017908201527f796f7527726520747279696e6720746f20636865617421000000000000000000604082015260600190565b6bffffffffffffffffffffffff19606094851b811682529290931b9091166014830152602882015260480190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906120e0908301846127e0565b60008251612d898184602087016127bc565b9190910192915050565b600060208284031215612da557600080fd5b815161130981612789565b600060208284031215612dc257600080fd5b815167ffffffffffffffff811115612dd957600080fd5b8201601f81018413612dea57600080fd5b8051612df8612c0a82612b73565b818152856020838501011115612e0d57600080fd5b612e1e8260208301602086016127bc565b95945050505050565b8181038181111561071f5761071f612cb0565b634e487b7160e01b600052601260045260246000fd5b600082612e5f57612e5f612e3a565b500490565b600060ff821660ff8103612e7a57612e7a612cb0565b60010192915050565b60ff828116828216039081111561071f5761071f612cb0565b60ff818116838216019081111561071f5761071f612cb0565b600081612ec457612ec4612cb0565b506000190190565b8082018082111561071f5761071f612cb0565b61ffff818116838216019080821115612efa57612efa612cb0565b5092915050565b808202811582820484141761071f5761071f612cb0565b600060ff831680612f2b57612f2b612e3a565b8060ff8416069150509291505056fea26469706673582212207be02979b966c3b87dc35399b6952e10d84e46159058626faa66eb12d30f788864736f6c63430008120033
Deployed Bytecode Sourcemap
74289:12280:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2584:171;;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;2584:171:0;;;;;;;;1399:24;;;;;;;;;738:25:1;;;726:2;711:18;1399:24:0;592:177:1;83193:90:0;83258:17;;;;;;;;;;;;-1:-1:-1;;;83258:17:0;;;;83193:90;;;;;;;:::i;1580:46::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1580:46:0;;;;;;-1:-1:-1;;;;;1879:32:1;;;1861:51;;1849:2;1834:18;1580:46:0;1715:203:1;2767:330:0;;;;;;:::i;:::-;;:::i;:::-;;75337:99;;;;;;:::i;:::-;;:::i;74745:44::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;74745:44:0;;;-1:-1:-1;;;74745:44:0;;-1:-1:-1;;;;;74745:44:0;;-1:-1:-1;;;74745:44:0;;;;;;;;;;;;;;;:::i;1366:26::-;;;;;;75551:95;;;;;;:::i;:::-;;:::i;3326:334::-;;;;;;:::i;:::-;;:::i;74372:22::-;;;;;;;;;74324:41;;74361:4;74324:41;;74851:43;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4228:4:1;4216:17;;;4198:36;;4186:2;4171:18;74851:43:0;4056:184:1;74612:29:0;;;;;;:::i;:::-;;:::i;3672:136::-;;;;;;:::i;:::-;;:::i;1430:21::-;;;;;;74440:29;;;;;;:::i;:::-;;:::i;1521:42::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1521:42:0;;;81066:164;;;;;;:::i;:::-;;:::i;1464:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;79130:169;;;;;;:::i;:::-;;:::i;76847:405::-;;;:::i;1900:80::-;1967:5;;-1:-1:-1;;;;;1967:5:0;1900:80;;75031:30;;;;;;75160:169;;;;;;:::i;:::-;;:::i;81912:201::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;74523:55::-;;;;;;:::i;:::-;;;;;;;;;;;;;;3109:209;;;;;;:::i;:::-;;:::i;2188:192::-;;;;;;:::i;:::-;;:::i;3820:583::-;;;;;;:::i;:::-;;:::i;74403:30::-;;;;;;:::i;:::-;;:::i;82121:385::-;;;:::i;75008:16::-;;;;;-1:-1:-1;;;;;75008:16:0;;;75671:269;;;;;;:::i;:::-;;:::i;80648:410::-;;;;;;:::i;:::-;;:::i;74650:36::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;75106:45;;;;;;:::i;:::-;;;;;;;;;;;;;;82514:671;;;;;;:::i;:::-;;:::i;74921:22::-;;;;;;;;;78770:352;;;;;;:::i;:::-;;:::i;74980:21::-;;;;;;;;-1:-1:-1;;;;;74980:21:0;;;78393:369;;;;;;:::i;:::-;;:::i;1636:68::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;75444:99;;;;;;:::i;:::-;;:::i;78087:298::-;;;:::i;1112:20::-;;;;;-1:-1:-1;;;;;1112:20:0;;;2584:171;2654:14;-1:-1:-1;;;;;;;;;2693:25:0;;;;:54;;-1:-1:-1;;;;;;;;;;2722:25:0;;;2693:54;2681:66;2584:171;-1:-1:-1;;2584:171:0:o;2767:330::-;2838:14;2855:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2855:16:0;2900:10;:20;;;:60;;-1:-1:-1;;;;;;2924:24:0;;;;;;:16;:24;;;;;;;;2949:10;2924:36;;;;;;;;;;2900:60;2892:85;;;;-1:-1:-1;;;2892:85:0;;9881:2:1;2892:85:0;;;9863:21:1;9920:2;9900:18;;;9893:30;-1:-1:-1;;;9939:18:1;;;9932:42;9991:18;;2892:85:0;;;;;;;;;2998:20;;;;:11;:20;;;;;;:30;;-1:-1:-1;;;;;;2998:30:0;-1:-1:-1;;;;;2998:30:0;;;;;;;;;3054:34;;2998:20;;3054:34;;;;;;;2827:270;2767:330;;:::o;75337:99::-;78026:5;;-1:-1:-1;;;;;78026:5:0;78012:10;:19;78004:28;;;;;;-1:-1:-1;;;;;75410:9:0;;;::::1;;::::0;;;:4:::1;:9;::::0;;;;:18;;-1:-1:-1;;75410:18:0::1;::::0;::::1;;::::0;;;::::1;::::0;;75337:99::o;75551:95::-;78026:5;;-1:-1:-1;;;;;78026:5:0;78012:10;:19;78004:28;;;;;;75618:10:::1;:20:::0;;-1:-1:-1;;75618:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;75551:95::o;3326:334::-;3431:10;-1:-1:-1;;;;;3431:18:0;;;;:70;;-1:-1:-1;3481:20:0;;;;:11;:20;;;;;;-1:-1:-1;;;;;3481:20:0;3467:10;:34;3431:70;:121;;;-1:-1:-1;;;;;;3518:22:0;;;;;;:16;:22;;;;;;;;3541:10;3518:34;;;;;;;;;;3431:121;3409:184;;;;-1:-1:-1;;;3409:184:0;;9881:2:1;3409:184:0;;;9863:21:1;9920:2;9900:18;;;9893:30;-1:-1:-1;;;9939:18:1;;;9932:42;9991:18;;3409:184:0;9679:336:1;3409:184:0;3614:28;3624:4;3630:2;3634:7;3614:9;:28::i;:::-;3326:334;;;:::o;74612:29::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;74612:29:0;:::o;3672:136::-;3761:39;3778:4;3784:2;3788:7;3761:39;;;;;;;;;;;;:16;:39::i;74440:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;81066:164::-;81130:13;81125:98;81149:18;;;81125:98;;;81193:18;81200:3;;81204:5;81200:10;;;;;;;:::i;:::-;;;;;;;81193:6;:18::i;:::-;81169:7;;;;:::i;:::-;;;;81125:98;;79130:169;77837:11;;;;:7;:11;;;;;;79217:2;;-1:-1:-1;;;;;77837:11:0;77852:10;77837:25;;:63;;-1:-1:-1;77866:14:0;;;;:10;:14;;;;;:20;-1:-1:-1;;;;;77866:20:0;77890:10;77866:34;77837:63;77815:129;;;;-1:-1:-1;;;77815:129:0;;10626:2:1;77815:129:0;;;10608:21:1;10665:2;10645:18;;;10638:30;-1:-1:-1;;;10684:18:1;;;10677:46;10740:18;;77815:129:0;10424:340:1;77815:129:0;77354:10:::1;77313:12;77468:16:::0;;;:4:::1;:16;::::0;;;;;77407;::::1;::::0;77354:10;77468:16:::1;;::::0;:58:::1;;-1:-1:-1::0;77489:10:0::1;77503:9;77489:23;:36:::0;::::1;;;-1:-1:-1::0;77516:9:0;;77489:36:::1;77446:131;;;;-1:-1:-1::0;;;77446:131:0::1;;;;;;;:::i;:::-;79257:34:::2;79267:2;79271:10;79283:7;79257:9;:34::i;:::-;77717:3:::1;77722:14;77738:12;;77700:51;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;77700:51:0;;::::1;::::0;;;;;;77690:62;;77700:51:::1;77690:62:::0;;::::1;::::0;77675:12:::1;:77:::0;-1:-1:-1;;;;;79130:169:0:o;76847:405::-;78026:5;;-1:-1:-1;;;;;78026:5:0;78012:10;:19;78004:28;;;;;;76897:5:::1;:18:::0;;-1:-1:-1;;;;;;76897:18:0::1;76905:10;76897:18:::0;;::::1;::::0;;:5:::1;76926:16:::0;;;:4:::1;:16;::::0;;;;;;;;:23;;-1:-1:-1;;76926:23:0;;::::1;::::0;;::::1;::::0;;76962:10:::1;:18:::0;;;;::::1;::::0;;;77033:41;;::::1;::::0;::::1;::::0;;77052:3:::1;77033:41:::0;;77057:3:::1;77033:41:::0;;::::1;::::0;;;;77062:3:::1;77033:41:::0;;;;77067:2:::1;77033:41:::0;;;;77071:2:::1;77033:41:::0;;;;::::1;::::0;:15:::1;::::0;:41:::1;;:::i;:::-;-1:-1:-1::0;77085:32:0::1;::::0;;::::1;::::0;::::1;::::0;;77103:1:::1;77085:32:::0;;77106:1:::1;77085:32;::::0;::::1;::::0;-1:-1:-1;77085:32:0;;;;;;;;;;;;;;;;;;;::::1;::::0;:14:::1;::::0;:32:::1;;:::i;:::-;-1:-1:-1::0;77128:116:0::1;::::0;;::::1;::::0;::::1;::::0;;77158:7:::1;77128:116:::0;;77180:7:::1;77128:116;::::0;::::1;::::0;77202:8:::1;77128:116:::0;;;;;;;77225:8:::1;77128:116:::0;;;;::::1;::::0;:12:::1;::::0;:116:::1;;:::i;:::-;;76847:405::o:0;75160:169::-;78026:5;;-1:-1:-1;;;;;78026:5:0;78012:10;:19;78004:28;;;;;;75268:6:::1;:25:::0;;-1:-1:-1;;;;;;75268:25:0::1;;-1:-1:-1::0;;;;;75268:25:0;;::::1;;;::::0;;75304:3:::1;:17:::0;;-1:-1:-1;;;;;;75304:17:0::1;::::0;;;::::1;;::::0;;75160:169::o;81912:201::-;81984:14;;:::i;:::-;82015:19;;;;:10;:19;;;;;;82038:12;82015:35;;82011:59;;-1:-1:-1;;82059:11:0;;;:8;:11;;;;;82052:18;;;;;;;82059:11;82052:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;82052:18:0;;;;;;;;-1:-1:-1;;;82052:18:0;;;;;;;;-1:-1:-1;;;82052:18:0;;;;;;;;;-1:-1:-1;;;82052:18:0;;;;;;;;;;;;;81912:201::o;82011:59::-;-1:-1:-1;82088:17:0;;;;:8;:17;;;;;;;;;82081:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;82081:24:0;;;;;;;;-1:-1:-1;;;82081:24:0;;;;;;;;-1:-1:-1;;;82081:24:0;;;;;;;;;-1:-1:-1;;;82081:24:0;;;;;;;;;;81912:201::o;3109:209::-;3206:10;3189:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;3189:38:0;;;;;;;;;;;;:49;;-1:-1:-1;;3189:49:0;;;;;;;;;;3264:46;;540:41:1;;;3189:38:0;;3206:10;3264:46;;513:18:1;3264:46:0;;;;;;;3109:209;;:::o;2188:192::-;2277:16;;;;:7;:16;;;;;;-1:-1:-1;;;;;2277:16:0;2263:10;:30;2255:52;;;;-1:-1:-1;;;2255:52:0;;11742:2:1;2255:52:0;;;11724:21:1;11781:1;11761:18;;;11754:29;-1:-1:-1;;;11799:18:1;;;11792:39;11848:18;;2255:52:0;11540:332:1;2255:52:0;2328:34;2338:10;2350:2;2354:7;2328:9;:34::i;:::-;2188:192;;:::o;3820:583::-;3926:31;3939:4;3945:2;3949:7;3926:12;:31::i;:::-;-1:-1:-1;;;;;3983:14:0;;;:19;3979:417;;4096:21;4121:2;-1:-1:-1;;;;;4121:13:0;4158:10;4187;4199:4;4205:7;4214:4;4135:84;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4135:84:0;;;;;;;;;;;4121:99;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4093:127;;;4253:15;4282:8;4271:30;;;;;;;;;;;;:::i;:::-;4253:48;-1:-1:-1;;;;;;;;;;4338:22:0;;;4330:54;;;;-1:-1:-1;;;4330:54:0;;13119:2:1;4330:54:0;;;13101:21:1;13158:2;13138:18;;;13131:30;-1:-1:-1;;;13177:18:1;;;13170:49;13236:18;;4330:54:0;12917:343:1;4330:54:0;4004:392;;3979:417;3820:583;;;;:::o;74403:30::-;;;;;;;;;;;;82121:385;82203:6;;82166:7;;82233:4;82224:13;;82220:27;;;82246:1;82239:8;;;82121:385;:::o;82220:27::-;82271:4;82262:6;:13;82258:34;;;82284:8;82277:15;;;82121:385;:::o;82258:34::-;82316:4;82307:6;:13;82303:34;;;82329:8;82322:15;;;82121:385;:::o;82303:34::-;82361:4;82352:6;:13;82348:34;;;82374:8;82367:15;;;82121:385;:::o;82348:34::-;82406:4;82397:6;:13;82393:34;;;82419:8;82412:15;;;82121:385;:::o;82393:34::-;82451:4;82442:6;:13;82438:34;;;82464:8;82457:15;;;82121:385;:::o;82438:34::-;82490:8;82483:15;;;82121:385;:::o;75671:269::-;75803:19;;;;:10;:19;;;;;;75727:13;;75826:12;75803:35;;75795:95;;;;-1:-1:-1;;;75795:95:0;;13467:2:1;75795:95:0;;;13449:21:1;13506:2;13486:18;;;13479:30;13545:34;13525:18;;;13518:62;-1:-1:-1;;;13596:18:1;;;13589:45;13651:19;;75795:95:0;13265:411:1;75795:95:0;75908:6;;:24;;-1:-1:-1;;;75908:24:0;;;;;738:25:1;;;75908:6:0;;;;-1:-1:-1;;;;;75908:6:0;;:15;;711:18:1;;75908:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;75908:24:0;;;;;;;;;;;;:::i;80648:410::-;80762:13;80757:294;80781:18;;;80757:294;;;80874:10;80851:7;:19;80859:3;;80863:5;80859:10;;;;;;;:::i;:::-;;;;;;;;;;80851:19;;-1:-1:-1;80851:19:0;;;;;;;;-1:-1:-1;80851:19:0;;-1:-1:-1;;;;;80851:19:0;:33;;:79;;-1:-1:-1;80920:10:0;80888;:22;80899:3;;80903:5;80899:10;;;;;;;:::i;:::-;;;;;;;;;;80888:22;;-1:-1:-1;80888:22:0;;;;;;;;-1:-1:-1;80888:22:0;:28;-1:-1:-1;;;;;80888:28:0;:42;80851:79;80825:157;;;;-1:-1:-1;;;80825:157:0;;14536:2:1;80825:157:0;;;14518:21:1;14575:2;14555:18;;;14548:30;-1:-1:-1;;;14594:18:1;;;14587:46;14650:18;;80825:157:0;14334:340:1;80825:157:0;80997:42;81007:3;;81011:5;81007:10;;;;;;;:::i;:::-;;;;;;;81019;81031:7;80997:9;:42::i;:::-;80801:7;;;;:::i;:::-;;;;80757:294;;82514:671;82568:7;82617:15;82592:14;;;;:10;:14;;;;;:21;-1:-1:-1;;;82592:21:0;;;;:40;;;;;;;;:::i;:::-;;82588:296;;82649:16;82686:14;;;:10;:14;;;;;:24;-1:-1:-1;;;82686:24:0;;-1:-1:-1;;;;;82686:24:0;82668:15;:42;:134;;82801:1;82668:134;;;82756:14;;;;:10;:14;;;;;:24;82738:42;;-1:-1:-1;;;82756:24:0;;-1:-1:-1;;;;;82756:24:0;82738:15;:42;:::i;:::-;82851:14;;;;:10;:14;;;;;:20;82649:153;;-1:-1:-1;82824:48:0;;82649:153;;82847:2;;-1:-1:-1;;;;;82851:20:0;82824:12;:48::i;:::-;82817:55;82514:671;-1:-1:-1;;;82514:671:0:o;82588:296::-;82923:15;82898:14;;;;:10;:14;;;;;:21;-1:-1:-1;;;82898:21:0;;;;:40;;;;;;;;:::i;:::-;;82894:265;;82955:16;82992:14;;;:10;:14;;;;;:24;-1:-1:-1;;;82992:24:0;;-1:-1:-1;;;;;82992:24:0;82974:15;:42;:134;;83107:1;82974:134;;;83062:14;;;;:10;:14;;;;;:24;83044:42;;-1:-1:-1;;;83062:24:0;;-1:-1:-1;;;;;83062:24:0;83044:15;:42;:::i;:::-;82955:153;-1:-1:-1;83130:17:0;83141:6;82955:153;83130:17;:::i;82894:265::-;-1:-1:-1;83176:1:0;;82514:671;-1:-1:-1;82514:671:0:o;78770:352::-;77354:10;77313:12;77468:16;;;:4;:16;;;;;;77407;;;77354:10;77468:16;;;:58;;-1:-1:-1;77489:10:0;77503:9;77489:23;:36;;;;-1:-1:-1;77516:9:0;;77489:36;77446:131;;;;-1:-1:-1;;;77446:131:0;;;;;;;:::i;:::-;78844:9:::1;::::0;78856:1:::1;78844:9;::::0;;::::1;:13;78836:36;;;::::0;-1:-1:-1;;;78836:36:0;;15271:2:1;78836:36:0::1;::::0;::::1;15253:21:1::0;15310:2;15290:18;;;15283:30;-1:-1:-1;;;15329:18:1;;;15322:40;15379:18;;78836:36:0::1;15069:334:1::0;78836:36:0::1;78891:12;::::0;;;:8:::1;:12;::::0;;;;:18;78913:2:::1;-1:-1:-1::0;;;78891:18:0;;::::1;;;:24;;78883:46;;;::::0;-1:-1:-1;;;78883:46:0;;15610:2:1;78883:46:0::1;::::0;::::1;15592:21:1::0;15649:1;15629:18;;;15622:29;-1:-1:-1;;;15667:18:1;;;15660:39;15716:18;;78883:46:0::1;15408:332:1::0;78883:46:0::1;78940:10;78947:2;78940:6;:10::i;:::-;78961:3;::::0;:31:::1;::::0;-1:-1:-1;;;78961:31:0;;78970:10:::1;78961:31;::::0;::::1;15947:51:1::0;78982:9:0::1;16014:18:1::0;;;16007:34;-1:-1:-1;;;;;78961:3:0;;::::1;::::0;:8:::1;::::0;15920:18:1;;78961:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;79005:9:0::1;:11:::0;;::::1;;::::0;-1:-1:-1;79005:9:0;-1:-1:-1;79005:9:0::1;:11;::::0;::::1;:::i;:::-;::::0;;::::1;::::0;;;::::1;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;;;::::0;;;79044:9:::1;::::0;;-1:-1:-1;79027:14:0;;;:10:::1;:14;::::0;;;;;;;;:26;;79044:9;;::::1;-1:-1:-1::0;;79027:26:0;;::::1;::::0;;;::::1;::::0;;;79104:9;;79071:43;;79088:10:::1;16430:51:1::0;;16497:18;;;16490:34;;;79104:9:0;;::::1;16540:18:1::0;;;16533:45;79071:43:0::1;::::0;-1:-1:-1;16418:2:1;16403:18;79071:43:0::1;;;;;;;77717:3:::0;77722:14;77738:12;;77700:51;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;77700:51:0;;;;;;;;;77690:62;;77700:51;77690:62;;;;77675:12;:77;-1:-1:-1;;;78770:352:0:o;78393:369::-;77354:10;77313:12;77468:16;;;:4;:16;;;;;;77407;;;77354:10;77468:16;;;:58;;-1:-1:-1;77489:10:0;77503:9;77489:23;:36;;;;-1:-1:-1;77516:9:0;;77489:36;77446:131;;;;-1:-1:-1;;;77446:131:0;;;;;;;:::i;:::-;78456:10:::1;78463:2;78456:6;:10::i;:::-;78479:16;78498:12:::0;;;:8:::1;:12;::::0;;;;:23;-1:-1:-1;;;78498:23:0;::::1;;;78553:1;78540:14:::0;::::1;78532:44;;;::::0;-1:-1:-1;;;78532:44:0;;16791:2:1;78532:44:0::1;::::0;::::1;16773:21:1::0;16830:2;16810:18;;;16803:30;-1:-1:-1;;;16849:18:1;;;16842:47;16906:18;;78532:44:0::1;16589:341:1::0;78532:44:0::1;78587:3;::::0;-1:-1:-1;;;;;78587:3:0::1;:8;78596:10;78608:12;78621;78587:3:::0;78621:10;:12:::1;:::i;:::-;78608:26;;;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;78587:48:::1;::::0;-1:-1:-1;;;;;;78587:48:0::1;::::0;;;;;;-1:-1:-1;;;;;15965:32:1;;;78587:48:0::1;::::0;::::1;15947:51:1::0;16014:18;;;16007:34;15920:18;;78587:48:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;78672:10;78685:1;78672:14;;;;:::i;:::-;78646:12;::::0;;;:8:::1;:12;::::0;;;;:40;;::::1;::::0;;;::::1;-1:-1:-1::0;;;78646:40:0::1;-1:-1:-1::0;;;;78646:40:0;;::::1;::::0;;;::::1;::::0;;78704:50:::1;78723:10;78655:2:::0;78739:14:::1;:10:::0;-1:-1:-1;78739:14:0::1;:::i;:::-;78704:50;::::0;;-1:-1:-1;;;;;16448:32:1;;;16430:51;;16512:2;16497:18;;16490:34;;;;16572:4;16560:17;16540:18;;;16533:45;16418:2;16403:18;78704:50:0::1;;;;;;;78445:317;77717:3:::0;77722:14;77738:12;;77700:51;;;;;;;;;;:::i;75444:99::-;78026:5;;-1:-1:-1;;;;;78026:5:0;78012:10;:19;78004:28;;;;;;75519:5:::1;:16:::0;;-1:-1:-1;;;;;;75519:16:0::1;-1:-1:-1::0;;;;;75519:16:0;;;::::1;::::0;;;::::1;::::0;;75444:99::o;78087:298::-;77354:10;77313:12;77468:16;;;:4;:16;;;;;;77407;;;77354:10;77468:16;;;:58;;-1:-1:-1;77489:10:0;77503:9;77489:23;:36;;;;-1:-1:-1;77516:9:0;;77489:36;77446:131;;;;-1:-1:-1;;;77446:131:0;;;;;;;:::i;:::-;78148:10:::1;::::0;::::1;;78140:45;;;::::0;-1:-1:-1;;;78140:45:0;;18084:2:1;78140:45:0::1;::::0;::::1;18066:21:1::0;18123:2;18103:18;;;18096:30;-1:-1:-1;;;18142:18:1;;;18135:52;18204:18;;78140:45:0::1;17882:346:1::0;78140:45:0::1;74361:4;78204:11;;:25;;78196:55;;;::::0;-1:-1:-1;;;78196:55:0;;18435:2:1;78196:55:0::1;::::0;::::1;18417:21:1::0;18474:2;18454:18;;;18447:30;-1:-1:-1;;;18493:18:1;;;18486:47;18550:18;;78196:55:0::1;18233:341:1::0;78196:55:0::1;78262:12;78277:14;:12;:14::i;:::-;78262:29:::0;-1:-1:-1;78306:8:0;;78302:40:::1;;78316:3;::::0;:26:::1;::::0;-1:-1:-1;;;78316:26:0;;78325:10:::1;78316:26;::::0;::::1;15947:51:1::0;16014:18;;;16007:34;;;-1:-1:-1;;;;;78316:3:0;;::::1;::::0;:8:::1;::::0;15920:18:1;;78316:26:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;78302:40;78353:24;78366:10;78353:12;:24::i;:::-;78129:256;77717:3:::0;77722:14;77738:12;;77700:51;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;77700:51:0;;;;;;;;;77690:62;;77700:51;77690:62;;;;77675:12;:77;-1:-1:-1;;78087:298:0:o;4600:329::-;4690:16;;;;:7;:16;;;;;;-1:-1:-1;;;;;4690:24:0;;;:16;;:24;4682:46;;;;-1:-1:-1;;;4682:46:0;;18781:2:1;4682:46:0;;;18763:21:1;18820:1;18800:18;;;18793:29;-1:-1:-1;;;18838:18:1;;;18831:39;18887:18;;4682:46:0;18579:332:1;4682:46:0;-1:-1:-1;;;;;4741:15:0;;;;;;:9;:15;;;;;:17;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;4770:13:0;;;;;;:9;:13;;;;;:15;;;;;;:::i;:::-;;;;-1:-1:-1;;4813:20:0;;;;:11;:20;;;;;;;;4806:27;;-1:-1:-1;;;;;;4806:27:0;;;;;;4854:7;:16;;;;;;:21;;-1:-1:-1;;;;;4854:21:0;;;;;;;;;;;;4891:27;;4825:7;;4854:21;;4891:27;;;;;;4600:329;;;:::o;81238:648::-;77354:10;77313:12;77468:16;;;:4;:16;;;;;;77407;;;77354:10;77468:16;;;:58;;-1:-1:-1;77489:10:0;77503:9;77489:23;:36;;;;-1:-1:-1;77516:9:0;;77489:36;77446:131;;;;-1:-1:-1;;;77446:131:0;;;;;;;:::i;:::-;81297:20:::1;81320:14:::0;;;:10:::1;:14;::::0;;;;;;;81297:37;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;81297:37:0;::::1;::::0;;-1:-1:-1;;;81297:37:0;::::1;-1:-1:-1::0;;;;;81297:37:0::1;::::0;;::::1;::::0;;;;;81320:14;;81297:37;;;-1:-1:-1;;;81297:37:0;::::1;;;;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;::::0;::::1;;;81370:6;:16;;;-1:-1:-1::0;;;;;81351:35:0::1;:15;:35;81347:48;;81388:7;;;81347:48;81407:16;81452:6;:16;;;-1:-1:-1::0;;;;;81434:34:0::1;:15;:34;;;;:::i;:::-;81407:62:::0;-1:-1:-1;81503:15:0::1;81486:6;:13;;;:32;;;;;;;;:::i;:::-;::::0;81482:334:::1;;81535:17;81555:40;81568:8;81578:2;81582:6;:12;;;81555;:40::i;:::-;81610:3;::::0;81619:12;;81610:33:::1;::::0;-1:-1:-1;;;81610:33:0;;-1:-1:-1;;;;;15965:32:1;;;81610:33:0::1;::::0;::::1;15947:51:1::0;16014:18;;;16007:34;;;81535:60:0;;-1:-1:-1;81610:3:0::1;::::0;:8:::1;::::0;15920:18:1;;81610:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;81677:9;81658:15;;:28;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;81482:334:0::1;::::0;-1:-1:-1;;81482:334:0::1;;81725:15;81708:6;:13;;;:32;;;;;;;;:::i;:::-;::::0;81704:112:::1;;81786:17;81797:6;81786:8:::0;:17:::1;:::i;:::-;81757:12;::::0;;;:8:::1;:12;::::0;;;;:47;;:18:::1;::::0;:47:::1;::::0;;;-1:-1:-1;;;81757:47:0;::::1;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;81704:112;-1:-1:-1::0;;81828:14:0::1;::::0;;;:10:::1;:14;::::0;;;;:50;;-1:-1:-1;;;;81828:50:0::1;-1:-1:-1::0;;;81862:15:0::1;-1:-1:-1::0;;;;;81828:50:0::1;;;::::0;;77588:1:::1;77717:3:::0;77722:14;77738:12;;77700:51;;;;;;;;;;:::i;79307:1333::-;79431:20;79454:14;;;:10;:14;;;;;;;;79431:37;;;;;;;;;-1:-1:-1;;;;;79431:37:0;;;;-1:-1:-1;;;79431:37:0;;-1:-1:-1;;;;;79431:37:0;;;;;;;;;79454:14;;79431:37;;;-1:-1:-1;;;79431:37:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;79431:37:0;-1:-1:-1;79504:7:0;79487:24;;;;;;;;:::i;:::-;:6;:13;;;:24;;;;;;;;:::i;:::-;;79479:55;;;;-1:-1:-1;;;79479:55:0;;19562:2:1;79479:55:0;;;19544:21:1;19601:2;19581:18;;;19574:30;-1:-1:-1;;;19620:18:1;;;19613:48;19678:18;;79479:55:0;19360:342:1;79479:55:0;79814:16;79872:6;:16;;;-1:-1:-1;;;;;79854:34:0;:15;:34;:105;;79943:6;:16;;;-1:-1:-1;;;;;79854:105:0;;;;79908:15;79854:105;79814:156;-1:-1:-1;80004:16:0;79987:6;:13;;;:33;;;;;;;;:::i;:::-;;79983:260;;80022:42;80032:12;80054:4;80061:2;80022:9;:42::i;:::-;79983:260;;;80117:6;:16;;;-1:-1:-1;;;;;80099:34:0;:15;:34;80095:50;;;80135:10;80142:2;80135:6;:10::i;:::-;80184:6;:16;;;-1:-1:-1;;;;;80172:28:0;:9;-1:-1:-1;;;;;80172:28:0;;:59;;80215:6;:16;;;80172:59;;;80203:9;80172:59;80160:71;;79983:260;80255:14;;80272:7;:27;;;;;;;;:::i;:::-;;:55;;80315:12;80272:55;;;80310:1;80272:55;80255:72;-1:-1:-1;80353:16:0;80342:7;:27;;;;;;;;:::i;:::-;;80338:75;;80371:42;80389:4;80396:12;80410:2;80371:9;:42::i;:::-;80443:112;;;;;;;;80472:6;-1:-1:-1;;;;;80443:112:0;;;;;80504:9;-1:-1:-1;;;;;80443:112:0;;;;;80536:7;80443:112;;;;;;;;:::i;:::-;;;80426:14;;;;:10;:14;;;;;;;;;:129;;;;;;;;-1:-1:-1;;;;;80426:129:0;-1:-1:-1;;;80426:129:0;-1:-1:-1;;;;;;80426:129:0;;;-1:-1:-1;;;;;80426:129:0;;;;;;;;;;;;;;;:14;;;;-1:-1:-1;;;;;80426:129:0;-1:-1:-1;;;80426:129:0;;;;;;;;;:::i;:::-;;;;;;;;;80571:61;80582:12;80596:2;80600:15;80623:7;80617:14;;;;;;;;:::i;:::-;80571:61;;;-1:-1:-1;;;;;19952:32:1;;;19934:51;;20016:2;20001:18;;19994:34;;;;20044:18;;;20037:34;20119:4;20107:17;20102:2;20087:18;;20080:45;19921:3;19906:19;80571:61:0;;;;;;;79420:1220;;;79307:1333;;;:::o;83654:325::-;83745:7;83792:13;83773:15;;:32;83770:45;;-1:-1:-1;83814:1:0;83807:8;;83770:45;83826:22;83851:12;;;:8;:12;;;;;;;;83826:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;83826:37:0;;;;;;;;-1:-1:-1;;;83826:37:0;;;;;;;;-1:-1:-1;;;83826:37:0;;;;;;;;;;;-1:-1:-1;;;83826:37:0;;;;;;;;;;;;;;:22;83938:6;;83895:18;:8;83906:7;83895:18;:::i;:::-;:39;;;;:::i;:::-;83894:50;;;;:::i;:::-;83874:70;83654:325;-1:-1:-1;;;;;;83654:325:0:o;83420:226::-;83474:9;83493:11;;83507:1;83493:15;;;;:::i;:::-;83520:14;;;;;;;:10;:14;;;;;83537:12;83520:29;;83474:35;;-1:-1:-1;83575:10:0;;:6;:10::i;:::-;83560:25;;83596:18;83605:2;83596:18;;83609:4;83596:8;:18::i;:::-;;83625:13;83631:2;83635;83625:13;;:5;:13::i;86316:250::-;86369:7;86445:9;86479:16;86494:1;86479:12;:16;:::i;:::-;86414:142;;20542:2:1;20538:15;;;;-1:-1:-1;;20534:53:1;86414:142:0;;;20522:66:1;86469:27:0;20604:12:1;;;20597:28;86511:15:0;20641:12:1;;;20634:28;20678:12;;;20671:28;;;20715:13;;86414:142:0;;;-1:-1:-1;;86414:142:0;;;;;;;;;86404:153;;86414:142;86404:153;;;;;86316:250;-1:-1:-1;;86316:250:0:o;83987:546::-;84054:16;;:::i;:::-;84087:18;84100:4;84087:12;:18::i;:::-;84116:17;;;;:8;:17;;;;;;;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;84116:21:0;;;;;;;;;;;;;;;-1:-1:-1;;84116:21:0;;;;;;;;;-1:-1:-1;;84116:21:0;;;;;;;;;;;;;;;;;-1:-1:-1;;84116:21:0;;;;;;;;;-1:-1:-1;;84116:21:0;;-1:-1:-1;;;84116:21:0;;;;;;;;-1:-1:-1;;84116:21:0;-1:-1:-1;;;84116:21:0;;;;;;;-1:-1:-1;;;;84116:21:0;;-1:-1:-1;;;84116:21:0;;;;;;;;;-1:-1:-1;;84116:21:0;-1:-1:-1;;;84116:21:0;;;;;;;;;;;;-1:-1:-1;83987:546:0;;;;:::o;4937:590::-;5038:1;5010:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5010:16:0;:30;5002:57;;;;-1:-1:-1;;;5002:57:0;;20941:2:1;5002:57:0;;;20923:21:1;20980:2;20960:18;;;20953:30;-1:-1:-1;;;20999:18:1;;;20992:44;21053:18;;5002:57:0;20739:338:1;5002:57:0;5098:6;:8;;5072:11;;;5098:8;;;:::i;:::-;;;;;5086:9;;:20;;;;:::i;:::-;5072:34;-1:-1:-1;5134:4:0;5157:19;;;;5149:50;;;;-1:-1:-1;;;5149:50:0;;21284:2:1;5149:50:0;;;21266:21:1;21323:2;21303:18;;;21296:30;-1:-1:-1;;;21342:18:1;;;21335:48;21400:18;;5149:50:0;21082:342:1;5149:50:0;5210:11;:13;;;:11;:13;;;:::i;:::-;;;;-1:-1:-1;;;;;;;5383:13:0;;;;;;:9;:13;;;;;;;;:15;;;;;;5430:16;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;5430:21:0;;;;;5485:33;5438:7;;5383:13;;5485:33;;5383:13;;5485:33;4990:537;;4937:590;;:::o;85214:740::-;85273:16;;:::i;:::-;85315:37;85334:4;85341:6;85334:13;85350:1;85315:11;:37::i;:::-;85306:46;;;;85372:2;85363:11;;;;;85394:37;85420:6;85413:13;;85429:1;85394:11;:37::i;:::-;85385:46;;:6;;;:46;85451:2;85442:11;;;;;85473:37;85499:6;85492:13;;85508:1;85473:11;:37::i;:::-;85464:46;;:6;;;:46;85530:2;85521:11;;;;;85554:37;85580:6;85573:13;;85589:1;85554:11;:37::i;:::-;85543:48;;:8;;;:48;85611:2;85602:11;;;;;85635:37;85661:6;85654:13;;85670:1;85635:11;:37::i;:::-;85624:48;;:8;;;:48;85692:2;85683:11;;;;;85716:37;85742:6;85735:13;;85751:1;85716:11;:37::i;:::-;85705:48;;:8;;;:48;85773:2;85764:11;;;;;85798:37;85824:6;85817:13;;85833:1;85798:11;:37::i;:::-;85786:49;;:9;;;:49;85855:2;85846:11;;;;;85883:37;85909:6;85902:13;;85918:1;85883:11;:37::i;:::-;:41;;85923:1;85883:41;:::i;:::-;85868:56;;:12;;;:56;85945:1;85935:7;;;:11;85868:1;85214:740;-1:-1:-1;85214:740:0:o;84541:665::-;84615:5;84637:9;:14;;84650:1;84637:14;84633:43;;84660:16;84674:2;84666:4;84660:16;:::i;:::-;84653:23;;;;84633:43;84691:9;:14;;84704:1;84691:14;84687:43;;84714:16;84728:2;84720:4;84714:16;:::i;84687:43::-;84745:9;:14;;84758:1;84745:14;84741:43;;84768:16;84782:2;84774:4;84768:16;:::i;84741:43::-;84799:9;:14;;84812:1;84799:14;84795:43;;84822:16;84836:2;84828:4;84822:16;:::i;84795:43::-;84853:9;:14;;84866:1;84853:14;84849:43;;84876:16;84890:2;84882:4;84876:16;:::i;84849:43::-;84907:9;:14;;84920:1;84907:14;84903:43;;84930:16;84944:2;84936:4;84930:16;:::i;84903:43::-;84961:9;:14;;84974:1;84961:14;84957:42;;84984:15;84998:1;84990:4;84984:15;:::i;84957:42::-;85073:15;:22;85039:11;;85053:43;;85059:4;85053:43;:::i;:::-;85039:57;;85123:15;85139:5;85123:22;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;85119:1;85111:9;;;;;;:34;85107:52;;;85154:5;-1:-1:-1;85147:12:0;;85107:52;85177:14;85192:5;85177:21;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;85170:28;;;84541:665;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;774:250::-;859:1;869:113;883:6;880:1;877:13;869:113;;;959:11;;;953:18;940:11;;;933:39;905:2;898:10;869:113;;;-1:-1:-1;;1016:1:1;998:16;;991:27;774:250::o;1029:271::-;1071:3;1109:5;1103:12;1136:6;1131:3;1124:19;1152:76;1221:6;1214:4;1209:3;1205:14;1198:4;1191:5;1187:16;1152:76;:::i;:::-;1282:2;1261:15;-1:-1:-1;;1257:29:1;1248:39;;;;1289:4;1244:50;;1029:271;-1:-1:-1;;1029:271:1:o;1305:220::-;1454:2;1443:9;1436:21;1417:4;1474:45;1515:2;1504:9;1500:18;1492:6;1474:45;:::i;1530:180::-;1589:6;1642:2;1630:9;1621:7;1617:23;1613:32;1610:52;;;1658:1;1655;1648:12;1610:52;-1:-1:-1;1681:23:1;;1530:180;-1:-1:-1;1530:180:1:o;1923:173::-;1991:20;;-1:-1:-1;;;;;2040:31:1;;2030:42;;2020:70;;2086:1;2083;2076:12;2020:70;1923:173;;;:::o;2101:254::-;2169:6;2177;2230:2;2218:9;2209:7;2205:23;2201:32;2198:52;;;2246:1;2243;2236:12;2198:52;2269:29;2288:9;2269:29;:::i;:::-;2259:39;2345:2;2330:18;;;;2317:32;;-1:-1:-1;;;2101:254:1:o;2360:160::-;2425:20;;2481:13;;2474:21;2464:32;;2454:60;;2510:1;2507;2500:12;2525:254;2590:6;2598;2651:2;2639:9;2630:7;2626:23;2622:32;2619:52;;;2667:1;2664;2657:12;2619:52;2690:29;2709:9;2690:29;:::i;:::-;2680:39;;2738:35;2769:2;2758:9;2754:18;2738:35;:::i;:::-;2728:45;;2525:254;;;;;:::o;2784:127::-;2845:10;2840:3;2836:20;2833:1;2826:31;2876:4;2873:1;2866:15;2900:4;2897:1;2890:15;2916:537;-1:-1:-1;;;;;3144:32:1;;3126:51;;-1:-1:-1;;;;;3213:37:1;;3208:2;3193:18;;3186:65;3114:2;3099:18;;3281:1;3270:13;;3260:144;;3326:10;3321:3;3317:20;3314:1;3307:31;3361:4;3358:1;3351:15;3389:4;3386:1;3379:15;3260:144;3440:6;3435:2;3424:9;3420:18;3413:34;2916:537;;;;;;:::o;3458:180::-;3514:6;3567:2;3555:9;3546:7;3542:23;3538:32;3535:52;;;3583:1;3580;3573:12;3535:52;3606:26;3622:9;3606:26;:::i;3643:328::-;3720:6;3728;3736;3789:2;3777:9;3768:7;3764:23;3760:32;3757:52;;;3805:1;3802;3795:12;3757:52;3828:29;3847:9;3828:29;:::i;:::-;3818:39;;3876:38;3910:2;3899:9;3895:18;3876:38;:::i;:::-;3866:48;;3961:2;3950:9;3946:18;3933:32;3923:42;;3643:328;;;;;:::o;4245:367::-;4308:8;4318:6;4372:3;4365:4;4357:6;4353:17;4349:27;4339:55;;4390:1;4387;4380:12;4339:55;-1:-1:-1;4413:20:1;;4456:18;4445:30;;4442:50;;;4488:1;4485;4478:12;4442:50;4525:4;4517:6;4513:17;4501:29;;4585:3;4578:4;4568:6;4565:1;4561:14;4553:6;4549:27;4545:38;4542:47;4539:67;;;4602:1;4599;4592:12;4539:67;4245:367;;;;;:::o;4617:437::-;4703:6;4711;4764:2;4752:9;4743:7;4739:23;4735:32;4732:52;;;4780:1;4777;4770:12;4732:52;4820:9;4807:23;4853:18;4845:6;4842:30;4839:50;;;4885:1;4882;4875:12;4839:50;4924:70;4986:7;4977:6;4966:9;4962:22;4924:70;:::i;:::-;5013:8;;4898:96;;-1:-1:-1;4617:437:1;-1:-1:-1;;;;4617:437:1:o;5059:186::-;5118:6;5171:2;5159:9;5150:7;5146:23;5142:32;5139:52;;;5187:1;5184;5177:12;5139:52;5210:29;5229:9;5210:29;:::i;5250:148::-;5323:20;;5372:1;5362:12;;5352:40;;5388:1;5385;5378:12;5403:271;5483:6;5491;5544:2;5532:9;5523:7;5519:23;5515:32;5512:52;;;5560:1;5557;5550:12;5512:52;5596:9;5583:23;5573:33;;5625:43;5664:2;5653:9;5649:18;5625:43;:::i;5679:260::-;5747:6;5755;5808:2;5796:9;5787:7;5783:23;5779:32;5776:52;;;5824:1;5821;5814:12;5776:52;5847:29;5866:9;5847:29;:::i;:::-;5837:39;;5895:38;5929:2;5918:9;5914:18;5895:38;:::i;6039:1164::-;6181:4;6223:3;6212:9;6208:19;6200:27;;6273:4;6264:6;6258:13;6254:24;6243:9;6236:43;6347:4;6339;6331:6;6327:17;6321:24;6317:35;6310:4;6299:9;6295:20;6288:65;6400:4;6392:6;6388:17;6382:24;6415:52;6461:4;6450:9;6446:20;6432:12;4043:4;4032:16;4020:29;;3976:75;6415:52;;6516:4;6508:6;6504:17;6498:24;6531:54;6579:4;6568:9;6564:20;6548:14;4043:4;4032:16;4020:29;;3976:75;6531:54;;6634:4;6626:6;6622:17;6616:24;6649:54;6697:4;6686:9;6682:20;6666:14;4043:4;4032:16;4020:29;;3976:75;6649:54;;6752:4;6744:6;6740:17;6734:24;6767:54;6815:4;6804:9;6800:20;6784:14;4043:4;4032:16;4020:29;;3976:75;6767:54;;6870:4;6862:6;6858:17;6852:24;6885:54;6933:4;6922:9;6918:20;6902:14;4043:4;4032:16;4020:29;;3976:75;6885:54;;6988:4;6980:6;6976:17;6970:24;7003:54;7051:4;7040:9;7036:20;7020:14;4043:4;4032:16;4020:29;;3976:75;7003:54;-1:-1:-1;7076:6:1;7119:15;;;7113:22;6020:6;6009:18;7178;;;;5997:31;6039:1164;:::o;7208:127::-;7269:10;7264:3;7260:20;7257:1;7250:31;7300:4;7297:1;7290:15;7324:4;7321:1;7314:15;7340:275;7411:2;7405:9;7476:2;7457:13;;-1:-1:-1;;7453:27:1;7441:40;;7511:18;7496:34;;7532:22;;;7493:62;7490:88;;;7558:18;;:::i;:::-;7594:2;7587:22;7340:275;;-1:-1:-1;7340:275:1:o;7620:186::-;7668:4;7701:18;7693:6;7690:30;7687:56;;;7723:18;;:::i;:::-;-1:-1:-1;7789:2:1;7768:15;-1:-1:-1;;7764:29:1;7795:4;7760:40;;7620:186::o;7811:888::-;7906:6;7914;7922;7930;7983:3;7971:9;7962:7;7958:23;7954:33;7951:53;;;8000:1;7997;7990:12;7951:53;8023:29;8042:9;8023:29;:::i;:::-;8013:39;;8071:38;8105:2;8094:9;8090:18;8071:38;:::i;:::-;8061:48;;8156:2;8145:9;8141:18;8128:32;8118:42;;8211:2;8200:9;8196:18;8183:32;8238:18;8230:6;8227:30;8224:50;;;8270:1;8267;8260:12;8224:50;8293:22;;8346:4;8338:13;;8334:27;-1:-1:-1;8324:55:1;;8375:1;8372;8365:12;8324:55;8411:2;8398:16;8436:48;8452:31;8480:2;8452:31;:::i;:::-;8436:48;:::i;:::-;8507:2;8500:5;8493:17;8547:7;8542:2;8537;8533;8529:11;8525:20;8522:33;8519:53;;;8568:1;8565;8558:12;8519:53;8623:2;8618;8614;8610:11;8605:2;8598:5;8594:14;8581:45;8667:1;8662:2;8657;8650:5;8646:14;8642:23;8635:34;8688:5;8678:15;;;;;7811:888;;;;;;;:::o;8925:528::-;9032:6;9040;9048;9101:2;9089:9;9080:7;9076:23;9072:32;9069:52;;;9117:1;9114;9107:12;9069:52;9157:9;9144:23;9190:18;9182:6;9179:30;9176:50;;;9222:1;9219;9212:12;9176:50;9261:70;9323:7;9314:6;9303:9;9299:22;9261:70;:::i;:::-;9350:8;;-1:-1:-1;9235:96:1;-1:-1:-1;9404:43:1;;-1:-1:-1;9443:2:1;9428:18;;9404:43;:::i;:::-;9394:53;;8925:528;;;;;:::o;10020:127::-;10081:10;10076:3;10072:20;10069:1;10062:31;10112:4;10109:1;10102:15;10136:4;10133:1;10126:15;10152:127;10213:10;10208:3;10204:20;10201:1;10194:31;10244:4;10241:1;10234:15;10268:4;10265:1;10258:15;10284:135;10323:3;10344:17;;;10341:43;;10364:18;;:::i;:::-;-1:-1:-1;10411:1:1;10400:13;;10284:135::o;10769:347::-;10971:2;10953:21;;;11010:2;10990:18;;;10983:30;11049:25;11044:2;11029:18;;11022:53;11107:2;11092:18;;10769:347::o;11121:414::-;-1:-1:-1;;11392:2:1;11388:15;;;11384:24;;11372:37;;11443:15;;;;11439:24;;;11434:2;11425:12;;11418:46;11489:2;11480:12;;11473:28;11526:2;11517:12;;11121:414::o;11877:489::-;-1:-1:-1;;;;;12146:15:1;;;12128:34;;12198:15;;12193:2;12178:18;;12171:43;12245:2;12230:18;;12223:34;;;12293:3;12288:2;12273:18;;12266:31;;;12071:4;;12314:46;;12340:19;;12332:6;12314:46;:::i;12371:287::-;12500:3;12538:6;12532:13;12554:66;12613:6;12608:3;12601:4;12593:6;12589:17;12554:66;:::i;:::-;12636:16;;;;;12371:287;-1:-1:-1;;12371:287:1:o;12663:249::-;12732:6;12785:2;12773:9;12764:7;12760:23;12756:32;12753:52;;;12801:1;12798;12791:12;12753:52;12833:9;12827:16;12852:30;12876:5;12852:30;:::i;13681:648::-;13761:6;13814:2;13802:9;13793:7;13789:23;13785:32;13782:52;;;13830:1;13827;13820:12;13782:52;13863:9;13857:16;13896:18;13888:6;13885:30;13882:50;;;13928:1;13925;13918:12;13882:50;13951:22;;14004:4;13996:13;;13992:27;-1:-1:-1;13982:55:1;;14033:1;14030;14023:12;13982:55;14062:2;14056:9;14087:48;14103:31;14131:2;14103:31;:::i;14087:48::-;14158:2;14151:5;14144:17;14198:7;14193:2;14188;14184;14180:11;14176:20;14173:33;14170:53;;;14219:1;14216;14209:12;14170:53;14232:67;14296:2;14291;14284:5;14280:14;14275:2;14271;14267:11;14232:67;:::i;:::-;14318:5;13681:648;-1:-1:-1;;;;;13681:648:1:o;14679:128::-;14746:9;;;14767:11;;;14764:37;;;14781:18;;:::i;14812:127::-;14873:10;14868:3;14864:20;14861:1;14854:31;14904:4;14901:1;14894:15;14928:4;14925:1;14918:15;14944:120;14984:1;15010;15000:35;;15015:18;;:::i;:::-;-1:-1:-1;15049:9:1;;14944:120::o;16052:175::-;16089:3;16133:4;16126:5;16122:16;16162:4;16153:7;16150:17;16147:43;;16170:18;;:::i;:::-;16219:1;16206:15;;16052:175;-1:-1:-1;;16052:175:1:o;16935:151::-;17025:4;17018:12;;;17004;;;17000:31;;17043:14;;17040:40;;;17060:18;;:::i;17370:148::-;17458:4;17437:12;;;17451;;;17433:31;;17476:13;;17473:39;;;17492:18;;:::i;18916:136::-;18955:3;18983:5;18973:39;;18992:18;;:::i;:::-;-1:-1:-1;;;19028:18:1;;18916:136::o;19057:125::-;19122:9;;;19143:10;;;19140:36;;;19156:18;;:::i;19187:168::-;19254:6;19280:10;;;19292;;;19276:27;;19315:11;;;19312:37;;;19329:18;;:::i;:::-;19312:37;19187:168;;;;:::o;20136:::-;20209:9;;;20240;;20257:15;;;20251:22;;20237:37;20227:71;;20278:18;;:::i;21429:157::-;21459:1;21493:4;21490:1;21486:12;21517:3;21507:37;;21524:18;;:::i;:::-;21576:3;21569:4;21566:1;21562:12;21558:22;21553:27;;;21429:157;;;;:::o
Swarm Source
ipfs://7be02979b966c3b87dc35399b6952e10d84e46159058626faa66eb12d30f7888
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.