ETH Price: $2,079.93 (-1.51%)

Contract

0xb5E76f213a39b0A294e563EdFf69ca9Db2dE78bf
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...242227922026-01-13 2:23:4760 days ago1768271027IN
0xb5E76f21...Db2dE78bf
0 ETH0.000000880.03650658
Set Approval For...241361392026-01-01 0:17:2372 days ago1767226643IN
0xb5E76f21...Db2dE78bf
0 ETH0.000094252.0414568
Set Approval For...231675802025-08-18 11:14:59208 days ago1755515699IN
0xb5E76f21...Db2dE78bf
0 ETH0.000029551.21909336
Set Approval For...220196402025-03-10 23:06:11368 days ago1741647971IN
0xb5E76f21...Db2dE78bf
0 ETH0.000071261.54115431
Set Approval For...219956282025-03-07 14:34:23372 days ago1741358063IN
0xb5E76f21...Db2dE78bf
0 ETH0.000118482.56690266
Set Approval For...219181482025-02-24 19:04:11383 days ago1740423851IN
0xb5E76f21...Db2dE78bf
0 ETH0.000029091.2
Set Approval For...218779082025-02-19 4:03:59388 days ago1739937839IN
0xb5E76f21...Db2dE78bf
0 ETH0.000053392.2
Set Approval For...215254282024-12-31 22:26:59437 days ago1735684019IN
0xb5E76f21...Db2dE78bf
0 ETH0.000253975.50214565
Set Approval For...214770482024-12-25 4:17:47444 days ago1735100267IN
0xb5E76f21...Db2dE78bf
0 ETH0.000087333.58931033
Set Approval For...211053122024-11-03 6:26:47496 days ago1730615207IN
0xb5E76f21...Db2dE78bf
0 ETH0.000139395.74309191
Set Approval For...211043932024-11-03 3:21:59496 days ago1730604119IN
0xb5E76f21...Db2dE78bf
0 ETH0.000108484.46960078
Set Approval For...202500042024-07-06 20:57:59615 days ago1720299479IN
0xb5E76f21...Db2dE78bf
0 ETH0.000085871.86036127
Set Approval For...193058212024-02-25 16:34:11748 days ago1708878851IN
0xb5E76f21...Db2dE78bf
0 ETH0.0007968232.83050518
Set Approval For...190667442024-01-23 3:36:11781 days ago1705980971IN
0xb5E76f21...Db2dE78bf
0 ETH0.00039958.63926236
Set Approval For...189104302024-01-01 5:11:35803 days ago1704085895IN
0xb5E76f21...Db2dE78bf
0 ETH0.000451069.75422802
Do Action With M...189104142024-01-01 5:08:23803 days ago1704085703IN
0xb5E76f21...Db2dE78bf
0 ETH0.0054008911.18207434
Set Approval For...189085452023-12-31 22:50:11803 days ago1704063011IN
0xb5E76f21...Db2dE78bf
0 ETH0.0006463913.97826307
Set Approval For...189083802023-12-31 22:16:59803 days ago1704061019IN
0xb5E76f21...Db2dE78bf
0 ETH0.0005043510.92647094
Set Approval For...189072502023-12-31 18:29:23804 days ago1704047363IN
0xb5E76f21...Db2dE78bf
0 ETH0.0006655214.39194111
Set Approval For...188986942023-12-30 13:41:59805 days ago1703943719IN
0xb5E76f21...Db2dE78bf
0 ETH0.0008171217.67489011
Set Approval For...188964552023-12-30 6:07:23805 days ago1703916443IN
0xb5E76f21...Db2dE78bf
0 ETH0.0006562614.19534557
Set Approval For...184857502023-11-02 17:02:47863 days ago1698944567IN
0xb5E76f21...Db2dE78bf
0 ETH0.0013327928.87395632
Set Approval For...183640102023-10-16 16:03:47880 days ago1697472227IN
0xb5E76f21...Db2dE78bf
0 ETH0.0004434318.2882366
Set Approval For...179052842023-08-13 10:17:11944 days ago1691921831IN
0xb5E76f21...Db2dE78bf
0 ETH0.0005341611.57229342
Set Approval For...178637632023-08-07 14:51:23950 days ago1691419883IN
0xb5E76f21...Db2dE78bf
0 ETH0.000878236.21918314
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Chickens

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license
/**
 *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

Contract ABI

API
[{"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"}]

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

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.