ETH Price: $3,408.40 (+2.85%)

Token

 

Overview

Max Total Supply

2,309

Holders

819

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
*我是大富婆.eth
0x9c871e25b88d94bfe97b22223e7af01f4a85c15e
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ChubbyKaijuDAOCorp

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 2 of 13: ChubbyKaijuDAOCorp.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./ERC1155.sol";
import "./Strings.sol";
import "./Ownable.sol";
import "./IChubbyKaijuDAOCrunch.sol";
import "./IChubbyKaijuDAOInvasion.sol";

/***************************************************************************************************
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxddddddddddddddxxxxxdd
kkkkkkkkkkkkkkkkkkkkkkkxxkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxkxkkkkkkkkkkkkkkkkkkkkkxxddddddddddddxxkkkxx
kkkkkkkkkkkkkkkkkkkkkkkkkkkxxxkkkkkkkkkkkkkkkkkkkkkkxxdddddxxxxxkkkkkkkkkkkkkkkkxxddddddddddddxxkxkk
kkkkkkkkkkkkkkkkkkkkxxxxxddddxxkxxkkxxkkkkkkkxxkkxxkkkxxddddddddxxxxkkkkkkkkxxkkkxxddddddddddddxxkkk
kkkkkkkkkkkkkkkxxxxddddddddxxxxkxxoooodxkkkkkxxdooddxkxxkkkxxxxdddddxxxkkkkkkkkkkkxxdddddddddddddxkk
kkkkkkkkkkkkxxxdddddoddxxxxkkkxl,.',,''.',::;'.''','',lxxxkkkkxxddddddxxxkkkxxxxxkkxddddddddddddddxk
kkkkkkkkxxxdddddddddddxxxxdddo,.,d0XXK0kdl;,:ok0KKK0x;.'lxxxxxxxxddddddddxxkkxxxxxxddodddddddddddddx
kkkkkxxxddddddddddddddddddddl'.:KMMMMMMMMNKXWMMMWWMMWXc..';;;:cloddddddddddxkkxxdddddodddddddddddddd
kkxxxddddddddddddddddddddddc..c0WMMMMMMMMWXNMMMMMMMWk;,',;::;,'..':oxxxxddodxxxkxxdddddxdddddddddddd
kxxdddddddddddddddddddddoc'.'d0XWMMMMMMMMMWMMMMMMMMWXOKNWWMMMWX0kl,.'cdkkxxxddddxdddxxkkkxxxdddddddd
xddddxxxxxxdddddddddddl:'.,xXNKKNMMMMMMMMMMMMMMMMMMMWMMMMMMMMMMMMMNk:..cxkkxxxddddddxkkkkkkkxddddddd
xxxxxkkkxxxdddddddddo;..ckNMMMNNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNk,.,dxxkkxxxdddxkkkkkxkkxdddddd
kkkkxxxxdddddddoddo:..c0WMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXo..cxkkkkkxxxxkkkkkkkkkxddddd
kkkxxxddoddddddddd:..xNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNNNXNWWMMMMMMMMMMWNO,.;dkkkkkxkkxxkkkkkkkxxdddd
kxxxdddddo:'',;:c;. lNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWNNWMMMMMWMMMWMMMXc.'okxkkkkkkkkkkkkkkkxdddd
xxdddddodo' .;,',,,:ONWMMMMMMMMMMMMMMMMMMMMMMMMMMMMXxc;;:xXMMMMMMMMMMMWNNNXd..lkkkkkkkkkxkkkkkkkxddd
ddddddddddc..oKKXWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMWkc'      ,0MMMMMMMMMWNNNXNWx..okkkkkkkkkkkkkkkkxdod
dddddddddddl..l0XNNWWWMMWXNMMMMMMMMMMMMMMMMMMMMNd.   ....  :XMMMMMMWWW0l,,;d0l.,xkkkxkkkkkkkkkkkxddd
ddddddddddxko'.,lxO0KXNNO;cXMMMMMMMMMMMMMMMMMMMk.  ....... .kMMMMMMMWk.     :x'.lkkkkkkkkkkkkkkkkxdd
ddddddddxxxkkxl;'.'',:cl:..dWMMMMMMMMMMMMMMMMMWl  ........ .kMMMMMMMNc  ... .c, :xxkkkkkkkkkkkkkkxdd
dddddddxkkkkkkkkxdoc:;,''. ;KMMMMMMMMMMMMMMMMMWl  .......  ,KWWMWX0Ox'       '..cxxkkkkkkkkkkkkkkxdd
dddddxxkkkkkkkkxxkkxkkkkxo'.oWMMMMMMMMMMMMMMMMMO'    ...  .xKkoc;,,,;,.   ,:;,...:dkxkkxkkkkkkkkkxdd
ddddxxkkkkkkkkkkkkkxkkxxddc..kWMMMMMMMMMMMMMMMMMXdc:.. ..;:;...'oOXNWO:colkWMWXk;.,xkxkkkkkkkkkkkxdd
ddxxkkxxkkkkkkkkkkkkxxddddo;.;KMMMMMMMMMMMMMMMMMMMMWX0O0XXxcod;cKMMMMWKl:OMMMMMM0,.lkxkkkkkkkkkkkxdd
dxxkkkkkkkkkkkkxxkkxxddddddo,.:XMMMMMMMMMMMMMMMMMMMMMMMMMMMWMKc:KMMMMMNxoKMMWMMM0,.lkxxxkkkkkkkkxxdd
xxkkkkkkkkkkkkkkkkxxddddddddl'.cXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNWMWMMMMWWMMMWMMNl.,dkkkxkkkkkkkkxddd
xkkkkkkkkkkkkkkkkxdddddddddodl'.cXMMMMMMMMMMMMMMMMMMMMMMMMMMKdOWNxo0WNxlOWKcoXNo..okxxkkkkkkkkkkxddd
kkkkkkkkkkkkkkkkkxddodddddddddo'.,OWMMMMMMMMMMMMMMMMMMMMMN0Oc .lc. .l:. .;. .,, .lkxxkkkkkkkkkkxxddd
kkkkkkkkkkkkkkkkxddddddddddddddo' cNMMMMMMMMMMMMMMMMMMMMMKl,;'. .,,. .'. .,. '' 'xkkxkkkkkkkkkkxdddd
kkkkkkkkkkkkkkkkxddoddddl:,'..';. :NMMMMMMMMMMMMMMMMMMMMMWWWWKlc0WNd,xNx;kWx;xl ,xkkkkxxkkxxkkxxdddd
kkkkkkkkkkkkkkkkxdddddo:..:dxdl'  ,0MMMMMMMMMMMMMMMMMMMMMMMMMMWWMMMWWWMWWMMWWK; :kkkkkkkkkkxkkxddddd
kkkkkkkkkxkkkkkxxdoddo; 'kNMWMNl.'kNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWMMMK:.'dkkkkkxkkkkkkxdddddd
kkkkkkkkkkkxkkkxxddddo' lXNMMWo.:KMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN0o' 'dkkkkxxkkkkkkxxdddddd
kkkkkkkxkkkkkkkxdc;,,'.,kXNMMWK0NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWNNXXO:,,..ckkkkxkkkxkkxxddddddd
kkkkkkkkkxxkxkxc..;loox0KKNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNNNNNNXXXXXXXXXXXKXXk'.cxkxkkxkkkxxdddddddd
kkkkkkkkkkkkxkl..xNMMMMWNXWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWNNWWWWWMMMMMMWO'.ckxkkxkxxxdoddddddx
kkkkkkkkkkkkkx, cNMMMMMMMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWx..okkkkxddddddddddxx
kkkkkkkkkkkkkx, cNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWo.'dkxxddddddddddxkk
kkkkkkkkkxkxxx: ,0WMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWMMMMMMMMMMMMMX; :ddddddddoddxxkkx
kkkkkkkkxxkkxko..dNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWNNNNNNXXXXXXXNNWMMMMMMMMMWk..cdddddddddxxkxxd
kkkkkkkxxkkxkkx, cXWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWNNNWWMMMMMMMWWWNNNNWMMMMMMMMN: ,oddddddxxxkxxdd
kkkkkkkkkkkxkko..oXNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWNNWMMMMMMMMMMMMMMMMWWWMMMMMMMMWk..ldddddxkkxkkxxx
xkkkkkkkkkkxkd,.lXWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMX; ;dddxxkkkkxxkkk
xxkkkkkkkxkkk: :XMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWo 'dxxkkkkkkkkkkk
dxkkkkkkkkxkx, dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMO..okxkkkkkkkkkkx
ddxkkxkkkkxkd'.dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWMMMMX; ckkkkkkkkkkxxd
dodxxkkkkxkkx; cWMMMMWNWMMMMMMMMMMMWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNNWMMMWc ;xkkkxkkkxxddd
dddddxxkkkkxkl..OWMMWNXWMMMMMMMMMMMNNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNXNMMMMd.'dkkkkxxdddddd
ddddddxxkkkkkx; :KWWN0KWMMMMMMMMMMWXNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWXXWMMMk..okxxxdddddddd
ddddddddxxkkkkl..xXX0ccKMMMMMMMMMMWXNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWXXWMMM0'.lxddddddddddd
***************************************************************************************************/



contract ChubbyKaijuDAOCorp is ERC1155, Ownable {
    using Strings for uint256;

    address private signer_wl;
    address private signer_free;
    uint128 public constant RADIO_CRUNCH_PRICE = 75 ether;
    uint128 public constant SERUM_CRUNCH_PRICE = 125 ether;

    uint128 public constant RADIO_ETH_PRICE = 0.065 ether;
    uint128 public constant SERUM_ETH_PRICE = 0.085 ether;

    uint16 public constant TYPE_RADIO = 0;
    uint16 public constant TYPE_SERUM = 1;
    uint16 public constant TYPE_SUPER_RADIO = 2;
    uint16 public constant TYPE_SUPER_SERUM = 3;

    uint16 public constant MAX_RADIO = 3328;
    uint16 public constant MAX_SERUM = 3328;

    uint16 public freeRadioRemained = 748;
    uint256 public radioMinted;
    uint256 public serumMinted;

    mapping(address => bool) public freePurchased;
    mapping(address => mapping(uint256=>bool)) public isPurchased1;
    mapping(address => mapping(uint256=>uint256)) public isPurchased2;
    mapping(address => mapping(uint256=>uint256)) public isPurchased3;
    mapping(address => mapping(uint256=>uint256)) public isPurchased4;

    bool private ispreSale1;
    bool private ispreSale2;
    bool private ispreSale3;
    bool private ispublicSale;

    bool private isCrunch;
    
    address private invasionContract;
    string private baseURI;


    mapping(uint256 => bool) public validTypes;

    event SetBaseURI(string indexed _baseURI);

    IChubbyKaijuDAOCrunch private chubbykaijuDAOCrunch;
    IChubbyKaijuDAOInvasion private chubbykaijuDAOInvasion;

    constructor(address crunch, string memory _baseURI) ERC1155(_baseURI) {
        chubbykaijuDAOCrunch = IChubbyKaijuDAOCrunch(crunch);
        chubbykaijuDAOCrunch.approve(address(this), 1000000000000000000000000000000);
        baseURI = _baseURI;
        validTypes[0] = true;
        validTypes[1] = true;
        validTypes[2] = true;
        validTypes[3] = true;   
        emit SetBaseURI(baseURI);
    }

    function mintBatch(uint256[] memory ids, uint256[] memory amounts)
        external
        onlyOwner
    {
        _mintBatch(owner(), ids, amounts, "");
    }

    function freeRadio(bytes memory signature) external {
        require(signerCheck(msg.sender, signature) == signer_free,"Not Free radio minter");
        require(!freePurchased[msg.sender], "Already Minted");
        require(chubbykaijuDAOInvasion.balanceOf(msg.sender)>0, "Must Own Zombie");
        require(radioMinted+1<MAX_RADIO+1,"All radios are minted");
        _mint(msg.sender, TYPE_RADIO, 1, "");
        freePurchased[msg.sender]=true;
        radioMinted++;
        freeRadioRemained--;
    }

    function preSale(bytes memory signature, uint256 id, uint256 amount) external payable {
        require(ispreSale1 || ispreSale2 || ispreSale3, "Not Presale Period");
        require(validTypes[id], "Not Valid Typeid");
        require(id!=TYPE_SUPER_RADIO && id!=TYPE_SUPER_SERUM, "Only Owner Can Mint SUPER TYPE");
        require(signerCheck(msg.sender, signature) == signer_wl,"Not Whitelisted");
        require(chubbykaijuDAOInvasion.balanceOf(msg.sender)>0, "Must Own Zombie");
        if(ispreSale1){
            require(!isPurchased1[msg.sender][id], "Already Minted All");
            require(amount==1, "No more than one");
            if(id==TYPE_RADIO){
                require(radioMinted+amount<MAX_RADIO+1-freeRadioRemained,"All radios are minted");
                require(RADIO_CRUNCH_PRICE * amount <= chubbykaijuDAOCrunch.balanceOf(msg.sender), "not enough balance");
                require(RADIO_CRUNCH_PRICE * amount <= chubbykaijuDAOCrunch.allowance(msg.sender, address(this)), "low allowance");
                chubbykaijuDAOCrunch.burn(msg.sender, RADIO_CRUNCH_PRICE * amount);
                radioMinted = radioMinted+amount;
            }else{
                require(serumMinted+amount<MAX_SERUM+1,"All serums are minted");
                require(SERUM_CRUNCH_PRICE * amount <= chubbykaijuDAOCrunch.balanceOf(msg.sender), "not enough balance");
                require(SERUM_CRUNCH_PRICE * amount <= chubbykaijuDAOCrunch.allowance(msg.sender, address(this)), "low allowance");
                chubbykaijuDAOCrunch.burn(msg.sender, SERUM_CRUNCH_PRICE * amount);
                serumMinted = serumMinted+amount;
            }
            _mint(msg.sender, id, amount, "");
            isPurchased1[msg.sender][id] = true;
        }else if(ispreSale2){
            require(isPurchased2[msg.sender][id] + amount < 11, "Already Minted All");
            if(id==TYPE_RADIO){
                require(radioMinted+amount<MAX_RADIO+1-freeRadioRemained,"All radios are minted");
                require(RADIO_CRUNCH_PRICE * amount <= chubbykaijuDAOCrunch.balanceOf(msg.sender), "not enough balance");
                require(RADIO_CRUNCH_PRICE * amount <= chubbykaijuDAOCrunch.allowance(msg.sender, address(this)), "low allowance");
                chubbykaijuDAOCrunch.burn(msg.sender, RADIO_CRUNCH_PRICE * amount);
                radioMinted = radioMinted+amount;
            }else{
                require(serumMinted+amount<MAX_SERUM+1,"All serums are minted");
                require(SERUM_CRUNCH_PRICE * amount <= chubbykaijuDAOCrunch.balanceOf(msg.sender), "not enough balance");
                require(SERUM_CRUNCH_PRICE * amount <= chubbykaijuDAOCrunch.allowance(msg.sender, address(this)), "low allowance");
                chubbykaijuDAOCrunch.burn(msg.sender, SERUM_CRUNCH_PRICE * amount);
                serumMinted = serumMinted+amount;
            }
            _mint(msg.sender, id, amount, "");
            isPurchased2[msg.sender][id] = isPurchased2[msg.sender][id]+amount;
        }else{
            require(isPurchased3[msg.sender][id] + amount < 11, "Already Minted All");
            if(id==TYPE_RADIO){
                require(radioMinted+amount<MAX_RADIO+1-freeRadioRemained,"All radios are minted");
                if(isCrunch){
                    require(RADIO_CRUNCH_PRICE * amount <= chubbykaijuDAOCrunch.balanceOf(msg.sender), "not enough balance");
                    require(RADIO_CRUNCH_PRICE * amount <= chubbykaijuDAOCrunch.allowance(msg.sender, address(this)), "low allowance");
                    chubbykaijuDAOCrunch.burn(msg.sender, RADIO_CRUNCH_PRICE * amount);
                }else{
                    require(msg.value >= amount*RADIO_ETH_PRICE, "Not Enough ETH");
                }
                radioMinted = radioMinted+amount;
            }else{
                require(serumMinted+amount<MAX_SERUM+1,"All serums are minted");
                if(isCrunch){
                    require(SERUM_CRUNCH_PRICE * amount <= chubbykaijuDAOCrunch.balanceOf(msg.sender), "not enough balance");
                    require(SERUM_CRUNCH_PRICE * amount <= chubbykaijuDAOCrunch.allowance(msg.sender, address(this)), "low allowance");
                    chubbykaijuDAOCrunch.burn(msg.sender, SERUM_CRUNCH_PRICE * amount);
                }else{
                    require(msg.value >= amount*SERUM_ETH_PRICE, "Not Enough ETH");
                }
                
                serumMinted = serumMinted+amount;
            }


            _mint(msg.sender, id, amount, "");
            isPurchased3[msg.sender][id] = isPurchased3[msg.sender][id]+amount;
        }
        
    }


    function publicSale(uint256 id, uint256 amount) external payable {
        require(ispublicSale, "Not Publicsale Preiod");
        require(validTypes[id], "Not Valid Typeid");
        require(id!=TYPE_SUPER_RADIO && id!=TYPE_SUPER_SERUM, "Only Owner Can Mint SUPER TYPE");
        require(isPurchased4[msg.sender][id] + amount < 11, "Already Minted All");
        require(chubbykaijuDAOInvasion.balanceOf(msg.sender)>0, "Must Own Zombie");
        if(id==TYPE_RADIO){
            require(radioMinted+amount<MAX_RADIO+1-freeRadioRemained,"All radios are minted");
            if(isCrunch){
                require(RADIO_CRUNCH_PRICE * amount <= chubbykaijuDAOCrunch.balanceOf(msg.sender), "not enough balance");
                require(RADIO_CRUNCH_PRICE * amount <= chubbykaijuDAOCrunch.allowance(msg.sender, address(this)), "low allowance");
                chubbykaijuDAOCrunch.burn(msg.sender, RADIO_CRUNCH_PRICE * amount);
            }else{
                require(msg.value >= amount*RADIO_ETH_PRICE, "Not Enough ETH");
            }
            radioMinted = radioMinted+amount;
        }else{
            require(serumMinted+amount<MAX_SERUM+1,"All serums are minted");
            if(isCrunch){
                require(SERUM_CRUNCH_PRICE * amount <= chubbykaijuDAOCrunch.balanceOf(msg.sender), "not enough balance");
                require(SERUM_CRUNCH_PRICE * amount <= chubbykaijuDAOCrunch.allowance(msg.sender, address(this)), "low allowance");
                chubbykaijuDAOCrunch.burn(msg.sender, SERUM_CRUNCH_PRICE * amount);
            }else{
                require(msg.value >= amount*SERUM_ETH_PRICE, "Not Enough ETH");
            }
            serumMinted = serumMinted+amount;
        }

        _mint(msg.sender, id, amount, "");
        isPurchased4[msg.sender][id] = isPurchased4[msg.sender][id]+amount;
    }

    function burnCorpForAddress(uint256 typeId, address burnTokenAddress)
        external
    {
        require(msg.sender == invasionContract, "Invalid burner address");
        _burn(burnTokenAddress, typeId, 1);
    }

    function updateBaseUri(string memory _baseURI) external onlyOwner {
        baseURI = _baseURI;
        emit SetBaseURI(baseURI);
    }

    function uri(uint256 typeId)
        public
        view                
        override
        returns (string memory)
    {
        require(
            validTypes[typeId],
            "URI requested for invalid serum type"
        );
        return
            bytes(baseURI).length > 0
                ? string(abi.encodePacked(baseURI, typeId.toString()))
                : baseURI;
    }

    function getEthSignedMessageHash(bytes32 _messageHash) public pure returns (bytes32) {
        /*
        Signature is produced by signing a keccak256 hash with the following format:
        "\x19Ethereum Signed Message\n" + len(msg) + msg
        */
        return
        keccak256(
            abi.encodePacked("\x19Ethereum Signed Message:\n32", _messageHash)
        );
    }

    function signerCheck(address user, bytes memory signature) public view returns (address) {
        bytes32 messageHash = keccak256(abi.encode(user));
        bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash);

        return recoverSigner(ethSignedMessageHash, signature);
    }

    function recoverSigner(bytes32 _ethSignedMessageHash, bytes memory _signature) private pure returns (address) {
        (bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature);
        return ecrecover(_ethSignedMessageHash, v, r, s);
    }

    function splitSignature(bytes memory sig) private pure returns (bytes32 r, bytes32 s, uint8 v) {
        require(sig.length == 65, "sig invalid");

        assembly {
        /*
        First 32 bytes stores the length of the signature

        add(sig, 32) = pointer of sig + 32
        effectively, skips first 32 bytes of signature

        mload(p) loads next 32 bytes starting at the memory address p into memory
        */

        // first 32 bytes, after the length prefix
            r := mload(add(sig, 32))
        // second 32 bytes
            s := mload(add(sig, 64))
        // final byte (first byte of the next 32 bytes)
            v := byte(0, mload(add(sig, 96)))
        }

        // implicitly return (r, s, v)
    }
    function setCrunchContract(address _address) external onlyOwner {
        chubbykaijuDAOCrunch = IChubbyKaijuDAOCrunch(_address);
    }

    function setInvasionContract(address _address) external onlyOwner{
        chubbykaijuDAOInvasion = IChubbyKaijuDAOInvasion(_address);
        invasionContract = _address;
    }

    function setSale(uint16 step) external onlyOwner {
        if(step==1){
            ispreSale1=true;
            ispreSale2=false;
            ispreSale3=false;
            ispublicSale=false;
        }else if(step==2){
            ispreSale1=false;
            ispreSale2=true;
            ispreSale3=false;
            ispublicSale=false;
        }else if(step==3){
            ispreSale1=false;
            ispreSale2=false;
            ispreSale3=true;
            ispublicSale=false;
        }else if(step==4){
            ispreSale1=false;
            ispreSale2=false;
            ispreSale3=false;
            ispublicSale=true;
        }else{
            ispreSale1=false;
            ispreSale2=false;
            ispreSale3=false;
            ispublicSale=false;
        }
    }

    function setSigners(address freeMint, address wl) external onlyOwner{
        signer_free = freeMint;
        signer_wl = wl;
    }

    function setCrunch(bool crunch) external onlyOwner{
        isCrunch = crunch;
    }

    function withdrawETH() public onlyOwner{
        payable(owner()).transfer(address(this).balance);
    }
    function withdrawCRUNCH() public onlyOwner{
        chubbykaijuDAOCrunch.transferFrom(address(this), owner(), chubbykaijuDAOCrunch.balanceOf(address(this)));
    }
}

File 1 of 13: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 3 of 13: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 4 of 13: ERC1155.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC1155.sol";
import "./IERC1155Receiver.sol";
import "./IERC1155MetadataURI.sol";
import "./Address.sol";
import "./Context.sol";
import "./ERC165.sol";

/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC1155-isApprovedForAll}.
     */
    function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(account != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][account] += amount;
        emit TransferSingle(operator, address(0), account, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `account`
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address account,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 accountBalance = _balances[id][account];
        require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][account] = accountBalance - amount;
        }

        emit TransferSingle(operator, account, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 accountBalance = _balances[id][account];
            require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][account] = accountBalance - amount;
            }
        }

        emit TransferBatch(operator, account, address(0), ids, amounts);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver(to).onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

File 5 of 13: ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 6 of 13: IChubbyKaijuDAOCrunch.sol
pragma solidity ^0.8.10;

/***************************************************************************************************
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxddddddddddddddxxxxxdd
kkkkkkkkkkkkkkkkkkkkkkkxxkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxkxkkkkkkkkkkkkkkkkkkkkkxxddddddddddddxxkkkxx
kkkkkkkkkkkkkkkkkkkkkkkkkkkxxxkkkkkkkkkkkkkkkkkkkkkkxxdddddxxxxxkkkkkkkkkkkkkkkkxxddddddddddddxxkxkk
kkkkkkkkkkkkkkkkkkkkxxxxxddddxxkxxkkxxkkkkkkkxxkkxxkkkxxddddddddxxxxkkkkkkkkxxkkkxxddddddddddddxxkkk
kkkkkkkkkkkkkkkxxxxddddddddxxxxkxxoooodxkkkkkxxdooddxkxxkkkxxxxdddddxxxkkkkkkkkkkkxxdddddddddddddxkk
kkkkkkkkkkkkxxxdddddoddxxxxkkkxl,.',,''.',::;'.''','',lxxxkkkkxxddddddxxxkkkxxxxxkkxddddddddddddddxk
kkkkkkkkxxxdddddddddddxxxxdddo,.,d0XXK0kdl;,:ok0KKK0x;.'lxxxxxxxxddddddddxxkkxxxxxxddodddddddddddddx
kkkkkxxxddddddddddddddddddddl'.:KMMMMMMMMNKXWMMMWWMMWXc..';;;:cloddddddddddxkkxxdddddodddddddddddddd
kkxxxddddddddddddddddddddddc..c0WMMMMMMMMWXNMMMMMMMWk;,',;::;,'..':oxxxxddodxxxkxxdddddxdddddddddddd
kxxdddddddddddddddddddddoc'.'d0XWMMMMMMMMMWMMMMMMMMWXOKNWWMMMWX0kl,.'cdkkxxxddddxdddxxkkkxxxdddddddd
xddddxxxxxxdddddddddddl:'.,xXNKKNMMMMMMMMMMMMMMMMMMMWMMMMMMMMMMMMMNk:..cxkkxxxddddddxkkkkkkkxddddddd
xxxxxkkkxxxdddddddddo;..ckNMMMNNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNk,.,dxxkkxxxdddxkkkkkxkkxdddddd
kkkkxxxxdddddddoddo:..c0WMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXo..cxkkkkkxxxxkkkkkkkkkxddddd
kkkxxxddoddddddddd:..xNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNNNXNWWMMMMMMMMMMWNO,.;dkkkkkxkkxxkkkkkkkxxdddd
kxxxdddddo:'',;:c;. lNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWNNWMMMMMWMMMWMMMXc.'okxkkkkkkkkkkkkkkkxdddd
xxdddddodo' .;,',,,:ONWMMMMMMMMMMMMMMMMMMMMMMMMMMMMXxc;;:xXMMMMMMMMMMMWNNNXd..lkkkkkkkkkxkkkkkkkxddd
ddddddddddc..oKKXWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMWkc'      ,0MMMMMMMMMWNNNXNWx..okkkkkkkkkkkkkkkkxdod
dddddddddddl..l0XNNWWWMMWXNMMMMMMMMMMMMMMMMMMMMNd.   ....  :XMMMMMMWWW0l,,;d0l.,xkkkxkkkkkkkkkkkxddd
ddddddddddxko'.,lxO0KXNNO;cXMMMMMMMMMMMMMMMMMMMk.  ....... .kMMMMMMMWk.     :x'.lkkkkkkkkkkkkkkkkxdd
ddddddddxxxkkxl;'.'',:cl:..dWMMMMMMMMMMMMMMMMMWl  ........ .kMMMMMMMNc  ... .c, :xxkkkkkkkkkkkkkkxdd
dddddddxkkkkkkkkxdoc:;,''. ;KMMMMMMMMMMMMMMMMMWl  .......  ,KWWMWX0Ox'       '..cxxkkkkkkkkkkkkkkxdd
dddddxxkkkkkkkkxxkkxkkkkxo'.oWMMMMMMMMMMMMMMMMMO'    ...  .xKkoc;,,,;,.   ,:;,...:dkxkkxkkkkkkkkkxdd
ddddxxkkkkkkkkkkkkkxkkxxddc..kWMMMMMMMMMMMMMMMMMXdc:.. ..;:;...'oOXNWO:colkWMWXk;.,xkxkkkkkkkkkkkxdd
ddxxkkxxkkkkkkkkkkkkxxddddo;.;KMMMMMMMMMMMMMMMMMMMMWX0O0XXxcod;cKMMMMWKl:OMMMMMM0,.lkxkkkkkkkkkkkxdd
dxxkkkkkkkkkkkkxxkkxxddddddo,.:XMMMMMMMMMMMMMMMMMMMMMMMMMMMWMKc:KMMMMMNxoKMMWMMM0,.lkxxxkkkkkkkkxxdd
xxkkkkkkkkkkkkkkkkxxddddddddl'.cXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNWMWMMMMWWMMMWMMNl.,dkkkxkkkkkkkkxddd
xkkkkkkkkkkkkkkkkxdddddddddodl'.cXMMMMMMMMMMMMMMMMMMMMMMMMMMKdOWNxo0WNxlOWKcoXNo..okxxkkkkkkkkkkxddd
kkkkkkkkkkkkkkkkkxddodddddddddo'.,OWMMMMMMMMMMMMMMMMMMMMMN0Oc .lc. .l:. .;. .,, .lkxxkkkkkkkkkkxxddd
kkkkkkkkkkkkkkkkxddddddddddddddo' cNMMMMMMMMMMMMMMMMMMMMMKl,;'. .,,. .'. .,. '' 'xkkxkkkkkkkkkkxdddd
kkkkkkkkkkkkkkkkxddoddddl:,'..';. :NMMMMMMMMMMMMMMMMMMMMMWWWWKlc0WNd,xNx;kWx;xl ,xkkkkxxkkxxkkxxdddd
kkkkkkkkkkkkkkkkxdddddo:..:dxdl'  ,0MMMMMMMMMMMMMMMMMMMMMMMMMMWWMMMWWWMWWMMWWK; :kkkkkkkkkkxkkxddddd
kkkkkkkkkxkkkkkxxdoddo; 'kNMWMNl.'kNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWMMMK:.'dkkkkkxkkkkkkxdddddd
kkkkkkkkkkkxkkkxxddddo' lXNMMWo.:KMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN0o' 'dkkkkxxkkkkkkxxdddddd
kkkkkkkxkkkkkkkxdc;,,'.,kXNMMWK0NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWNNXXO:,,..ckkkkxkkkxkkxxddddddd
kkkkkkkkkxxkxkxc..;loox0KKNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNNNNNNXXXXXXXXXXXKXXk'.cxkxkkxkkkxxdddddddd
kkkkkkkkkkkkxkl..xNMMMMWNXWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWNNWWWWWMMMMMMWO'.ckxkkxkxxxdoddddddx
kkkkkkkkkkkkkx, cNMMMMMMMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWx..okkkkxddddddddddxx
kkkkkkkkkkkkkx, cNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWo.'dkxxddddddddddxkk
kkkkkkkkkxkxxx: ,0WMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWMMMMMMMMMMMMMX; :ddddddddoddxxkkx
kkkkkkkkxxkkxko..dNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWNNNNNNXXXXXXXNNWMMMMMMMMMWk..cdddddddddxxkxxd
kkkkkkkxxkkxkkx, cXWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWNNNWWMMMMMMMWWWNNNNWMMMMMMMMN: ,oddddddxxxkxxdd
kkkkkkkkkkkxkko..oXNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWNNWMMMMMMMMMMMMMMMMWWWMMMMMMMMWk..ldddddxkkxkkxxx
xkkkkkkkkkkxkd,.lXWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMX; ;dddxxkkkkxxkkk
xxkkkkkkkxkkk: :XMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWo 'dxxkkkkkkkkkkk
dxkkkkkkkkxkx, dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMO..okxkkkkkkkkkkx
ddxkkxkkkkxkd'.dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWMMMMX; ckkkkkkkkkkxxd
dodxxkkkkxkkx; cWMMMMWNWMMMMMMMMMMMWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNNWMMMWc ;xkkkxkkkxxddd
dddddxxkkkkxkl..OWMMWNXWMMMMMMMMMMMNNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNXNMMMMd.'dkkkkxxdddddd
ddddddxxkkkkkx; :KWWN0KWMMMMMMMMMMWXNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWXXWMMMk..okxxxdddddddd
ddddddddxxkkkkl..xXX0ccKMMMMMMMMMMWXNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWXXWMMM0'.lxddddddddddd
***************************************************************************************************/

interface IChubbyKaijuDAOCrunch {
  function burn(address from, uint256 amount) external;
  function balanceOf(address owner) external view returns(uint256);
  function transferFrom(address, address, uint256) external;
  function allowance(address owner, address spender) external view returns(uint256);
  function approve(address spender, uint256 amount) external returns(bool);
}

File 7 of 13: IChubbyKaijuDAOInvasion.sol
pragma solidity ^0.8.10;

/***************************************************************************************************
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxddddddddddddddxxxxxdd
kkkkkkkkkkkkkkkkkkkkkkkxxkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxkxkkkkkkkkkkkkkkkkkkkkkxxddddddddddddxxkkkxx
kkkkkkkkkkkkkkkkkkkkkkkkkkkxxxkkkkkkkkkkkkkkkkkkkkkkxxdddddxxxxxkkkkkkkkkkkkkkkkxxddddddddddddxxkxkk
kkkkkkkkkkkkkkkkkkkkxxxxxddddxxkxxkkxxkkkkkkkxxkkxxkkkxxddddddddxxxxkkkkkkkkxxkkkxxddddddddddddxxkkk
kkkkkkkkkkkkkkkxxxxddddddddxxxxkxxoooodxkkkkkxxdooddxkxxkkkxxxxdddddxxxkkkkkkkkkkkxxdddddddddddddxkk
kkkkkkkkkkkkxxxdddddoddxxxxkkkxl,.',,''.',::;'.''','',lxxxkkkkxxddddddxxxkkkxxxxxkkxddddddddddddddxk
kkkkkkkkxxxdddddddddddxxxxdddo,.,d0XXK0kdl;,:ok0KKK0x;.'lxxxxxxxxddddddddxxkkxxxxxxddodddddddddddddx
kkkkkxxxddddddddddddddddddddl'.:KMMMMMMMMNKXWMMMWWMMWXc..';;;:cloddddddddddxkkxxdddddodddddddddddddd
kkxxxddddddddddddddddddddddc..c0WMMMMMMMMWXNMMMMMMMWk;,',;::;,'..':oxxxxddodxxxkxxdddddxdddddddddddd
kxxdddddddddddddddddddddoc'.'d0XWMMMMMMMMMWMMMMMMMMWXOKNWWMMMWX0kl,.'cdkkxxxddddxdddxxkkkxxxdddddddd
xddddxxxxxxdddddddddddl:'.,xXNKKNMMMMMMMMMMMMMMMMMMMWMMMMMMMMMMMMMNk:..cxkkxxxddddddxkkkkkkkxddddddd
xxxxxkkkxxxdddddddddo;..ckNMMMNNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNk,.,dxxkkxxxdddxkkkkkxkkxdddddd
kkkkxxxxdddddddoddo:..c0WMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXo..cxkkkkkxxxxkkkkkkkkkxddddd
kkkxxxddoddddddddd:..xNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNNNXNWWMMMMMMMMMMWNO,.;dkkkkkxkkxxkkkkkkkxxdddd
kxxxdddddo:'',;:c;. lNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWNNWMMMMMWMMMWMMMXc.'okxkkkkkkkkkkkkkkkxdddd
xxdddddodo' .;,',,,:ONWMMMMMMMMMMMMMMMMMMMMMMMMMMMMXxc;;:xXMMMMMMMMMMMWNNNXd..lkkkkkkkkkxkkkkkkkxddd
ddddddddddc..oKKXWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMWkc'      ,0MMMMMMMMMWNNNXNWx..okkkkkkkkkkkkkkkkxdod
dddddddddddl..l0XNNWWWMMWXNMMMMMMMMMMMMMMMMMMMMNd.   ....  :XMMMMMMWWW0l,,;d0l.,xkkkxkkkkkkkkkkkxddd
ddddddddddxko'.,lxO0KXNNO;cXMMMMMMMMMMMMMMMMMMMk.  ....... .kMMMMMMMWk.     :x'.lkkkkkkkkkkkkkkkkxdd
ddddddddxxxkkxl;'.'',:cl:..dWMMMMMMMMMMMMMMMMMWl  ........ .kMMMMMMMNc  ... .c, :xxkkkkkkkkkkkkkkxdd
dddddddxkkkkkkkkxdoc:;,''. ;KMMMMMMMMMMMMMMMMMWl  .......  ,KWWMWX0Ox'       '..cxxkkkkkkkkkkkkkkxdd
dddddxxkkkkkkkkxxkkxkkkkxo'.oWMMMMMMMMMMMMMMMMMO'    ...  .xKkoc;,,,;,.   ,:;,...:dkxkkxkkkkkkkkkxdd
ddddxxkkkkkkkkkkkkkxkkxxddc..kWMMMMMMMMMMMMMMMMMXdc:.. ..;:;...'oOXNWO:colkWMWXk;.,xkxkkkkkkkkkkkxdd
ddxxkkxxkkkkkkkkkkkkxxddddo;.;KMMMMMMMMMMMMMMMMMMMMWX0O0XXxcod;cKMMMMWKl:OMMMMMM0,.lkxkkkkkkkkkkkxdd
dxxkkkkkkkkkkkkxxkkxxddddddo,.:XMMMMMMMMMMMMMMMMMMMMMMMMMMMWMKc:KMMMMMNxoKMMWMMM0,.lkxxxkkkkkkkkxxdd
xxkkkkkkkkkkkkkkkkxxddddddddl'.cXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNWMWMMMMWWMMMWMMNl.,dkkkxkkkkkkkkxddd
xkkkkkkkkkkkkkkkkxdddddddddodl'.cXMMMMMMMMMMMMMMMMMMMMMMMMMMKdOWNxo0WNxlOWKcoXNo..okxxkkkkkkkkkkxddd
kkkkkkkkkkkkkkkkkxddodddddddddo'.,OWMMMMMMMMMMMMMMMMMMMMMN0Oc .lc. .l:. .;. .,, .lkxxkkkkkkkkkkxxddd
kkkkkkkkkkkkkkkkxddddddddddddddo' cNMMMMMMMMMMMMMMMMMMMMMKl,;'. .,,. .'. .,. '' 'xkkxkkkkkkkkkkxdddd
kkkkkkkkkkkkkkkkxddoddddl:,'..';. :NMMMMMMMMMMMMMMMMMMMMMWWWWKlc0WNd,xNx;kWx;xl ,xkkkkxxkkxxkkxxdddd
kkkkkkkkkkkkkkkkxdddddo:..:dxdl'  ,0MMMMMMMMMMMMMMMMMMMMMMMMMMWWMMMWWWMWWMMWWK; :kkkkkkkkkkxkkxddddd
kkkkkkkkkxkkkkkxxdoddo; 'kNMWMNl.'kNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWMMMK:.'dkkkkkxkkkkkkxdddddd
kkkkkkkkkkkxkkkxxddddo' lXNMMWo.:KMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN0o' 'dkkkkxxkkkkkkxxdddddd
kkkkkkkxkkkkkkkxdc;,,'.,kXNMMWK0NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWNNXXO:,,..ckkkkxkkkxkkxxddddddd
kkkkkkkkkxxkxkxc..;loox0KKNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNNNNNNXXXXXXXXXXXKXXk'.cxkxkkxkkkxxdddddddd
kkkkkkkkkkkkxkl..xNMMMMWNXWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWNNWWWWWMMMMMMWO'.ckxkkxkxxxdoddddddx
kkkkkkkkkkkkkx, cNMMMMMMMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWx..okkkkxddddddddddxx
kkkkkkkkkkkkkx, cNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWo.'dkxxddddddddddxkk
kkkkkkkkkxkxxx: ,0WMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWWMMMMMMMMMMMMMX; :ddddddddoddxxkkx
kkkkkkkkxxkkxko..dNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWNNNNNNXXXXXXXNNWMMMMMMMMMWk..cdddddddddxxkxxd
kkkkkkkxxkkxkkx, cXWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWNNNWWMMMMMMMWWWNNNNWMMMMMMMMN: ,oddddddxxxkxxdd
kkkkkkkkkkkxkko..oXNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWNNWMMMMMMMMMMMMMMMMWWWMMMMMMMMWk..ldddddxkkxkkxxx
xkkkkkkkkkkxkd,.lXWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMX; ;dddxxkkkkxxkkk
xxkkkkkkkxkkk: :XMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWo 'dxxkkkkkkkkkkk
dxkkkkkkkkxkx, dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMO..okxkkkkkkkkkkx
ddxkkxkkkkxkd'.dMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWMMMMX; ckkkkkkkkkkxxd
dodxxkkkkxkkx; cWMMMMWNWMMMMMMMMMMMWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNNWMMMWc ;xkkkxkkkxxddd
dddddxxkkkkxkl..OWMMWNXWMMMMMMMMMMMNNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNXNMMMMd.'dkkkkxxdddddd
ddddddxxkkkkkx; :KWWN0KWMMMMMMMMMMWXNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWXXWMMMk..okxxxdddddddd
ddddddddxxkkkkl..xXX0ccKMMMMMMMMMMWXNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWXXWMMM0'.lxddddddddddd
***************************************************************************************************/

interface IChubbyKaijuDAOInvasion {
  function balanceOf(address owner) external view returns(uint256);
}

File 8 of 13: IERC1155.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

File 9 of 13: IERC1155MetadataURI.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC1155.sol";

/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

File 10 of 13: IERC1155Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
        @dev Handles the receipt of a single ERC1155 token type. This function is
        called at the end of a `safeTransferFrom` after the balance has been updated.
        To accept the transfer, this must return
        `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
        (i.e. 0xf23a6e61, or its own function selector).
        @param operator The address which initiated the transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param id The ID of the token being transferred
        @param value The amount of tokens being transferred
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
        @dev Handles the receipt of a multiple ERC1155 token types. This function
        is called at the end of a `safeBatchTransferFrom` after the balances have
        been updated. To accept the transfer(s), this must return
        `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
        (i.e. 0xbc197c81, or its own function selector).
        @param operator The address which initiated the batch transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param ids An array containing ids of each token being transferred (order and length must match values array)
        @param values An array containing amounts of each token being transferred (order and length must match ids array)
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
    */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

File 11 of 13: IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 12 of 13: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 13 of 13: Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"crunch","type":"address"},{"internalType":"string","name":"_baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"_baseURI","type":"string"}],"name":"SetBaseURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"MAX_RADIO","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SERUM","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RADIO_CRUNCH_PRICE","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RADIO_ETH_PRICE","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SERUM_CRUNCH_PRICE","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SERUM_ETH_PRICE","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TYPE_RADIO","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TYPE_SERUM","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TYPE_SUPER_RADIO","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TYPE_SUPER_SERUM","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"},{"internalType":"address","name":"burnTokenAddress","type":"address"}],"name":"burnCorpForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"freePurchased","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"freeRadio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeRadioRemained","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_messageHash","type":"bytes32"}],"name":"getEthSignedMessageHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"isPurchased1","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"isPurchased2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"isPurchased3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"isPurchased4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"preSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"publicSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"radioMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"serumMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"crunch","type":"bool"}],"name":"setCrunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setCrunchContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setInvasionContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"step","type":"uint16"}],"name":"setSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"freeMint","type":"address"},{"internalType":"address","name":"wl","type":"address"}],"name":"setSigners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"signerCheck","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"updateBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"validTypes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawCRUNCH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526005805461ffff60a01b191660bb60a21b1790553480156200002557600080fd5b5060405162004d7038038062004d70833981016040819052620000489162000331565b8062000054816200020a565b50620000603362000223565b601080546001600160a01b0319166001600160a01b03841690811790915560405163095ea7b360e01b81523060048201526c0c9f2c9cd04674edea40000000602482015263095ea7b3906044016020604051808303816000875af1158015620000cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f3919062000431565b5080516200010990600e90602084019062000275565b50600f6020527ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3758054600160ff1991821681179092557f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f80548216831790557fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead805482168317905560036000527f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc829682880549091169091179055604051620001d290600e9062000499565b604051908190038120907f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa90600090a250506200053d565b80516200021f90600290602084019062000275565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000283906200045c565b90600052602060002090601f016020900481019282620002a75760008555620002f2565b82601f10620002c257805160ff1916838001178555620002f2565b82800160010185558215620002f2579182015b82811115620002f2578251825591602001919060010190620002d5565b506200030092915062000304565b5090565b5b8082111562000300576000815560010162000305565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156200034557600080fd5b82516001600160a01b03811681146200035d57600080fd5b602084810151919350906001600160401b03808211156200037d57600080fd5b818601915086601f8301126200039257600080fd5b815181811115620003a757620003a76200031b565b604051601f8201601f19908116603f01168101908382118183101715620003d257620003d26200031b565b816040528281528986848701011115620003eb57600080fd5b600093505b828410156200040f5784840186015181850187015292850192620003f0565b82841115620004215760008684830101525b8096505050505050509250929050565b6000602082840312156200044457600080fd5b815180151581146200045557600080fd5b9392505050565b600181811c908216806200047157607f821691505b602082108114156200049357634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c915080831680620004b657607f831692505b6020808410821415620004d757634e487b7160e01b86526022600452602486fd5b818015620004ee576001811462000500576200052f565b60ff198616895284890196506200052f565b60008a81526020902060005b86811015620005275781548b8201529085019083016200050c565b505084890196505b509498975050505050505050565b614823806200054d6000396000f3fe6080604052600436106102715760003560e01c80639017fa0f1161014f578063c0aa4110116100c1578063e25e16dc1161007a578063e25e16dc14610798578063e985e9c5146107b8578063f04ab11e14610801578063f242432a14610839578063f2fde38b14610859578063fa5408011461087957600080fd5b8063c0aa4110146106c2578063c2bf4a26146106f2578063cd7ee8f81461072d578063d351cfdc14610743578063d80341a214610763578063e086e5ec1461078357600080fd5b8063acc9d79f11610113578063acc9d79f14610622578063afe9407c1461063d578063b20a63b514610653578063b46090001461063d578063b8eb78d214610668578063bf3bf06f1461068a57600080fd5b80639017fa0f1461055a5780639092aa321461057a57806391130aea146105b257806398655ec3146105d2578063a22cb4651461060257600080fd5b80634e1273f4116101e8578063693ec2c6116101ac578063693ec2c61461049b578063715018a6146104d9578063896bf9dd146104ee5780638a92d757146105035780638da5cb5b146105205780638e709c841461053e57600080fd5b80634e1273f4146103ed5780635015e1cd1461041a57806354df62f91461045257806355c98fb3146104655780636658c2d91461048557600080fd5b80632eb2c2d61161023a5780632eb2c2d6146103505780632f96bd691461037057806339f7e37f146103835780633d119776146103a3578063464f23e0146103b85780634915c33c146103d857600080fd5b8062fdd58e1461027657806301ffc9a7146102a957806305362b71146102d95780630e89341c1461030157806325e5e47e1461032e575b600080fd5b34801561028257600080fd5b50610296610291366004613a72565b610899565b6040519081526020015b60405180910390f35b3480156102b557600080fd5b506102c96102c4366004613ab2565b610930565b60405190151581526020016102a0565b3480156102e557600080fd5b506102ee600281565b60405161ffff90911681526020016102a0565b34801561030d57600080fd5b5061032161031c366004613ad6565b610982565b6040516102a09190613b47565b34801561033a57600080fd5b5061034e610349366004613c19565b610ac6565b005b34801561035c57600080fd5b5061034e61036b366004613ce1565b610cc9565b61034e61037e366004613d8a565b610d60565b34801561038f57600080fd5b5061034e61039e366004613dac565b61146a565b3480156103af57600080fd5b506102ee600081565b3480156103c457600080fd5b5061034e6103d3366004613df4565b6114ea565b3480156103e457600080fd5b506102ee600381565b3480156103f957600080fd5b5061040d610408366004613e0f565b611536565b6040516102a09190613f14565b34801561042657600080fd5b5061043a610435366004613f27565b61165f565b6040516001600160a01b0390911681526020016102a0565b61034e610460366004613f6a565b6116b0565b34801561047157600080fd5b5061034e610480366004613fc7565b61283d565b34801561049157600080fd5b5061029660065481565b3480156104a757600080fd5b506104b86806c6b935b8bbd4000081565b6040516fffffffffffffffffffffffffffffffff90911681526020016102a0565b3480156104e557600080fd5b5061034e612887565b3480156104fa57600080fd5b506102ee600181565b34801561050f57600080fd5b506104b8680410d586a20a4c000081565b34801561052c57600080fd5b506003546001600160a01b031661043a565b34801561054a57600080fd5b506104b867012dfb0cb5e8800081565b34801561056657600080fd5b5061034e610575366004613fe2565b6128bd565b34801561058657600080fd5b50610296610595366004613a72565b600a60209081526000928352604080842090915290825290205481565b3480156105be57600080fd5b5061034e6105cd366004614006565b61297e565b3480156105de57600080fd5b506102c96105ed366004613df4565b60086020526000908152604090205460ff1681565b34801561060e57600080fd5b5061034e61061d366004614039565b6129d6565b34801561062e57600080fd5b506104b866e6ed27d666800081565b34801561064957600080fd5b506102ee610d0081565b34801561065f57600080fd5b5061034e612aad565b34801561067457600080fd5b506005546102ee90600160a01b900461ffff1681565b34801561069657600080fd5b506102966106a5366004613a72565b600c60209081526000928352604080842090915290825290205481565b3480156106ce57600080fd5b506102c96106dd366004613ad6565b600f6020526000908152604090205460ff1681565b3480156106fe57600080fd5b506102c961070d366004613a72565b600960209081526000928352604080842090915290825290205460ff1681565b34801561073957600080fd5b5061029660075481565b34801561074f57600080fd5b5061034e61075e366004614063565b612bd0565b34801561076f57600080fd5b5061034e61077e3660046140af565b612c2a565b34801561078f57600080fd5b5061034e612c92565b3480156107a457600080fd5b5061034e6107b3366004613df4565b612cf5565b3480156107c457600080fd5b506102c96107d3366004614006565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561080d57600080fd5b5061029661081c366004613a72565b600b60209081526000928352604080842090915290825290205481565b34801561084557600080fd5b5061034e6108543660046140d2565b612d63565b34801561086557600080fd5b5061034e610874366004613df4565b612dea565b34801561088557600080fd5b50610296610894366004613ad6565b612e82565b60006001600160a01b03831661090a5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061096157506001600160e01b031982166303a24d0760e21b145b8061097c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000818152600f602052604090205460609060ff166109ef5760405162461bcd60e51b8152602060048201526024808201527f5552492072657175657374656420666f7220696e76616c696420736572756d206044820152637479706560e01b6064820152608401610901565b6000600e80546109fe90614136565b905011610a9557600e8054610a1290614136565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3e90614136565b8015610a8b5780601f10610a6057610100808354040283529160200191610a8b565b820191906000526020600020905b815481529060010190602001808311610a6e57829003601f168201915b505050505061097c565b600e610aa083612ed5565b604051602001610ab192919061420b565b60405160208183030381529060405292915050565b6005546001600160a01b0316610adc338361165f565b6001600160a01b031614610b2a5760405162461bcd60e51b81526020600482015260156024820152742737ba10233932b2903930b234b79036b4b73a32b960591b6044820152606401610901565b3360009081526008602052604090205460ff1615610b7b5760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e48135a5b9d195960921b6044820152606401610901565b6011546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be89190614230565b11610c055760405162461bcd60e51b815260040161090190614249565b610c12610d006001614288565b61ffff166006546001610c2591906142a5565b10610c425760405162461bcd60e51b8152600401610901906142bd565b610c6333600061ffff16600160405180602001604052806000815250612fda565b336000908152600860205260408120805460ff191660011790556006805491610c8b836142ec565b909155505060058054600160a01b900461ffff16906014610cab83614307565b91906101000a81548161ffff021916908361ffff1602179055505050565b6001600160a01b038516331480610ce55750610ce585336107d3565b610d4c5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610901565b610d5985858585856130aa565b5050505050565b600d546301000000900460ff16610db15760405162461bcd60e51b8152602060048201526015602482015274139bdd08141d589b1a58dcd85b1948141c995a5bd9605a1b6044820152606401610901565b6000828152600f602052604090205460ff16610e025760405162461bcd60e51b815260206004820152601060248201526f139bdd0815985b1a5908151e5c195a5960821b6044820152606401610901565b60028214801590610e14575060038214155b610e605760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c79204f776e65722043616e204d696e74205355504552205459504500006044820152606401610901565b336000908152600c60209081526040808320858452909152902054600b90610e899083906142a5565b10610ea65760405162461bcd60e51b815260040161090190614325565b6011546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f139190614230565b11610f305760405162461bcd60e51b815260040161090190614249565b816111ab57600554600160a01b900461ffff16610f50610d006001614288565b610f5a9190614351565b61ffff1681600654610f6c91906142a5565b10610f895760405162461bcd60e51b8152600401610901906142bd565b600d54640100000000900460ff1615611165576010546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610fe4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110089190614230565b61101b82680410d586a20a4c0000614374565b11156110395760405162461bcd60e51b815260040161090190614393565b601054604051636eb1769f60e11b81526001600160a01b039091169063dd62ed3e9061106b90339030906004016143bf565b602060405180830381865afa158015611088573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ac9190614230565b6110bf82680410d586a20a4c0000614374565b11156110dd5760405162461bcd60e51b8152600401610901906143d9565b6010546001600160a01b0316639dc29fac3361110284680410d586a20a4c0000614374565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561114857600080fd5b505af115801561115c573d6000803e3d6000fd5b50505050611195565b61117666e6ed27d666800082614374565b3410156111955760405162461bcd60e51b815260040161090190614400565b806006546111a391906142a5565b600655611406565b6111b8610d006001614288565b61ffff16816007546111ca91906142a5565b106111e75760405162461bcd60e51b815260040161090190614428565b600d54640100000000900460ff16156113c3576010546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112669190614230565b611279826806c6b935b8bbd40000614374565b11156112975760405162461bcd60e51b815260040161090190614393565b601054604051636eb1769f60e11b81526001600160a01b039091169063dd62ed3e906112c990339030906004016143bf565b602060405180830381865afa1580156112e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130a9190614230565b61131d826806c6b935b8bbd40000614374565b111561133b5760405162461bcd60e51b8152600401610901906143d9565b6010546001600160a01b0316639dc29fac33611360846806c6b935b8bbd40000614374565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156113a657600080fd5b505af11580156113ba573d6000803e3d6000fd5b505050506113f4565b6113d567012dfb0cb5e8800082614374565b3410156113f45760405162461bcd60e51b815260040161090190614400565b8060075461140291906142a5565b6007555b61142133838360405180602001604052806000815250612fda565b336000908152600c602090815260408083208584529091529020546114479082906142a5565b336000908152600c60209081526040808320958352949052929092209190915550565b6003546001600160a01b031633146114945760405162461bcd60e51b815260040161090190614457565b80516114a790600e9060208401906139bd565b50600e6040516114b7919061448c565b604051908190038120907f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa90600090a250565b6003546001600160a01b031633146115145760405162461bcd60e51b815260040161090190614457565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6060815183511461159b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610901565b600083516001600160401b038111156115b6576115b6613b5a565b6040519080825280602002602001820160405280156115df578160200160208202803683370190505b50905060005b84518110156116575761162a85828151811061160357611603614498565b602002602001015185838151811061161d5761161d614498565b6020026020010151610899565b82828151811061163c5761163c614498565b6020908102919091010152611650816142ec565b90506115e5565b509392505050565b604080516001600160a01b0384166020820152600091829101604051602081830303815290604052805190602001209050600061169b82612e82565b90506116a78185613246565b95945050505050565b600d5460ff16806116c85750600d54610100900460ff165b806116db5750600d5462010000900460ff165b61171c5760405162461bcd60e51b8152602060048201526012602482015271139bdd08141c995cd85b194814195c9a5bd960721b6044820152606401610901565b6000828152600f602052604090205460ff1661176d5760405162461bcd60e51b815260206004820152601060248201526f139bdd0815985b1a5908151e5c195a5960821b6044820152606401610901565b6002821480159061177f575060038214155b6117cb5760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c79204f776e65722043616e204d696e74205355504552205459504500006044820152606401610901565b6004546001600160a01b03166117e1338561165f565b6001600160a01b0316146118295760405162461bcd60e51b815260206004820152600f60248201526e139bdd0815da1a5d195b1a5cdd1959608a1b6044820152606401610901565b6011546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118969190614230565b116118b35760405162461bcd60e51b815260040161090190614249565b600d5460ff1615611dc65733600090815260096020908152604080832085845290915290205460ff16156118f95760405162461bcd60e51b815260040161090190614325565b8060011461193c5760405162461bcd60e51b815260206004820152601060248201526f4e6f206d6f7265207468616e206f6e6560801b6044820152606401610901565b81611b6f57600554600160a01b900461ffff1661195c610d006001614288565b6119669190614351565b61ffff168160065461197891906142a5565b106119955760405162461bcd60e51b8152600401610901906142bd565b6010546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156119dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a019190614230565b611a1482680410d586a20a4c0000614374565b1115611a325760405162461bcd60e51b815260040161090190614393565b601054604051636eb1769f60e11b81526001600160a01b039091169063dd62ed3e90611a6490339030906004016143bf565b602060405180830381865afa158015611a81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa59190614230565b611ab882680410d586a20a4c0000614374565b1115611ad65760405162461bcd60e51b8152600401610901906143d9565b6010546001600160a01b0316639dc29fac33611afb84680410d586a20a4c0000614374565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611b4157600080fd5b505af1158015611b55573d6000803e3d6000fd5b5050505080600654611b6791906142a5565b600655611d81565b611b7c610d006001614288565b61ffff1681600754611b8e91906142a5565b10611bab5760405162461bcd60e51b815260040161090190614428565b6010546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611bf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c179190614230565b611c2a826806c6b935b8bbd40000614374565b1115611c485760405162461bcd60e51b815260040161090190614393565b601054604051636eb1769f60e11b81526001600160a01b039091169063dd62ed3e90611c7a90339030906004016143bf565b602060405180830381865afa158015611c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbb9190614230565b611cce826806c6b935b8bbd40000614374565b1115611cec5760405162461bcd60e51b8152600401610901906143d9565b6010546001600160a01b0316639dc29fac33611d11846806c6b935b8bbd40000614374565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611d5757600080fd5b505af1158015611d6b573d6000803e3d6000fd5b5050505080600754611d7d91906142a5565b6007555b611d9c33838360405180602001604052806000815250612fda565b3360009081526009602090815260408083208584529091529020805460ff19166001179055505050565b600d54610100900460ff16156122c257336000908152600a60209081526040808320858452909152902054600b90611dff9083906142a5565b10611e1c5760405162461bcd60e51b815260040161090190614325565b8161204f57600554600160a01b900461ffff16611e3c610d006001614288565b611e469190614351565b61ffff1681600654611e5891906142a5565b10611e755760405162461bcd60e51b8152600401610901906142bd565b6010546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee19190614230565b611ef482680410d586a20a4c0000614374565b1115611f125760405162461bcd60e51b815260040161090190614393565b601054604051636eb1769f60e11b81526001600160a01b039091169063dd62ed3e90611f4490339030906004016143bf565b602060405180830381865afa158015611f61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f859190614230565b611f9882680410d586a20a4c0000614374565b1115611fb65760405162461bcd60e51b8152600401610901906143d9565b6010546001600160a01b0316639dc29fac33611fdb84680410d586a20a4c0000614374565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561202157600080fd5b505af1158015612035573d6000803e3d6000fd5b505050508060065461204791906142a5565b600655612261565b61205c610d006001614288565b61ffff168160075461206e91906142a5565b1061208b5760405162461bcd60e51b815260040161090190614428565b6010546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156120d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f79190614230565b61210a826806c6b935b8bbd40000614374565b11156121285760405162461bcd60e51b815260040161090190614393565b601054604051636eb1769f60e11b81526001600160a01b039091169063dd62ed3e9061215a90339030906004016143bf565b602060405180830381865afa158015612177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219b9190614230565b6121ae826806c6b935b8bbd40000614374565b11156121cc5760405162461bcd60e51b8152600401610901906143d9565b6010546001600160a01b0316639dc29fac336121f1846806c6b935b8bbd40000614374565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561223757600080fd5b505af115801561224b573d6000803e3d6000fd5b505050508060075461225d91906142a5565b6007555b61227c33838360405180602001604052806000815250612fda565b336000908152600a602090815260408083208584529091529020546122a29082906142a5565b336000908152600a60209081526040808320868452909152902055505050565b336000908152600b60208181526040808420868552909152909120546122e99083906142a5565b106123065760405162461bcd60e51b815260040161090190614325565b8161258157600554600160a01b900461ffff16612326610d006001614288565b6123309190614351565b61ffff168160065461234291906142a5565b1061235f5760405162461bcd60e51b8152600401610901906142bd565b600d54640100000000900460ff161561253b576010546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156123ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123de9190614230565b6123f182680410d586a20a4c0000614374565b111561240f5760405162461bcd60e51b815260040161090190614393565b601054604051636eb1769f60e11b81526001600160a01b039091169063dd62ed3e9061244190339030906004016143bf565b602060405180830381865afa15801561245e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124829190614230565b61249582680410d586a20a4c0000614374565b11156124b35760405162461bcd60e51b8152600401610901906143d9565b6010546001600160a01b0316639dc29fac336124d884680410d586a20a4c0000614374565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561251e57600080fd5b505af1158015612532573d6000803e3d6000fd5b5050505061256b565b61254c66e6ed27d666800082614374565b34101561256b5760405162461bcd60e51b815260040161090190614400565b8060065461257991906142a5565b6006556127dc565b61258e610d006001614288565b61ffff16816007546125a091906142a5565b106125bd5760405162461bcd60e51b815260040161090190614428565b600d54640100000000900460ff1615612799576010546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263c9190614230565b61264f826806c6b935b8bbd40000614374565b111561266d5760405162461bcd60e51b815260040161090190614393565b601054604051636eb1769f60e11b81526001600160a01b039091169063dd62ed3e9061269f90339030906004016143bf565b602060405180830381865afa1580156126bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e09190614230565b6126f3826806c6b935b8bbd40000614374565b11156127115760405162461bcd60e51b8152600401610901906143d9565b6010546001600160a01b0316639dc29fac33612736846806c6b935b8bbd40000614374565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561277c57600080fd5b505af1158015612790573d6000803e3d6000fd5b505050506127ca565b6127ab67012dfb0cb5e8800082614374565b3410156127ca5760405162461bcd60e51b815260040161090190614400565b806007546127d891906142a5565b6007555b6127f733838360405180602001604052806000815250612fda565b336000908152600b6020908152604080832085845290915290205461281d9082906142a5565b336000908152600b60209081526040808320868452909152902055505050565b6003546001600160a01b031633146128675760405162461bcd60e51b815260040161090190614457565b600d80549115156401000000000264ff0000000019909216919091179055565b6003546001600160a01b031633146128b15760405162461bcd60e51b815260040161090190614457565b6128bb60006132c5565b565b6003546001600160a01b031633146128e75760405162461bcd60e51b815260040161090190614457565b8061ffff166001141561290757600d805463ffffffff1916600117905550565b8061ffff166002141561292857600d805463ffffffff191661010017905550565b8061ffff166003141561294a57600d805463ffffffff19166201000017905550565b8061ffff166004141561296d57600d805463ffffffff1916630100000017905550565b600d805463ffffffff191690555b50565b6003546001600160a01b031633146129a85760405162461bcd60e51b815260040161090190614457565b600580546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b336001600160a01b0383161415612a415760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610901565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6003546001600160a01b03163314612ad75760405162461bcd60e51b815260040161090190614457565b6010546001600160a01b03166323b872dd30612afb6003546001600160a01b031690565b6010546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612b43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b679190614230565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015612bb657600080fd5b505af1158015612bca573d6000803e3d6000fd5b50505050565b6003546001600160a01b03163314612bfa5760405162461bcd60e51b815260040161090190614457565b612c26612c0f6003546001600160a01b031690565b838360405180602001604052806000815250613317565b5050565b600d546501000000000090046001600160a01b03163314612c865760405162461bcd60e51b8152602060048201526016602482015275496e76616c6964206275726e6572206164647265737360501b6044820152606401610901565b612c2681836001613462565b6003546001600160a01b03163314612cbc5760405162461bcd60e51b815260040161090190614457565b6003546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561297b573d6000803e3d6000fd5b6003546001600160a01b03163314612d1f5760405162461bcd60e51b815260040161090190614457565b601180546001600160a01b0319166001600160a01b03929092169182179055600d805465010000000000600160c81b03191665010000000000909202919091179055565b6001600160a01b038516331480612d7f5750612d7f85336107d3565b612ddd5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610901565b610d5985858585856135dc565b6003546001600160a01b03163314612e145760405162461bcd60e51b815260040161090190614457565b6001600160a01b038116612e795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610901565b61297b816132c5565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b606081612ef95750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612f235780612f0d816142ec565b9150612f1c9050600a836144c4565b9150612efd565b6000816001600160401b03811115612f3d57612f3d613b5a565b6040519080825280601f01601f191660200182016040528015612f67576020820181803683370190505b5090505b8415612fd257612f7c6001836144d8565b9150612f89600a866144ef565b612f949060306142a5565b60f81b818381518110612fa957612fa9614498565b60200101906001600160f81b031916908160001a905350612fcb600a866144c4565b9450612f6b565b949350505050565b6001600160a01b0384166130005760405162461bcd60e51b815260040161090190614503565b3361301a81600087613011886136f9565b610d59886136f9565b6000848152602081815260408083206001600160a01b03891684529091528120805485929061304a9084906142a5565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610d5981600087878787613744565b81518351146130cb5760405162461bcd60e51b815260040161090190614544565b6001600160a01b0384166130f15760405162461bcd60e51b81526004016109019061458c565b3360005b84518110156131d857600085828151811061311257613112614498565b60200260200101519050600085838151811061313057613130614498565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156131805760405162461bcd60e51b8152600401610901906145d1565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906131bd9084906142a5565b92505081905550505050806131d1906142ec565b90506130f5565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161322892919061461b565b60405180910390a461323e8187878787876138a0565b505050505050565b6000806000806132558561395b565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa1580156132b0573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03841661333d5760405162461bcd60e51b815260040161090190614503565b815183511461335e5760405162461bcd60e51b815260040161090190614544565b3360005b84518110156133fa5783818151811061337d5761337d614498565b602002602001015160008087848151811061339a5761339a614498565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546133e291906142a5565b909155508190506133f2816142ec565b915050613362565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161344b92919061461b565b60405180910390a4610d59816000878787876138a0565b6001600160a01b0383166134c45760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610901565b336134f4818560006134d5876136f9565b6134de876136f9565b5050604080516020810190915260009052505050565b6000838152602081815260408083206001600160a01b0388168452909152902054828110156135715760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610901565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6001600160a01b0384166136025760405162461bcd60e51b81526004016109019061458c565b33613612818787613011886136f9565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156136535760405162461bcd60e51b8152600401610901906145d1565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906136909084906142a5565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46136f0828888888888613744565b50505050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061373357613733614498565b602090810291909101015292915050565b6001600160a01b0384163b1561323e5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906137889089908990889088908890600401614640565b6020604051808303816000875af19250505080156137c3575060408051601f3d908101601f191682019092526137c091810190614685565b60015b613870576137cf6146a2565b806308c379a0141561380957506137e46146be565b806137ef575061380b565b8060405162461bcd60e51b81526004016109019190613b47565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610901565b6001600160e01b0319811663f23a6e6160e01b146136f05760405162461bcd60e51b815260040161090190614747565b6001600160a01b0384163b1561323e5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906138e4908990899088908890889060040161478f565b6020604051808303816000875af192505050801561391f575060408051601f3d908101601f1916820190925261391c91810190614685565b60015b61392b576137cf6146a2565b6001600160e01b0319811663bc197c8160e01b146136f05760405162461bcd60e51b815260040161090190614747565b6000806000835160411461399f5760405162461bcd60e51b815260206004820152600b60248201526a1cda59c81a5b9d985b1a5960aa1b6044820152606401610901565b50505060208101516040820151606090920151909260009190911a90565b8280546139c990614136565b90600052602060002090601f0160209004810192826139eb5760008555613a31565b82601f10613a0457805160ff1916838001178555613a31565b82800160010185558215613a31579182015b82811115613a31578251825591602001919060010190613a16565b50613a3d929150613a41565b5090565b5b80821115613a3d5760008155600101613a42565b80356001600160a01b0381168114613a6d57600080fd5b919050565b60008060408385031215613a8557600080fd5b613a8e83613a56565b946020939093013593505050565b6001600160e01b03198116811461297b57600080fd5b600060208284031215613ac457600080fd5b8135613acf81613a9c565b9392505050565b600060208284031215613ae857600080fd5b5035919050565b60005b83811015613b0a578181015183820152602001613af2565b83811115612bca5750506000910152565b60008151808452613b33816020860160208601613aef565b601f01601f19169290920160200192915050565b602081526000613acf6020830184613b1b565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715613b9557613b95613b5a565b6040525050565b60006001600160401b03831115613bb557613bb5613b5a565b604051613bcc601f8501601f191660200182613b70565b809150838152848484011115613be157600080fd5b83836020830137600060208583010152509392505050565b600082601f830112613c0a57600080fd5b613acf83833560208501613b9c565b600060208284031215613c2b57600080fd5b81356001600160401b03811115613c4157600080fd5b612fd284828501613bf9565b60006001600160401b03821115613c6657613c66613b5a565b5060051b60200190565b600082601f830112613c8157600080fd5b81356020613c8e82613c4d565b604051613c9b8282613b70565b83815260059390931b8501820192828101915086841115613cbb57600080fd5b8286015b84811015613cd65780358352918301918301613cbf565b509695505050505050565b600080600080600060a08688031215613cf957600080fd5b613d0286613a56565b9450613d1060208701613a56565b935060408601356001600160401b0380821115613d2c57600080fd5b613d3889838a01613c70565b94506060880135915080821115613d4e57600080fd5b613d5a89838a01613c70565b93506080880135915080821115613d7057600080fd5b50613d7d88828901613bf9565b9150509295509295909350565b60008060408385031215613d9d57600080fd5b50508035926020909101359150565b600060208284031215613dbe57600080fd5b81356001600160401b03811115613dd457600080fd5b8201601f81018413613de557600080fd5b612fd284823560208401613b9c565b600060208284031215613e0657600080fd5b613acf82613a56565b60008060408385031215613e2257600080fd5b82356001600160401b0380821115613e3957600080fd5b818501915085601f830112613e4d57600080fd5b81356020613e5a82613c4d565b604051613e678282613b70565b83815260059390931b8501820192828101915089841115613e8757600080fd5b948201945b83861015613eac57613e9d86613a56565b82529482019490820190613e8c565b96505086013592505080821115613ec257600080fd5b50613ecf85828601613c70565b9150509250929050565b600081518084526020808501945080840160005b83811015613f0957815187529582019590820190600101613eed565b509495945050505050565b602081526000613acf6020830184613ed9565b60008060408385031215613f3a57600080fd5b613f4383613a56565b915060208301356001600160401b03811115613f5e57600080fd5b613ecf85828601613bf9565b600080600060608486031215613f7f57600080fd5b83356001600160401b03811115613f9557600080fd5b613fa186828701613bf9565b9660208601359650604090950135949350505050565b80358015158114613a6d57600080fd5b600060208284031215613fd957600080fd5b613acf82613fb7565b600060208284031215613ff457600080fd5b813561ffff81168114613acf57600080fd5b6000806040838503121561401957600080fd5b61402283613a56565b915061403060208401613a56565b90509250929050565b6000806040838503121561404c57600080fd5b61405583613a56565b915061403060208401613fb7565b6000806040838503121561407657600080fd5b82356001600160401b038082111561408d57600080fd5b61409986838701613c70565b93506020850135915080821115613ec257600080fd5b600080604083850312156140c257600080fd5b8235915061403060208401613a56565b600080600080600060a086880312156140ea57600080fd5b6140f386613a56565b945061410160208701613a56565b9350604086013592506060860135915060808601356001600160401b0381111561412a57600080fd5b613d7d88828901613bf9565b600181811c9082168061414a57607f821691505b6020821081141561416b57634e487b7160e01b600052602260045260246000fd5b50919050565b8054600090600181811c908083168061418b57607f831692505b60208084108214156141ad57634e487b7160e01b600052602260045260246000fd5b8180156141c157600181146141d2576141ff565b60ff198616895284890196506141ff565b60008881526020902060005b868110156141f75781548b8201529085019083016141de565b505084890196505b50505050505092915050565b60006142178285614171565b8351614227818360208801613aef565b01949350505050565b60006020828403121561424257600080fd5b5051919050565b6020808252600f908201526e4d757374204f776e205a6f6d62696560881b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600061ffff80831681851680830382111561422757614227614272565b600082198211156142b8576142b8614272565b500190565b602080825260159082015274105b1b081c98591a5bdcc8185c99481b5a5b9d1959605a1b604082015260600190565b600060001982141561430057614300614272565b5060010190565b600061ffff82168061431b5761431b614272565b6000190192915050565b602080825260129082015271105b1c9958591e48135a5b9d195908105b1b60721b604082015260600190565b600061ffff8381169083168181101561436c5761436c614272565b039392505050565b600081600019048311821515161561438e5761438e614272565b500290565b6020808252601290820152716e6f7420656e6f7567682062616c616e636560701b604082015260600190565b6001600160a01b0392831681529116602082015260400190565b6020808252600d908201526c6c6f7720616c6c6f77616e636560981b604082015260600190565b6020808252600e908201526d09cdee8408adcdeeaced0408aa8960931b604082015260600190565b602080825260159082015274105b1b081cd95c9d5b5cc8185c99481b5a5b9d1959605a1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000613acf8284614171565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826144d3576144d36144ae565b500490565b6000828210156144ea576144ea614272565b500390565b6000826144fe576144fe6144ae565b500690565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60408152600061462e6040830185613ed9565b82810360208401526116a78185613ed9565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061467a90830184613b1b565b979650505050505050565b60006020828403121561469757600080fd5b8151613acf81613a9c565b600060033d11156146bb5760046000803e5060005160e01c5b90565b600060443d10156146cc5790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156146fb57505050505090565b82850191508151818111156147135750505050505090565b843d870101602082850101111561472d5750505050505090565b61473c60208286010187613b70565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a0604082018190526000906147bb90830186613ed9565b82810360608401526147cd8186613ed9565b905082810360808401526147e18185613b1b565b9897505050505050505056fea26469706673582212207ea6b02ac0d883e80652bc36ea42d32094a408744a8c1de66b5a0281b2707fef64736f6c634300080a00330000000000000000000000009c9502eac5781513405bab0345ba6cbb7e4756c5000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102715760003560e01c80639017fa0f1161014f578063c0aa4110116100c1578063e25e16dc1161007a578063e25e16dc14610798578063e985e9c5146107b8578063f04ab11e14610801578063f242432a14610839578063f2fde38b14610859578063fa5408011461087957600080fd5b8063c0aa4110146106c2578063c2bf4a26146106f2578063cd7ee8f81461072d578063d351cfdc14610743578063d80341a214610763578063e086e5ec1461078357600080fd5b8063acc9d79f11610113578063acc9d79f14610622578063afe9407c1461063d578063b20a63b514610653578063b46090001461063d578063b8eb78d214610668578063bf3bf06f1461068a57600080fd5b80639017fa0f1461055a5780639092aa321461057a57806391130aea146105b257806398655ec3146105d2578063a22cb4651461060257600080fd5b80634e1273f4116101e8578063693ec2c6116101ac578063693ec2c61461049b578063715018a6146104d9578063896bf9dd146104ee5780638a92d757146105035780638da5cb5b146105205780638e709c841461053e57600080fd5b80634e1273f4146103ed5780635015e1cd1461041a57806354df62f91461045257806355c98fb3146104655780636658c2d91461048557600080fd5b80632eb2c2d61161023a5780632eb2c2d6146103505780632f96bd691461037057806339f7e37f146103835780633d119776146103a3578063464f23e0146103b85780634915c33c146103d857600080fd5b8062fdd58e1461027657806301ffc9a7146102a957806305362b71146102d95780630e89341c1461030157806325e5e47e1461032e575b600080fd5b34801561028257600080fd5b50610296610291366004613a72565b610899565b6040519081526020015b60405180910390f35b3480156102b557600080fd5b506102c96102c4366004613ab2565b610930565b60405190151581526020016102a0565b3480156102e557600080fd5b506102ee600281565b60405161ffff90911681526020016102a0565b34801561030d57600080fd5b5061032161031c366004613ad6565b610982565b6040516102a09190613b47565b34801561033a57600080fd5b5061034e610349366004613c19565b610ac6565b005b34801561035c57600080fd5b5061034e61036b366004613ce1565b610cc9565b61034e61037e366004613d8a565b610d60565b34801561038f57600080fd5b5061034e61039e366004613dac565b61146a565b3480156103af57600080fd5b506102ee600081565b3480156103c457600080fd5b5061034e6103d3366004613df4565b6114ea565b3480156103e457600080fd5b506102ee600381565b3480156103f957600080fd5b5061040d610408366004613e0f565b611536565b6040516102a09190613f14565b34801561042657600080fd5b5061043a610435366004613f27565b61165f565b6040516001600160a01b0390911681526020016102a0565b61034e610460366004613f6a565b6116b0565b34801561047157600080fd5b5061034e610480366004613fc7565b61283d565b34801561049157600080fd5b5061029660065481565b3480156104a757600080fd5b506104b86806c6b935b8bbd4000081565b6040516fffffffffffffffffffffffffffffffff90911681526020016102a0565b3480156104e557600080fd5b5061034e612887565b3480156104fa57600080fd5b506102ee600181565b34801561050f57600080fd5b506104b8680410d586a20a4c000081565b34801561052c57600080fd5b506003546001600160a01b031661043a565b34801561054a57600080fd5b506104b867012dfb0cb5e8800081565b34801561056657600080fd5b5061034e610575366004613fe2565b6128bd565b34801561058657600080fd5b50610296610595366004613a72565b600a60209081526000928352604080842090915290825290205481565b3480156105be57600080fd5b5061034e6105cd366004614006565b61297e565b3480156105de57600080fd5b506102c96105ed366004613df4565b60086020526000908152604090205460ff1681565b34801561060e57600080fd5b5061034e61061d366004614039565b6129d6565b34801561062e57600080fd5b506104b866e6ed27d666800081565b34801561064957600080fd5b506102ee610d0081565b34801561065f57600080fd5b5061034e612aad565b34801561067457600080fd5b506005546102ee90600160a01b900461ffff1681565b34801561069657600080fd5b506102966106a5366004613a72565b600c60209081526000928352604080842090915290825290205481565b3480156106ce57600080fd5b506102c96106dd366004613ad6565b600f6020526000908152604090205460ff1681565b3480156106fe57600080fd5b506102c961070d366004613a72565b600960209081526000928352604080842090915290825290205460ff1681565b34801561073957600080fd5b5061029660075481565b34801561074f57600080fd5b5061034e61075e366004614063565b612bd0565b34801561076f57600080fd5b5061034e61077e3660046140af565b612c2a565b34801561078f57600080fd5b5061034e612c92565b3480156107a457600080fd5b5061034e6107b3366004613df4565b612cf5565b3480156107c457600080fd5b506102c96107d3366004614006565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561080d57600080fd5b5061029661081c366004613a72565b600b60209081526000928352604080842090915290825290205481565b34801561084557600080fd5b5061034e6108543660046140d2565b612d63565b34801561086557600080fd5b5061034e610874366004613df4565b612dea565b34801561088557600080fd5b50610296610894366004613ad6565b612e82565b60006001600160a01b03831661090a5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061096157506001600160e01b031982166303a24d0760e21b145b8061097c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000818152600f602052604090205460609060ff166109ef5760405162461bcd60e51b8152602060048201526024808201527f5552492072657175657374656420666f7220696e76616c696420736572756d206044820152637479706560e01b6064820152608401610901565b6000600e80546109fe90614136565b905011610a9557600e8054610a1290614136565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3e90614136565b8015610a8b5780601f10610a6057610100808354040283529160200191610a8b565b820191906000526020600020905b815481529060010190602001808311610a6e57829003601f168201915b505050505061097c565b600e610aa083612ed5565b604051602001610ab192919061420b565b60405160208183030381529060405292915050565b6005546001600160a01b0316610adc338361165f565b6001600160a01b031614610b2a5760405162461bcd60e51b81526020600482015260156024820152742737ba10233932b2903930b234b79036b4b73a32b960591b6044820152606401610901565b3360009081526008602052604090205460ff1615610b7b5760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e48135a5b9d195960921b6044820152606401610901565b6011546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be89190614230565b11610c055760405162461bcd60e51b815260040161090190614249565b610c12610d006001614288565b61ffff166006546001610c2591906142a5565b10610c425760405162461bcd60e51b8152600401610901906142bd565b610c6333600061ffff16600160405180602001604052806000815250612fda565b336000908152600860205260408120805460ff191660011790556006805491610c8b836142ec565b909155505060058054600160a01b900461ffff16906014610cab83614307565b91906101000a81548161ffff021916908361ffff1602179055505050565b6001600160a01b038516331480610ce55750610ce585336107d3565b610d4c5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610901565b610d5985858585856130aa565b5050505050565b600d546301000000900460ff16610db15760405162461bcd60e51b8152602060048201526015602482015274139bdd08141d589b1a58dcd85b1948141c995a5bd9605a1b6044820152606401610901565b6000828152600f602052604090205460ff16610e025760405162461bcd60e51b815260206004820152601060248201526f139bdd0815985b1a5908151e5c195a5960821b6044820152606401610901565b60028214801590610e14575060038214155b610e605760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c79204f776e65722043616e204d696e74205355504552205459504500006044820152606401610901565b336000908152600c60209081526040808320858452909152902054600b90610e899083906142a5565b10610ea65760405162461bcd60e51b815260040161090190614325565b6011546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f139190614230565b11610f305760405162461bcd60e51b815260040161090190614249565b816111ab57600554600160a01b900461ffff16610f50610d006001614288565b610f5a9190614351565b61ffff1681600654610f6c91906142a5565b10610f895760405162461bcd60e51b8152600401610901906142bd565b600d54640100000000900460ff1615611165576010546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610fe4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110089190614230565b61101b82680410d586a20a4c0000614374565b11156110395760405162461bcd60e51b815260040161090190614393565b601054604051636eb1769f60e11b81526001600160a01b039091169063dd62ed3e9061106b90339030906004016143bf565b602060405180830381865afa158015611088573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ac9190614230565b6110bf82680410d586a20a4c0000614374565b11156110dd5760405162461bcd60e51b8152600401610901906143d9565b6010546001600160a01b0316639dc29fac3361110284680410d586a20a4c0000614374565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561114857600080fd5b505af115801561115c573d6000803e3d6000fd5b50505050611195565b61117666e6ed27d666800082614374565b3410156111955760405162461bcd60e51b815260040161090190614400565b806006546111a391906142a5565b600655611406565b6111b8610d006001614288565b61ffff16816007546111ca91906142a5565b106111e75760405162461bcd60e51b815260040161090190614428565b600d54640100000000900460ff16156113c3576010546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112669190614230565b611279826806c6b935b8bbd40000614374565b11156112975760405162461bcd60e51b815260040161090190614393565b601054604051636eb1769f60e11b81526001600160a01b039091169063dd62ed3e906112c990339030906004016143bf565b602060405180830381865afa1580156112e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130a9190614230565b61131d826806c6b935b8bbd40000614374565b111561133b5760405162461bcd60e51b8152600401610901906143d9565b6010546001600160a01b0316639dc29fac33611360846806c6b935b8bbd40000614374565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156113a657600080fd5b505af11580156113ba573d6000803e3d6000fd5b505050506113f4565b6113d567012dfb0cb5e8800082614374565b3410156113f45760405162461bcd60e51b815260040161090190614400565b8060075461140291906142a5565b6007555b61142133838360405180602001604052806000815250612fda565b336000908152600c602090815260408083208584529091529020546114479082906142a5565b336000908152600c60209081526040808320958352949052929092209190915550565b6003546001600160a01b031633146114945760405162461bcd60e51b815260040161090190614457565b80516114a790600e9060208401906139bd565b50600e6040516114b7919061448c565b604051908190038120907f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa90600090a250565b6003546001600160a01b031633146115145760405162461bcd60e51b815260040161090190614457565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6060815183511461159b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610901565b600083516001600160401b038111156115b6576115b6613b5a565b6040519080825280602002602001820160405280156115df578160200160208202803683370190505b50905060005b84518110156116575761162a85828151811061160357611603614498565b602002602001015185838151811061161d5761161d614498565b6020026020010151610899565b82828151811061163c5761163c614498565b6020908102919091010152611650816142ec565b90506115e5565b509392505050565b604080516001600160a01b0384166020820152600091829101604051602081830303815290604052805190602001209050600061169b82612e82565b90506116a78185613246565b95945050505050565b600d5460ff16806116c85750600d54610100900460ff165b806116db5750600d5462010000900460ff165b61171c5760405162461bcd60e51b8152602060048201526012602482015271139bdd08141c995cd85b194814195c9a5bd960721b6044820152606401610901565b6000828152600f602052604090205460ff1661176d5760405162461bcd60e51b815260206004820152601060248201526f139bdd0815985b1a5908151e5c195a5960821b6044820152606401610901565b6002821480159061177f575060038214155b6117cb5760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c79204f776e65722043616e204d696e74205355504552205459504500006044820152606401610901565b6004546001600160a01b03166117e1338561165f565b6001600160a01b0316146118295760405162461bcd60e51b815260206004820152600f60248201526e139bdd0815da1a5d195b1a5cdd1959608a1b6044820152606401610901565b6011546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118969190614230565b116118b35760405162461bcd60e51b815260040161090190614249565b600d5460ff1615611dc65733600090815260096020908152604080832085845290915290205460ff16156118f95760405162461bcd60e51b815260040161090190614325565b8060011461193c5760405162461bcd60e51b815260206004820152601060248201526f4e6f206d6f7265207468616e206f6e6560801b6044820152606401610901565b81611b6f57600554600160a01b900461ffff1661195c610d006001614288565b6119669190614351565b61ffff168160065461197891906142a5565b106119955760405162461bcd60e51b8152600401610901906142bd565b6010546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156119dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a019190614230565b611a1482680410d586a20a4c0000614374565b1115611a325760405162461bcd60e51b815260040161090190614393565b601054604051636eb1769f60e11b81526001600160a01b039091169063dd62ed3e90611a6490339030906004016143bf565b602060405180830381865afa158015611a81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa59190614230565b611ab882680410d586a20a4c0000614374565b1115611ad65760405162461bcd60e51b8152600401610901906143d9565b6010546001600160a01b0316639dc29fac33611afb84680410d586a20a4c0000614374565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611b4157600080fd5b505af1158015611b55573d6000803e3d6000fd5b5050505080600654611b6791906142a5565b600655611d81565b611b7c610d006001614288565b61ffff1681600754611b8e91906142a5565b10611bab5760405162461bcd60e51b815260040161090190614428565b6010546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611bf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c179190614230565b611c2a826806c6b935b8bbd40000614374565b1115611c485760405162461bcd60e51b815260040161090190614393565b601054604051636eb1769f60e11b81526001600160a01b039091169063dd62ed3e90611c7a90339030906004016143bf565b602060405180830381865afa158015611c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbb9190614230565b611cce826806c6b935b8bbd40000614374565b1115611cec5760405162461bcd60e51b8152600401610901906143d9565b6010546001600160a01b0316639dc29fac33611d11846806c6b935b8bbd40000614374565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611d5757600080fd5b505af1158015611d6b573d6000803e3d6000fd5b5050505080600754611d7d91906142a5565b6007555b611d9c33838360405180602001604052806000815250612fda565b3360009081526009602090815260408083208584529091529020805460ff19166001179055505050565b600d54610100900460ff16156122c257336000908152600a60209081526040808320858452909152902054600b90611dff9083906142a5565b10611e1c5760405162461bcd60e51b815260040161090190614325565b8161204f57600554600160a01b900461ffff16611e3c610d006001614288565b611e469190614351565b61ffff1681600654611e5891906142a5565b10611e755760405162461bcd60e51b8152600401610901906142bd565b6010546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee19190614230565b611ef482680410d586a20a4c0000614374565b1115611f125760405162461bcd60e51b815260040161090190614393565b601054604051636eb1769f60e11b81526001600160a01b039091169063dd62ed3e90611f4490339030906004016143bf565b602060405180830381865afa158015611f61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f859190614230565b611f9882680410d586a20a4c0000614374565b1115611fb65760405162461bcd60e51b8152600401610901906143d9565b6010546001600160a01b0316639dc29fac33611fdb84680410d586a20a4c0000614374565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561202157600080fd5b505af1158015612035573d6000803e3d6000fd5b505050508060065461204791906142a5565b600655612261565b61205c610d006001614288565b61ffff168160075461206e91906142a5565b1061208b5760405162461bcd60e51b815260040161090190614428565b6010546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156120d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f79190614230565b61210a826806c6b935b8bbd40000614374565b11156121285760405162461bcd60e51b815260040161090190614393565b601054604051636eb1769f60e11b81526001600160a01b039091169063dd62ed3e9061215a90339030906004016143bf565b602060405180830381865afa158015612177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219b9190614230565b6121ae826806c6b935b8bbd40000614374565b11156121cc5760405162461bcd60e51b8152600401610901906143d9565b6010546001600160a01b0316639dc29fac336121f1846806c6b935b8bbd40000614374565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561223757600080fd5b505af115801561224b573d6000803e3d6000fd5b505050508060075461225d91906142a5565b6007555b61227c33838360405180602001604052806000815250612fda565b336000908152600a602090815260408083208584529091529020546122a29082906142a5565b336000908152600a60209081526040808320868452909152902055505050565b336000908152600b60208181526040808420868552909152909120546122e99083906142a5565b106123065760405162461bcd60e51b815260040161090190614325565b8161258157600554600160a01b900461ffff16612326610d006001614288565b6123309190614351565b61ffff168160065461234291906142a5565b1061235f5760405162461bcd60e51b8152600401610901906142bd565b600d54640100000000900460ff161561253b576010546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156123ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123de9190614230565b6123f182680410d586a20a4c0000614374565b111561240f5760405162461bcd60e51b815260040161090190614393565b601054604051636eb1769f60e11b81526001600160a01b039091169063dd62ed3e9061244190339030906004016143bf565b602060405180830381865afa15801561245e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124829190614230565b61249582680410d586a20a4c0000614374565b11156124b35760405162461bcd60e51b8152600401610901906143d9565b6010546001600160a01b0316639dc29fac336124d884680410d586a20a4c0000614374565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561251e57600080fd5b505af1158015612532573d6000803e3d6000fd5b5050505061256b565b61254c66e6ed27d666800082614374565b34101561256b5760405162461bcd60e51b815260040161090190614400565b8060065461257991906142a5565b6006556127dc565b61258e610d006001614288565b61ffff16816007546125a091906142a5565b106125bd5760405162461bcd60e51b815260040161090190614428565b600d54640100000000900460ff1615612799576010546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263c9190614230565b61264f826806c6b935b8bbd40000614374565b111561266d5760405162461bcd60e51b815260040161090190614393565b601054604051636eb1769f60e11b81526001600160a01b039091169063dd62ed3e9061269f90339030906004016143bf565b602060405180830381865afa1580156126bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e09190614230565b6126f3826806c6b935b8bbd40000614374565b11156127115760405162461bcd60e51b8152600401610901906143d9565b6010546001600160a01b0316639dc29fac33612736846806c6b935b8bbd40000614374565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561277c57600080fd5b505af1158015612790573d6000803e3d6000fd5b505050506127ca565b6127ab67012dfb0cb5e8800082614374565b3410156127ca5760405162461bcd60e51b815260040161090190614400565b806007546127d891906142a5565b6007555b6127f733838360405180602001604052806000815250612fda565b336000908152600b6020908152604080832085845290915290205461281d9082906142a5565b336000908152600b60209081526040808320868452909152902055505050565b6003546001600160a01b031633146128675760405162461bcd60e51b815260040161090190614457565b600d80549115156401000000000264ff0000000019909216919091179055565b6003546001600160a01b031633146128b15760405162461bcd60e51b815260040161090190614457565b6128bb60006132c5565b565b6003546001600160a01b031633146128e75760405162461bcd60e51b815260040161090190614457565b8061ffff166001141561290757600d805463ffffffff1916600117905550565b8061ffff166002141561292857600d805463ffffffff191661010017905550565b8061ffff166003141561294a57600d805463ffffffff19166201000017905550565b8061ffff166004141561296d57600d805463ffffffff1916630100000017905550565b600d805463ffffffff191690555b50565b6003546001600160a01b031633146129a85760405162461bcd60e51b815260040161090190614457565b600580546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b336001600160a01b0383161415612a415760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610901565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6003546001600160a01b03163314612ad75760405162461bcd60e51b815260040161090190614457565b6010546001600160a01b03166323b872dd30612afb6003546001600160a01b031690565b6010546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612b43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b679190614230565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015612bb657600080fd5b505af1158015612bca573d6000803e3d6000fd5b50505050565b6003546001600160a01b03163314612bfa5760405162461bcd60e51b815260040161090190614457565b612c26612c0f6003546001600160a01b031690565b838360405180602001604052806000815250613317565b5050565b600d546501000000000090046001600160a01b03163314612c865760405162461bcd60e51b8152602060048201526016602482015275496e76616c6964206275726e6572206164647265737360501b6044820152606401610901565b612c2681836001613462565b6003546001600160a01b03163314612cbc5760405162461bcd60e51b815260040161090190614457565b6003546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561297b573d6000803e3d6000fd5b6003546001600160a01b03163314612d1f5760405162461bcd60e51b815260040161090190614457565b601180546001600160a01b0319166001600160a01b03929092169182179055600d805465010000000000600160c81b03191665010000000000909202919091179055565b6001600160a01b038516331480612d7f5750612d7f85336107d3565b612ddd5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610901565b610d5985858585856135dc565b6003546001600160a01b03163314612e145760405162461bcd60e51b815260040161090190614457565b6001600160a01b038116612e795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610901565b61297b816132c5565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b606081612ef95750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612f235780612f0d816142ec565b9150612f1c9050600a836144c4565b9150612efd565b6000816001600160401b03811115612f3d57612f3d613b5a565b6040519080825280601f01601f191660200182016040528015612f67576020820181803683370190505b5090505b8415612fd257612f7c6001836144d8565b9150612f89600a866144ef565b612f949060306142a5565b60f81b818381518110612fa957612fa9614498565b60200101906001600160f81b031916908160001a905350612fcb600a866144c4565b9450612f6b565b949350505050565b6001600160a01b0384166130005760405162461bcd60e51b815260040161090190614503565b3361301a81600087613011886136f9565b610d59886136f9565b6000848152602081815260408083206001600160a01b03891684529091528120805485929061304a9084906142a5565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610d5981600087878787613744565b81518351146130cb5760405162461bcd60e51b815260040161090190614544565b6001600160a01b0384166130f15760405162461bcd60e51b81526004016109019061458c565b3360005b84518110156131d857600085828151811061311257613112614498565b60200260200101519050600085838151811061313057613130614498565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156131805760405162461bcd60e51b8152600401610901906145d1565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906131bd9084906142a5565b92505081905550505050806131d1906142ec565b90506130f5565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161322892919061461b565b60405180910390a461323e8187878787876138a0565b505050505050565b6000806000806132558561395b565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa1580156132b0573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03841661333d5760405162461bcd60e51b815260040161090190614503565b815183511461335e5760405162461bcd60e51b815260040161090190614544565b3360005b84518110156133fa5783818151811061337d5761337d614498565b602002602001015160008087848151811061339a5761339a614498565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546133e291906142a5565b909155508190506133f2816142ec565b915050613362565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161344b92919061461b565b60405180910390a4610d59816000878787876138a0565b6001600160a01b0383166134c45760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610901565b336134f4818560006134d5876136f9565b6134de876136f9565b5050604080516020810190915260009052505050565b6000838152602081815260408083206001600160a01b0388168452909152902054828110156135715760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610901565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6001600160a01b0384166136025760405162461bcd60e51b81526004016109019061458c565b33613612818787613011886136f9565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156136535760405162461bcd60e51b8152600401610901906145d1565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906136909084906142a5565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46136f0828888888888613744565b50505050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061373357613733614498565b602090810291909101015292915050565b6001600160a01b0384163b1561323e5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906137889089908990889088908890600401614640565b6020604051808303816000875af19250505080156137c3575060408051601f3d908101601f191682019092526137c091810190614685565b60015b613870576137cf6146a2565b806308c379a0141561380957506137e46146be565b806137ef575061380b565b8060405162461bcd60e51b81526004016109019190613b47565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610901565b6001600160e01b0319811663f23a6e6160e01b146136f05760405162461bcd60e51b815260040161090190614747565b6001600160a01b0384163b1561323e5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906138e4908990899088908890889060040161478f565b6020604051808303816000875af192505050801561391f575060408051601f3d908101601f1916820190925261391c91810190614685565b60015b61392b576137cf6146a2565b6001600160e01b0319811663bc197c8160e01b146136f05760405162461bcd60e51b815260040161090190614747565b6000806000835160411461399f5760405162461bcd60e51b815260206004820152600b60248201526a1cda59c81a5b9d985b1a5960aa1b6044820152606401610901565b50505060208101516040820151606090920151909260009190911a90565b8280546139c990614136565b90600052602060002090601f0160209004810192826139eb5760008555613a31565b82601f10613a0457805160ff1916838001178555613a31565b82800160010185558215613a31579182015b82811115613a31578251825591602001919060010190613a16565b50613a3d929150613a41565b5090565b5b80821115613a3d5760008155600101613a42565b80356001600160a01b0381168114613a6d57600080fd5b919050565b60008060408385031215613a8557600080fd5b613a8e83613a56565b946020939093013593505050565b6001600160e01b03198116811461297b57600080fd5b600060208284031215613ac457600080fd5b8135613acf81613a9c565b9392505050565b600060208284031215613ae857600080fd5b5035919050565b60005b83811015613b0a578181015183820152602001613af2565b83811115612bca5750506000910152565b60008151808452613b33816020860160208601613aef565b601f01601f19169290920160200192915050565b602081526000613acf6020830184613b1b565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715613b9557613b95613b5a565b6040525050565b60006001600160401b03831115613bb557613bb5613b5a565b604051613bcc601f8501601f191660200182613b70565b809150838152848484011115613be157600080fd5b83836020830137600060208583010152509392505050565b600082601f830112613c0a57600080fd5b613acf83833560208501613b9c565b600060208284031215613c2b57600080fd5b81356001600160401b03811115613c4157600080fd5b612fd284828501613bf9565b60006001600160401b03821115613c6657613c66613b5a565b5060051b60200190565b600082601f830112613c8157600080fd5b81356020613c8e82613c4d565b604051613c9b8282613b70565b83815260059390931b8501820192828101915086841115613cbb57600080fd5b8286015b84811015613cd65780358352918301918301613cbf565b509695505050505050565b600080600080600060a08688031215613cf957600080fd5b613d0286613a56565b9450613d1060208701613a56565b935060408601356001600160401b0380821115613d2c57600080fd5b613d3889838a01613c70565b94506060880135915080821115613d4e57600080fd5b613d5a89838a01613c70565b93506080880135915080821115613d7057600080fd5b50613d7d88828901613bf9565b9150509295509295909350565b60008060408385031215613d9d57600080fd5b50508035926020909101359150565b600060208284031215613dbe57600080fd5b81356001600160401b03811115613dd457600080fd5b8201601f81018413613de557600080fd5b612fd284823560208401613b9c565b600060208284031215613e0657600080fd5b613acf82613a56565b60008060408385031215613e2257600080fd5b82356001600160401b0380821115613e3957600080fd5b818501915085601f830112613e4d57600080fd5b81356020613e5a82613c4d565b604051613e678282613b70565b83815260059390931b8501820192828101915089841115613e8757600080fd5b948201945b83861015613eac57613e9d86613a56565b82529482019490820190613e8c565b96505086013592505080821115613ec257600080fd5b50613ecf85828601613c70565b9150509250929050565b600081518084526020808501945080840160005b83811015613f0957815187529582019590820190600101613eed565b509495945050505050565b602081526000613acf6020830184613ed9565b60008060408385031215613f3a57600080fd5b613f4383613a56565b915060208301356001600160401b03811115613f5e57600080fd5b613ecf85828601613bf9565b600080600060608486031215613f7f57600080fd5b83356001600160401b03811115613f9557600080fd5b613fa186828701613bf9565b9660208601359650604090950135949350505050565b80358015158114613a6d57600080fd5b600060208284031215613fd957600080fd5b613acf82613fb7565b600060208284031215613ff457600080fd5b813561ffff81168114613acf57600080fd5b6000806040838503121561401957600080fd5b61402283613a56565b915061403060208401613a56565b90509250929050565b6000806040838503121561404c57600080fd5b61405583613a56565b915061403060208401613fb7565b6000806040838503121561407657600080fd5b82356001600160401b038082111561408d57600080fd5b61409986838701613c70565b93506020850135915080821115613ec257600080fd5b600080604083850312156140c257600080fd5b8235915061403060208401613a56565b600080600080600060a086880312156140ea57600080fd5b6140f386613a56565b945061410160208701613a56565b9350604086013592506060860135915060808601356001600160401b0381111561412a57600080fd5b613d7d88828901613bf9565b600181811c9082168061414a57607f821691505b6020821081141561416b57634e487b7160e01b600052602260045260246000fd5b50919050565b8054600090600181811c908083168061418b57607f831692505b60208084108214156141ad57634e487b7160e01b600052602260045260246000fd5b8180156141c157600181146141d2576141ff565b60ff198616895284890196506141ff565b60008881526020902060005b868110156141f75781548b8201529085019083016141de565b505084890196505b50505050505092915050565b60006142178285614171565b8351614227818360208801613aef565b01949350505050565b60006020828403121561424257600080fd5b5051919050565b6020808252600f908201526e4d757374204f776e205a6f6d62696560881b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600061ffff80831681851680830382111561422757614227614272565b600082198211156142b8576142b8614272565b500190565b602080825260159082015274105b1b081c98591a5bdcc8185c99481b5a5b9d1959605a1b604082015260600190565b600060001982141561430057614300614272565b5060010190565b600061ffff82168061431b5761431b614272565b6000190192915050565b602080825260129082015271105b1c9958591e48135a5b9d195908105b1b60721b604082015260600190565b600061ffff8381169083168181101561436c5761436c614272565b039392505050565b600081600019048311821515161561438e5761438e614272565b500290565b6020808252601290820152716e6f7420656e6f7567682062616c616e636560701b604082015260600190565b6001600160a01b0392831681529116602082015260400190565b6020808252600d908201526c6c6f7720616c6c6f77616e636560981b604082015260600190565b6020808252600e908201526d09cdee8408adcdeeaced0408aa8960931b604082015260600190565b602080825260159082015274105b1b081cd95c9d5b5cc8185c99481b5a5b9d1959605a1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000613acf8284614171565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826144d3576144d36144ae565b500490565b6000828210156144ea576144ea614272565b500390565b6000826144fe576144fe6144ae565b500690565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60408152600061462e6040830185613ed9565b82810360208401526116a78185613ed9565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061467a90830184613b1b565b979650505050505050565b60006020828403121561469757600080fd5b8151613acf81613a9c565b600060033d11156146bb5760046000803e5060005160e01c5b90565b600060443d10156146cc5790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156146fb57505050505090565b82850191508151818111156147135750505050505090565b843d870101602082850101111561472d5750505050505090565b61473c60208286010187613b70565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a0604082018190526000906147bb90830186613ed9565b82810360608401526147cd8186613ed9565b905082810360808401526147e18185613b1b565b9897505050505050505056fea26469706673582212207ea6b02ac0d883e80652bc36ea42d32094a408744a8c1de66b5a0281b2707fef64736f6c634300080a0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000009c9502eac5781513405bab0345ba6cbb7e4756c5000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : crunch (address): 0x9C9502eAc5781513405BAb0345BA6cBb7E4756c5
Arg [1] : _baseURI (string):

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000009c9502eac5781513405bab0345ba6cbb7e4756c5
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

5463:13192:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2054:228:3;;;;;;;;;;-1:-1:-1;2054:228:3;;;;;:::i;:::-;;:::i;:::-;;;597:25:13;;;585:2;570:18;2054:228:3;;;;;;;;1105:305;;;;;;;;;;-1:-1:-1;1105:305:3;;;;;:::i;:::-;;:::i;:::-;;;1184:14:13;;1177:22;1159:41;;1147:2;1132:18;1105:305:3;1019:187:13;5938:43:1;;;;;;;;;;;;5980:1;5938:43;;;;;1385:6:13;1373:19;;;1355:38;;1343:2;1328:18;5938:43:1;1211:188:13;14951:395:1;;;;;;;;;;-1:-1:-1;14951:395:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7584:504::-;;;;;;;;;;-1:-1:-1;7584:504:1;;;;;:::i;:::-;;:::i;:::-;;4082:430:3;;;;;;;;;;-1:-1:-1;4082:430:3;;;;;:::i;:::-;;:::i;12745:1836:1:-;;;;;;:::i;:::-;;:::i;14810:135::-;;;;;;;;;;-1:-1:-1;14810:135:1;;;;;:::i;:::-;;:::i;5852:37::-;;;;;;;;;;;;5888:1;5852:37;;17035:135;;;;;;;;;;-1:-1:-1;17035:135:1;;;;;:::i;:::-;;:::i;5987:43::-;;;;;;;;;;;;6029:1;5987:43;;2439:508:3;;;;;;;;;;-1:-1:-1;2439:508:3;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;15738:296:1:-;;;;;;;;;;-1:-1:-1;15738:296:1;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8995:32:13;;;8977:51;;8965:2;8950:18;15738:296:1;8831:203:13;8094:4644:1;;;;;;:::i;:::-;;:::i;18291:84::-;;;;;;;;;;-1:-1:-1;18291:84:1;;;;;:::i;:::-;;:::i;6171:26::-;;;;;;;;;;;;;;;;5672:54;;;;;;;;;;;;5717:9;5672:54;;;;;10026:34:13;10014:47;;;9996:66;;9984:2;9969:18;5672:54:1;9850:218:13;1598:92:11;;;;;;;;;;;;;:::i;5895:37:1:-;;;;;;;;;;;;5931:1;5895:37;;5613:53;;;;;;;;;;;;5658:8;5613:53;;966:85:11;;;;;;;;;;-1:-1:-1;1038:6:11;;-1:-1:-1;;;;;1038:6:11;966:85;;5792:53:1;;;;;;;;;;;;5834:11;5792:53;;17359:789;;;;;;;;;;-1:-1:-1;17359:789:1;;;;;:::i;:::-;;:::i;6355:65::-;;;;;;;;;;-1:-1:-1;6355:65:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;18154:131;;;;;;;;;;-1:-1:-1;18154:131:1;;;;;:::i;:::-;;:::i;6236:45::-;;;;;;;;;;-1:-1:-1;6236:45:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;3015:306:3;;;;;;;;;;-1:-1:-1;3015:306:3;;;;;:::i;:::-;;:::i;5733:53:1:-;;;;;;;;;;;;5775:11;5733:53;;6082:39;;;;;;;;;;;;6117:4;6082:39;;18490:163;;;;;;;;;;;;;:::i;6128:37::-;;;;;;;;;;-1:-1:-1;6128:37:1;;;;-1:-1:-1;;;6128:37:1;;;;;;6497:65;;;;;;;;;;-1:-1:-1;6497:65:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;6788:42;;;;;;;;;;-1:-1:-1;6788:42:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;6287:62;;;;;;;;;;-1:-1:-1;6287:62:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;6203:26;;;;;;;;;;;;;;;;7418:160;;;;;;;;;;-1:-1:-1;7418:160:1;;;;;:::i;:::-;;:::i;14587:217::-;;;;;;;;;;-1:-1:-1;14587:217:1;;;;;:::i;:::-;;:::i;18381:104::-;;;;;;;;;;;;;:::i;17176:177::-;;;;;;;;;;-1:-1:-1;17176:177:1;;;;;:::i;:::-;;:::i;3388:166:3:-;;;;;;;;;;-1:-1:-1;3388:166:3;;;;;:::i;:::-;-1:-1:-1;;;;;3510:27:3;;;3487:4;3510:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;3388:166;6426:65:1;;;;;;;;;;-1:-1:-1;6426:65:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;3621:389:3;;;;;;;;;;-1:-1:-1;3621:389:3;;;;;:::i;:::-;;:::i;1839:189:11:-;;;;;;;;;;-1:-1:-1;1839:189:11;;;;;:::i;:::-;;:::i;15352:380:1:-;;;;;;;;;;-1:-1:-1;15352:380:1;;;;;:::i;:::-;;:::i;2054:228:3:-;2140:7;-1:-1:-1;;;;;2167:21:3;;2159:77;;;;-1:-1:-1;;;2159:77:3;;12913:2:13;2159:77:3;;;12895:21:13;12952:2;12932:18;;;12925:30;12991:34;12971:18;;;12964:62;-1:-1:-1;;;13042:18:13;;;13035:41;13093:19;;2159:77:3;;;;;;;;;-1:-1:-1;2253:9:3;:13;;;;;;;;;;;-1:-1:-1;;;;;2253:22:3;;;;;;;;;;;;2054:228::o;1105:305::-;1207:4;-1:-1:-1;;;;;;1242:41:3;;-1:-1:-1;;;1242:41:3;;:109;;-1:-1:-1;;;;;;;1299:52:3;;-1:-1:-1;;;1299:52:3;1242:109;:161;;;-1:-1:-1;;;;;;;;;;871:40:4;;;1367:36:3;1223:180;1105:305;-1:-1:-1;;1105:305:3:o;14951:395:1:-;15108:18;;;;:10;:18;;;;;;15058:13;;15108:18;;15087:101;;;;-1:-1:-1;;;15087:101:1;;13325:2:13;15087:101:1;;;13307:21:13;13364:2;13344:18;;;13337:30;13403:34;13383:18;;;13376:62;-1:-1:-1;;;13454:18:13;;;13447:34;13498:19;;15087:101:1;13123:400:13;15087:101:1;15241:1;15223:7;15217:21;;;;;:::i;:::-;;;:25;:122;;15332:7;15217:122;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15285:7;15294:17;:6;:15;:17::i;:::-;15268:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15198:141;14951:395;-1:-1:-1;;14951:395:1:o;7584:504::-;7692:11;;-1:-1:-1;;;;;7692:11:1;7654:34;7666:10;7678:9;7654:11;:34::i;:::-;-1:-1:-1;;;;;7654:49:1;;7646:82;;;;-1:-1:-1;;;7646:82:1;;15600:2:13;7646:82:1;;;15582:21:13;15639:2;15619:18;;;15612:30;-1:-1:-1;;;15658:18:13;;;15651:51;15719:18;;7646:82:1;15398:345:13;7646:82:1;7761:10;7747:25;;;;:13;:25;;;;;;;;7746:26;7738:53;;;;-1:-1:-1;;;7738:53:1;;15950:2:13;7738:53:1;;;15932:21:13;15989:2;15969:18;;;15962:30;-1:-1:-1;;;16008:18:13;;;16001:44;16062:18;;7738:53:1;15748:338:13;7738:53:1;7809:22;;:44;;-1:-1:-1;;;7809:44:1;;7842:10;7809:44;;;8977:51:13;7854:1:1;;-1:-1:-1;;;;;7809:22:1;;:32;;8950:18:13;;7809:44:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;7801:74;;;;-1:-1:-1;;;7801:74:1;;;;;;;:::i;:::-;7907:11;6072:4;7917:1;7907:11;:::i;:::-;7893:25;;:11;;7905:1;7893:13;;;;:::i;:::-;:25;7885:58;;;;-1:-1:-1;;;7885:58:1;;;;;;;:::i;:::-;7953:36;7959:10;5888:1;7953:36;;7983:1;7953:36;;;;;;;;;;;;:5;:36::i;:::-;8013:10;7999:25;;;;:13;:25;;;;;:30;;-1:-1:-1;;7999:30:1;8025:4;7999:30;;;8039:11;:13;;;;;;:::i;:::-;;;;-1:-1:-1;;8062:17:1;:19;;-1:-1:-1;;;8062:19:1;;;;;:17;:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;7584:504;:::o;4082:430:3:-;-1:-1:-1;;;;;4307:20:3;;665:10:2;4307:20:3;;:60;;-1:-1:-1;4331:36:3;4348:4;665:10:2;3388:166:3;:::i;4331:36::-;4286:157;;;;-1:-1:-1;;;4286:157:3;;17996:2:13;4286:157:3;;;17978:21:13;18035:2;18015:18;;;18008:30;18074:34;18054:18;;;18047:62;-1:-1:-1;;;18125:18:13;;;18118:48;18183:19;;4286:157:3;17794:414:13;4286:157:3;4453:52;4476:4;4482:2;4486:3;4491:7;4500:4;4453:22;:52::i;:::-;4082:430;;;;;:::o;12745:1836:1:-;12828:12;;;;;;;12820:46;;;;-1:-1:-1;;;12820:46:1;;18415:2:13;12820:46:1;;;18397:21:13;18454:2;18434:18;;;18427:30;-1:-1:-1;;;18473:18:13;;;18466:51;18534:18;;12820:46:1;18213:345:13;12820:46:1;12884:14;;;;:10;:14;;;;;;;;12876:43;;;;-1:-1:-1;;;12876:43:1;;18765:2:13;12876:43:1;;;18747:21:13;18804:2;18784:18;;;18777:30;-1:-1:-1;;;18823:18:13;;;18816:46;18879:18;;12876:43:1;18563:340:13;12876:43:1;5980:1;12937:20;;;;;:44;;-1:-1:-1;6029:1:1;12961:20;;;12937:44;12929:87;;;;-1:-1:-1;;;12929:87:1;;19110:2:13;12929:87:1;;;19092:21:13;19149:2;19129:18;;;19122:30;19188:32;19168:18;;;19161:60;19238:18;;12929:87:1;18908:354:13;12929:87:1;13047:10;13034:24;;;;:12;:24;;;;;;;;:28;;;;;;;;;13074:2;;13034:37;;13065:6;;13034:37;:::i;:::-;:42;13026:73;;;;-1:-1:-1;;;13026:73:1;;;;;;;:::i;:::-;13117:22;;:44;;-1:-1:-1;;;13117:44:1;;13150:10;13117:44;;;8977:51:13;13162:1:1;;-1:-1:-1;;;;;13117:22:1;;:32;;8950:18:13;;13117:44:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;13109:74;;;;-1:-1:-1;;;13109:74:1;;;;;;;:::i;:::-;13196:14;13193:1262;;13264:17;;-1:-1:-1;;;13264:17:1;;;;13252:11;6072:4;13262:1;13252:11;:::i;:::-;:29;;;;:::i;:::-;13233:48;;13245:6;13233:11;;:18;;;;:::i;:::-;:48;13225:81;;;;-1:-1:-1;;;13225:81:1;;;;;;;:::i;:::-;13323:8;;;;;;;13320:464;;;13389:20;;:42;;-1:-1:-1;;;13389:42:1;;13420:10;13389:42;;;8977:51:13;-1:-1:-1;;;;;13389:20:1;;;;:30;;8950:18:13;;13389:42:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13358:27;13379:6;5658:8;13358:27;:::i;:::-;:73;;13350:104;;;;-1:-1:-1;;;13350:104:1;;;;;;;:::i;:::-;13511:20;;:57;;-1:-1:-1;;;13511:57:1;;-1:-1:-1;;;;;13511:20:1;;;;:30;;:57;;13542:10;;13562:4;;13511:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13480:27;13501:6;5658:8;13480:27;:::i;:::-;:88;;13472:114;;;;-1:-1:-1;;;13472:114:1;;;;;;;:::i;:::-;13604:20;;-1:-1:-1;;;;;13604:20:1;:25;13630:10;13642:27;13663:6;5658:8;13642:27;:::i;:::-;13604:66;;-1:-1:-1;;;;;;13604:66:1;;;;;;;-1:-1:-1;;;;;21199:32:13;;;13604:66:1;;;21181:51:13;21248:18;;;21241:34;21154:18;;13604:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13320:464;;;13728:22;5775:11;13728:6;:22;:::i;:::-;13715:9;:35;;13707:62;;;;-1:-1:-1;;;13707:62:1;;;;;;;:::i;:::-;13823:6;13811:11;;:18;;;;:::i;:::-;13797:11;:32;13193:1262;;;13885:11;6117:4;13895:1;13885:11;:::i;:::-;13866:30;;13878:6;13866:11;;:18;;;;:::i;:::-;:30;13858:63;;;;-1:-1:-1;;;13858:63:1;;;;;;;:::i;:::-;13938:8;;;;;;;13935:464;;;14004:20;;:42;;-1:-1:-1;;;14004:42:1;;14035:10;14004:42;;;8977:51:13;-1:-1:-1;;;;;14004:20:1;;;;:30;;8950:18:13;;14004:42:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13973:27;13994:6;5717:9;13973:27;:::i;:::-;:73;;13965:104;;;;-1:-1:-1;;;13965:104:1;;;;;;;:::i;:::-;14126:20;;:57;;-1:-1:-1;;;14126:57:1;;-1:-1:-1;;;;;14126:20:1;;;;:30;;:57;;14157:10;;14177:4;;14126:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14095:27;14116:6;5717:9;14095:27;:::i;:::-;:88;;14087:114;;;;-1:-1:-1;;;14087:114:1;;;;;;;:::i;:::-;14219:20;;-1:-1:-1;;;;;14219:20:1;:25;14245:10;14257:27;14278:6;5717:9;14257:27;:::i;:::-;14219:66;;-1:-1:-1;;;;;;14219:66:1;;;;;;;-1:-1:-1;;;;;21199:32:13;;;14219:66:1;;;21181:51:13;21248:18;;;21241:34;21154:18;;14219:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13935:464;;;14343:22;5834:11;14343:6;:22;:::i;:::-;14330:9;:35;;14322:62;;;;-1:-1:-1;;;14322:62:1;;;;;;;:::i;:::-;14438:6;14426:11;;:18;;;;:::i;:::-;14412:11;:32;13193:1262;14465:33;14471:10;14483:2;14487:6;14465:33;;;;;;;;;;;;:5;:33::i;:::-;14552:10;14539:24;;;;:12;:24;;;;;;;;:28;;;;;;;;;:35;;14568:6;;14539:35;:::i;:::-;14521:10;14508:24;;;;:12;:24;;;;;;;;:28;;;;;;;;;;:66;;;;-1:-1:-1;12745:1836:1:o;14810:135::-;1038:6:11;;-1:-1:-1;;;;;1038:6:11;665:10:2;1178:23:11;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;14886:18:1;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;;14930:7;14919:19;;;;;;:::i;:::-;;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;14810:135:::0;:::o;17035:::-;1038:6:11;;-1:-1:-1;;;;;1038:6:11;665:10:2;1178:23:11;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;17109:20:1::1;:54:::0;;-1:-1:-1;;;;;;17109:54:1::1;-1:-1:-1::0;;;;;17109:54:1;;;::::1;::::0;;;::::1;::::0;;17035:135::o;2439:508:3:-;2590:16;2649:3;:10;2630:8;:15;:29;2622:83;;;;-1:-1:-1;;;2622:83:3;;22744:2:13;2622:83:3;;;22726:21:13;22783:2;22763:18;;;22756:30;22822:34;22802:18;;;22795:62;-1:-1:-1;;;22873:18:13;;;22866:39;22922:19;;2622:83:3;22542:405:13;2622:83:3;2716:30;2763:8;:15;-1:-1:-1;;;;;2749:30:3;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2749:30:3;;2716:63;;2795:9;2790:120;2814:8;:15;2810:1;:19;2790:120;;;2869:30;2879:8;2888:1;2879:11;;;;;;;;:::i;:::-;;;;;;;2892:3;2896:1;2892:6;;;;;;;;:::i;:::-;;;;;;;2869:9;:30::i;:::-;2850:13;2864:1;2850:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;2831:3;;;:::i;:::-;;;2790:120;;;-1:-1:-1;2927:13:3;2439:508;-1:-1:-1;;;2439:508:3:o;15738:296:1:-;15869:16;;;-1:-1:-1;;;;;8995:32:13;;15869:16:1;;;8977:51:13;15818:7:1;;;;8950:18:13;15869:16:1;;;;;;;;;;;;15859:27;;;;;;15837:49;;15896:28;15927:36;15951:11;15927:23;:36::i;:::-;15896:67;;15981:46;15995:20;16017:9;15981:13;:46::i;:::-;15974:53;15738:296;-1:-1:-1;;;;;15738:296:1:o;8094:4644::-;8198:10;;;;;:24;;-1:-1:-1;8212:10:1;;;;;;;8198:24;:38;;;-1:-1:-1;8226:10:1;;;;;;;8198:38;8190:69;;;;-1:-1:-1;;;8190:69:1;;23286:2:13;8190:69:1;;;23268:21:13;23325:2;23305:18;;;23298:30;-1:-1:-1;;;23344:18:13;;;23337:48;23402:18;;8190:69:1;23084:342:13;8190:69:1;8277:14;;;;:10;:14;;;;;;;;8269:43;;;;-1:-1:-1;;;8269:43:1;;18765:2:13;8269:43:1;;;18747:21:13;18804:2;18784:18;;;18777:30;-1:-1:-1;;;18823:18:13;;;18816:46;18879:18;;8269:43:1;18563:340:13;8269:43:1;5980:1;8330:20;;;;;:44;;-1:-1:-1;6029:1:1;8354:20;;;8330:44;8322:87;;;;-1:-1:-1;;;8322:87:1;;19110:2:13;8322:87:1;;;19092:21:13;19149:2;19129:18;;;19122:30;19188:32;19168:18;;;19161:60;19238:18;;8322:87:1;18908:354:13;8322:87:1;8465:9;;-1:-1:-1;;;;;8465:9:1;8427:34;8439:10;8451:9;8427:11;:34::i;:::-;-1:-1:-1;;;;;8427:47:1;;8419:74;;;;-1:-1:-1;;;8419:74:1;;23633:2:13;8419:74:1;;;23615:21:13;23672:2;23652:18;;;23645:30;-1:-1:-1;;;23691:18:13;;;23684:45;23746:18;;8419:74:1;23431:339:13;8419:74:1;8511:22;;:44;;-1:-1:-1;;;8511:44:1;;8544:10;8511:44;;;8977:51:13;8556:1:1;;-1:-1:-1;;;;;8511:22:1;;:32;;8950:18:13;;8511:44:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;8503:74;;;;-1:-1:-1;;;8503:74:1;;;;;;;:::i;:::-;8590:10;;;;8587:4136;;;8637:10;8624:24;;;;:12;:24;;;;;;;;:28;;;;;;;;;;;8623:29;8615:60;;;;-1:-1:-1;;;8615:60:1;;;;;;;:::i;:::-;8697:6;8705:1;8697:9;8689:38;;;;-1:-1:-1;;;8689:38:1;;23977:2:13;8689:38:1;;;23959:21:13;24016:2;23996:18;;;23989:30;-1:-1:-1;;;24035:18:13;;;24028:46;24091:18;;8689:38:1;23775:340:13;8689:38:1;8744:14;8741:1008;;8816:17;;-1:-1:-1;;;8816:17:1;;;;8804:11;6072:4;8814:1;8804:11;:::i;:::-;:29;;;;:::i;:::-;8785:48;;8797:6;8785:11;;:18;;;;:::i;:::-;:48;8777:81;;;;-1:-1:-1;;;8777:81:1;;;;;;;:::i;:::-;8915:20;;:42;;-1:-1:-1;;;8915:42:1;;8946:10;8915:42;;;8977:51:13;-1:-1:-1;;;;;8915:20:1;;;;:30;;8950:18:13;;8915:42:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8884:27;8905:6;5658:8;8884:27;:::i;:::-;:73;;8876:104;;;;-1:-1:-1;;;8876:104:1;;;;;;;:::i;:::-;9037:20;;:57;;-1:-1:-1;;;9037:57:1;;-1:-1:-1;;;;;9037:20:1;;;;:30;;:57;;9068:10;;9088:4;;9037:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9006:27;9027:6;5658:8;9006:27;:::i;:::-;:88;;8998:114;;;;-1:-1:-1;;;8998:114:1;;;;;;;:::i;:::-;9130:20;;-1:-1:-1;;;;;9130:20:1;:25;9156:10;9168:27;9189:6;5658:8;9168:27;:::i;:::-;9130:66;;-1:-1:-1;;;;;;9130:66:1;;;;;;;-1:-1:-1;;;;;21199:32:13;;;9130:66:1;;;21181:51:13;21248:18;;;21241:34;21154:18;;9130:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9240:6;9228:11;;:18;;;;:::i;:::-;9214:11;:32;8741:1008;;;9310:11;6117:4;9320:1;9310:11;:::i;:::-;9291:30;;9303:6;9291:11;;:18;;;;:::i;:::-;:30;9283:63;;;;-1:-1:-1;;;9283:63:1;;;;;;;:::i;:::-;9403:20;;:42;;-1:-1:-1;;;9403:42:1;;9434:10;9403:42;;;8977:51:13;-1:-1:-1;;;;;9403:20:1;;;;:30;;8950:18:13;;9403:42:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9372:27;9393:6;5717:9;9372:27;:::i;:::-;:73;;9364:104;;;;-1:-1:-1;;;9364:104:1;;;;;;;:::i;:::-;9525:20;;:57;;-1:-1:-1;;;9525:57:1;;-1:-1:-1;;;;;9525:20:1;;;;:30;;:57;;9556:10;;9576:4;;9525:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9494:27;9515:6;5717:9;9494:27;:::i;:::-;:88;;9486:114;;;;-1:-1:-1;;;9486:114:1;;;;;;;:::i;:::-;9618:20;;-1:-1:-1;;;;;9618:20:1;:25;9644:10;9656:27;9677:6;5717:9;9656:27;:::i;:::-;9618:66;;-1:-1:-1;;;;;;9618:66:1;;;;;;;-1:-1:-1;;;;;21199:32:13;;;9618:66:1;;;21181:51:13;21248:18;;;21241:34;21154:18;;9618:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9728:6;9716:11;;:18;;;;:::i;:::-;9702:11;:32;8741:1008;9762:33;9768:10;9780:2;9784:6;9762:33;;;;;;;;;;;;:5;:33::i;:::-;9822:10;9809:24;;;;:12;:24;;;;;;;;:28;;;;;;;;:35;;-1:-1:-1;;9809:35:1;9840:4;9809:35;;;8094:4644;;;:::o;8587:4136::-;9863:10;;;;;;;9860:2863;;;9909:10;9896:24;;;;:12;:24;;;;;;;;:28;;;;;;;;;9936:2;;9896:37;;9927:6;;9896:37;:::i;:::-;:42;9888:73;;;;-1:-1:-1;;;9888:73:1;;;;;;;:::i;:::-;9978:14;9975:1008;;10050:17;;-1:-1:-1;;;10050:17:1;;;;10038:11;6072:4;10048:1;10038:11;:::i;:::-;:29;;;;:::i;:::-;10019:48;;10031:6;10019:11;;:18;;;;:::i;:::-;:48;10011:81;;;;-1:-1:-1;;;10011:81:1;;;;;;;:::i;:::-;10149:20;;:42;;-1:-1:-1;;;10149:42:1;;10180:10;10149:42;;;8977:51:13;-1:-1:-1;;;;;10149:20:1;;;;:30;;8950:18:13;;10149:42:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10118:27;10139:6;5658:8;10118:27;:::i;:::-;:73;;10110:104;;;;-1:-1:-1;;;10110:104:1;;;;;;;:::i;:::-;10271:20;;:57;;-1:-1:-1;;;10271:57:1;;-1:-1:-1;;;;;10271:20:1;;;;:30;;:57;;10302:10;;10322:4;;10271:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10240:27;10261:6;5658:8;10240:27;:::i;:::-;:88;;10232:114;;;;-1:-1:-1;;;10232:114:1;;;;;;;:::i;:::-;10364:20;;-1:-1:-1;;;;;10364:20:1;:25;10390:10;10402:27;10423:6;5658:8;10402:27;:::i;:::-;10364:66;;-1:-1:-1;;;;;;10364:66:1;;;;;;;-1:-1:-1;;;;;21199:32:13;;;10364:66:1;;;21181:51:13;21248:18;;;21241:34;21154:18;;10364:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10474:6;10462:11;;:18;;;;:::i;:::-;10448:11;:32;9975:1008;;;10544:11;6117:4;10554:1;10544:11;:::i;:::-;10525:30;;10537:6;10525:11;;:18;;;;:::i;:::-;:30;10517:63;;;;-1:-1:-1;;;10517:63:1;;;;;;;:::i;:::-;10637:20;;:42;;-1:-1:-1;;;10637:42:1;;10668:10;10637:42;;;8977:51:13;-1:-1:-1;;;;;10637:20:1;;;;:30;;8950:18:13;;10637:42:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10606:27;10627:6;5717:9;10606:27;:::i;:::-;:73;;10598:104;;;;-1:-1:-1;;;10598:104:1;;;;;;;:::i;:::-;10759:20;;:57;;-1:-1:-1;;;10759:57:1;;-1:-1:-1;;;;;10759:20:1;;;;:30;;:57;;10790:10;;10810:4;;10759:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10728:27;10749:6;5717:9;10728:27;:::i;:::-;:88;;10720:114;;;;-1:-1:-1;;;10720:114:1;;;;;;;:::i;:::-;10852:20;;-1:-1:-1;;;;;10852:20:1;:25;10878:10;10890:27;10911:6;5717:9;10890:27;:::i;:::-;10852:66;;-1:-1:-1;;;;;;10852:66:1;;;;;;;-1:-1:-1;;;;;21199:32:13;;;10852:66:1;;;21181:51:13;21248:18;;;21241:34;21154:18;;10852:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10962:6;10950:11;;:18;;;;:::i;:::-;10936:11;:32;9975:1008;10996:33;11002:10;11014:2;11018:6;10996:33;;;;;;;;;;;;:5;:33::i;:::-;11087:10;11074:24;;;;:12;:24;;;;;;;;:28;;;;;;;;;:35;;11103:6;;11074:35;:::i;:::-;11056:10;11043:24;;;;:12;:24;;;;;;;;:28;;;;;;;;:66;8094:4644;;;:::o;9860:2863::-;11159:10;11146:24;;;;11186:2;11146:24;;;;;;;;:28;;;;;;;;;;:37;;11177:6;;11146:37;:::i;:::-;:42;11138:73;;;;-1:-1:-1;;;11138:73:1;;;;;;;:::i;:::-;11228:14;11225:1359;;11300:17;;-1:-1:-1;;;11300:17:1;;;;11288:11;6072:4;11298:1;11288:11;:::i;:::-;:29;;;;:::i;:::-;11269:48;;11281:6;11269:11;;:18;;;;:::i;:::-;:48;11261:81;;;;-1:-1:-1;;;11261:81:1;;;;;;;:::i;:::-;11363:8;;;;;;;11360:488;;;11433:20;;:42;;-1:-1:-1;;;11433:42:1;;11464:10;11433:42;;;8977:51:13;-1:-1:-1;;;;;11433:20:1;;;;:30;;8950:18:13;;11433:42:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11402:27;11423:6;5658:8;11402:27;:::i;:::-;:73;;11394:104;;;;-1:-1:-1;;;11394:104:1;;;;;;;:::i;:::-;11559:20;;:57;;-1:-1:-1;;;11559:57:1;;-1:-1:-1;;;;;11559:20:1;;;;:30;;:57;;11590:10;;11610:4;;11559:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11528:27;11549:6;5658:8;11528:27;:::i;:::-;:88;;11520:114;;;;-1:-1:-1;;;11520:114:1;;;;;;;:::i;:::-;11656:20;;-1:-1:-1;;;;;11656:20:1;:25;11682:10;11694:27;11715:6;5658:8;11694:27;:::i;:::-;11656:66;;-1:-1:-1;;;;;;11656:66:1;;;;;;;-1:-1:-1;;;;;21199:32:13;;;11656:66:1;;;21181:51:13;21248:18;;;21241:34;21154:18;;11656:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11360:488;;;11788:22;5775:11;11788:6;:22;:::i;:::-;11775:9;:35;;11767:62;;;;-1:-1:-1;;;11767:62:1;;;;;;;:::i;:::-;11891:6;11879:11;;:18;;;;:::i;:::-;11865:11;:32;11225:1359;;;11961:11;6117:4;11971:1;11961:11;:::i;:::-;11942:30;;11954:6;11942:11;;:18;;;;:::i;:::-;:30;11934:63;;;;-1:-1:-1;;;11934:63:1;;;;;;;:::i;:::-;12018:8;;;;;;;12015:488;;;12088:20;;:42;;-1:-1:-1;;;12088:42:1;;12119:10;12088:42;;;8977:51:13;-1:-1:-1;;;;;12088:20:1;;;;:30;;8950:18:13;;12088:42:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12057:27;12078:6;5717:9;12057:27;:::i;:::-;:73;;12049:104;;;;-1:-1:-1;;;12049:104:1;;;;;;;:::i;:::-;12214:20;;:57;;-1:-1:-1;;;12214:57:1;;-1:-1:-1;;;;;12214:20:1;;;;:30;;:57;;12245:10;;12265:4;;12214:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12183:27;12204:6;5717:9;12183:27;:::i;:::-;:88;;12175:114;;;;-1:-1:-1;;;12175:114:1;;;;;;;:::i;:::-;12311:20;;-1:-1:-1;;;;;12311:20:1;:25;12337:10;12349:27;12370:6;5717:9;12349:27;:::i;:::-;12311:66;;-1:-1:-1;;;;;;12311:66:1;;;;;;;-1:-1:-1;;;;;21199:32:13;;;12311:66:1;;;21181:51:13;21248:18;;;21241:34;21154:18;;12311:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12015:488;;;12443:22;5834:11;12443:6;:22;:::i;:::-;12430:9;:35;;12422:62;;;;-1:-1:-1;;;12422:62:1;;;;;;;:::i;:::-;12563:6;12551:11;;:18;;;;:::i;:::-;12537:11;:32;11225:1359;12599:33;12605:10;12617:2;12621:6;12599:33;;;;;;;;;;;;:5;:33::i;:::-;12690:10;12677:24;;;;:12;:24;;;;;;;;:28;;;;;;;;;:35;;12706:6;;12677:35;:::i;:::-;12659:10;12646:24;;;;:12;:24;;;;;;;;:28;;;;;;;;:66;8094:4644;;;:::o;18291:84::-;1038:6:11;;-1:-1:-1;;;;;1038:6:11;665:10:2;1178:23:11;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;18351:8:1::1;:17:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;18351:17:1;;::::1;::::0;;;::::1;::::0;;18291:84::o;1598:92:11:-;1038:6;;-1:-1:-1;;;;;1038:6:11;665:10:2;1178:23:11;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;17359:789:1:-;1038:6:11;;-1:-1:-1;;;;;1038:6:11;665:10:2;1178:23:11;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;17421:4:1::1;:7;;17427:1;17421:7;17418:724;;;17443:10;:15:::0;;-1:-1:-1;;17532:18:1;17454:4:::1;17532:18:::0;;;17359:789;:::o;17418:724::-:1;17569:4;:7;;17575:1;17569:7;17566:576;;;17591:10;:16:::0;;-1:-1:-1;;17680:18:1;17591:16:::1;17680:18:::0;;;17359:789;:::o;17566:576::-:1;17717:4;:7;;17723:1;17717:7;17714:428;;;17739:10;:16:::0;;-1:-1:-1;;17828:18:1;17799:15;17828:18;;;17359:789;:::o;17714:428::-:1;17865:4;:7;;17871:1;17865:7;17862:280;;;17887:10;:16:::0;;-1:-1:-1;;17977:17:1;;::::1;::::0;;17359:789;:::o;17862:280::-:1;18023:10;:16:::0;;-1:-1:-1;;18113:18:1;;;17862:280:::1;17359:789:::0;:::o;18154:131::-;1038:6:11;;-1:-1:-1;;;;;1038:6:11;665:10:2;1178:23:11;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;18232:11:1::1;:22:::0;;-1:-1:-1;;;;;18232:22:1;;::::1;-1:-1:-1::0;;;;;;18232:22:1;;::::1;;::::0;;;18264:9:::1;:14:::0;;;;;::::1;::::0;::::1;;::::0;;18154:131::o;3015:306:3:-;665:10:2;-1:-1:-1;;;;;3117:24:3;;;;3109:78;;;;-1:-1:-1;;;3109:78:3;;24322:2:13;3109:78:3;;;24304:21:13;24361:2;24341:18;;;24334:30;24400:34;24380:18;;;24373:62;-1:-1:-1;;;24451:18:13;;;24444:39;24500:19;;3109:78:3;24120:405:13;3109:78:3;665:10:2;3198:32:3;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;3198:42:3;;;;;;;;;;;;:53;;-1:-1:-1;;3198:53:3;;;;;;;;;;3266:48;;1159:41:13;;;3198:42:3;;665:10:2;3266:48:3;;1132:18:13;3266:48:3;;;;;;;3015:306;;:::o;18490:163:1:-;1038:6:11;;-1:-1:-1;;;;;1038:6:11;665:10:2;1178:23:11;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;18542:20:1::1;::::0;-1:-1:-1;;;;;18542:20:1::1;:33;18584:4;18591:7;1038:6:11::0;;-1:-1:-1;;;;;1038:6:11;;966:85;18591:7:1::1;18600:20;::::0;:45:::1;::::0;-1:-1:-1;;;18600:45:1;;18639:4:::1;18600:45;::::0;::::1;8977:51:13::0;-1:-1:-1;;;;;18600:20:1;;::::1;::::0;:30:::1;::::0;8950:18:13;;18600:45:1::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18542:104;::::0;-1:-1:-1;;;;;;18542:104:1::1;::::0;;;;;;-1:-1:-1;;;;;24788:15:13;;;18542:104:1::1;::::0;::::1;24770:34:13::0;24840:15;;;;24820:18;;;24813:43;24872:18;;;24865:34;24705:18;;18542:104:1::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18490:163::o:0;7418:160::-;1038:6:11;;-1:-1:-1;;;;;1038:6:11;665:10:2;1178:23:11;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;7534:37:1::1;7545:7;1038:6:11::0;;-1:-1:-1;;;;;1038:6:11;;966:85;7545:7:1::1;7554:3;7559:7;7534:37;;;;;;;;;;;::::0;:10:::1;:37::i;:::-;7418:160:::0;;:::o;14587:217::-;14710:16;;;;;-1:-1:-1;;;;;14710:16:1;14696:10;:30;14688:65;;;;-1:-1:-1;;;14688:65:1;;25112:2:13;14688:65:1;;;25094:21:13;25151:2;25131:18;;;25124:30;-1:-1:-1;;;25170:18:13;;;25163:52;25232:18;;14688:65:1;24910:346:13;14688:65:1;14763:34;14769:16;14787:6;14795:1;14763:5;:34::i;18381:104::-;1038:6:11;;-1:-1:-1;;;;;1038:6:11;665:10:2;1178:23:11;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;1038:6;;18430:48:1::1;::::0;-1:-1:-1;;;;;1038:6:11;;;;18456:21:1::1;18430:48:::0;::::1;;;::::0;::::1;::::0;;;18456:21;1038:6:11;18430:48:1;::::1;;;;;;;;;;;;;::::0;::::1;;;;17176:177:::0;1038:6:11;;-1:-1:-1;;;;;1038:6:11;665:10:2;1178:23:11;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;17251:22:1::1;:58:::0;;-1:-1:-1;;;;;;17251:58:1::1;-1:-1:-1::0;;;;;17251:58:1;;;::::1;::::0;;::::1;::::0;;17319:16:::1;:27:::0;;-1:-1:-1;;;;;;17319:27:1::1;::::0;;;::::1;::::0;;;::::1;::::0;;17176:177::o;3621:389:3:-;-1:-1:-1;;;;;3821:20:3;;665:10:2;3821:20:3;;:60;;-1:-1:-1;3845:36:3;3862:4;665:10:2;3388:166:3;:::i;3845:36::-;3800:148;;;;-1:-1:-1;;;3800:148:3;;25463:2:13;3800:148:3;;;25445:21:13;25502:2;25482:18;;;25475:30;25541:34;25521:18;;;25514:62;-1:-1:-1;;;25592:18:13;;;25585:39;25641:19;;3800:148:3;25261:405:13;3800:148:3;3958:45;3976:4;3982:2;3986;3990:6;3998:4;3958:17;:45::i;1839:189:11:-;1038:6;;-1:-1:-1;;;;;1038:6:11;665:10:2;1178:23:11;1170:68;;;;-1:-1:-1;;;1170:68:11;;;;;;;:::i;:::-;-1:-1:-1;;;;;1927:22:11;::::1;1919:73;;;::::0;-1:-1:-1;;;1919:73:11;;25873:2:13;1919:73:11::1;::::0;::::1;25855:21:13::0;25912:2;25892:18;;;25885:30;25951:34;25931:18;;;25924:62;-1:-1:-1;;;26002:18:13;;;25995:36;26048:19;;1919:73:11::1;25671:402:13::0;1919:73:11::1;2002:19;2012:8;2002:9;:19::i;15352:380:1:-:0;15649:66;;26320::13;15649::1;;;26308:79:13;26403:12;;;26396:28;;;15428:7:1;;26440:12:13;;15649:66:1;;;;;;;;;;;;15626:99;;;;;;15611:114;;15352:380;;;:::o;275:703:12:-;331:13;548:10;544:51;;-1:-1:-1;;574:10:12;;;;;;;;;;;;-1:-1:-1;;;574:10:12;;;;;275:703::o;544:51::-;619:5;604:12;658:75;665:9;;658:75;;690:8;;;;:::i;:::-;;-1:-1:-1;712:10:12;;-1:-1:-1;720:2:12;712:10;;:::i;:::-;;;658:75;;;742:19;774:6;-1:-1:-1;;;;;764:17:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;764:17:12;;742:39;;791:150;798:10;;791:150;;824:11;834:1;824:11;;:::i;:::-;;-1:-1:-1;892:10:12;900:2;892:5;:10;:::i;:::-;879:24;;:2;:24;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;849:56:12;;;;;;;;-1:-1:-1;919:11:12;928:2;919:11;;:::i;:::-;;;791:150;;;964:6;275:703;-1:-1:-1;;;;275:703:12:o;8447:583:3:-;-1:-1:-1;;;;;8599:21:3;;8591:67;;;;-1:-1:-1;;;8591:67:3;;;;;;;:::i;:::-;665:10:2;8711:107:3;665:10:2;8669:16:3;8754:7;8763:21;8781:2;8763:17;:21::i;:::-;8786:25;8804:6;8786:17;:25::i;8711:107::-;8829:9;:13;;;;;;;;;;;-1:-1:-1;;;;;8829:22:3;;;;;;;;;:32;;8855:6;;8829:9;:32;;8855:6;;8829:32;:::i;:::-;;;;-1:-1:-1;;8876:57:3;;;27543:25:13;;;27599:2;27584:18;;27577:34;;;-1:-1:-1;;;;;8876:57:3;;;;8909:1;;8876:57;;;;;;27516:18:13;8876:57:3;;;;;;;8944:79;8975:8;8993:1;8997:7;9006:2;9010:6;9018:4;8944:30;:79::i;6105:1045::-;6325:7;:14;6311:3;:10;:28;6303:81;;;;-1:-1:-1;;;6303:81:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;6402:16:3;;6394:66;;;;-1:-1:-1;;;6394:66:3;;;;;;;:::i;:::-;665:10:2;6471:16:3;6584:411;6608:3;:10;6604:1;:14;6584:411;;;6639:10;6652:3;6656:1;6652:6;;;;;;;;:::i;:::-;;;;;;;6639:19;;6672:14;6689:7;6697:1;6689:10;;;;;;;;:::i;:::-;;;;;;;;;;;;6714:19;6736:13;;;;;;;;;;-1:-1:-1;;;;;6736:19:3;;;;;;;;;;;;6689:10;;-1:-1:-1;6777:21:3;;;;6769:76;;;;-1:-1:-1;;;6769:76:3;;;;;;;:::i;:::-;6887:9;:13;;;;;;;;;;;-1:-1:-1;;;;;6887:19:3;;;;;;;;;;6909:20;;;6887:42;;6957:17;;;;;;;:27;;6909:20;;6887:9;6957:27;;6909:20;;6957:27;:::i;:::-;;;;;;;;6625:370;;;6620:3;;;;:::i;:::-;;;6584:411;;;;7040:2;-1:-1:-1;;;;;7010:47:3;7034:4;-1:-1:-1;;;;;7010:47:3;7024:8;-1:-1:-1;;;;;7010:47:3;;7044:3;7049:7;7010:47;;;;;;;:::i;:::-;;;;;;;;7068:75;7104:8;7114:4;7120:2;7124:3;7129:7;7138:4;7068:35;:75::i;:::-;6293:857;6105:1045;;;;;:::o;16040:245:1:-;16141:7;16161:9;16172;16183:7;16194:26;16209:10;16194:14;:26::i;:::-;16237:41;;;;;;;;;;;;29545:25:13;;;29618:4;29606:17;;29586:18;;;29579:45;;;;29640:18;;;29633:34;;;29683:18;;;29676:34;;;16160:60:1;;-1:-1:-1;16160:60:1;;-1:-1:-1;16160:60:1;-1:-1:-1;16237:41:1;;29517:19:13;;16237:41:1;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16237:41:1;;-1:-1:-1;;16237:41:1;;;16040:245;-1:-1:-1;;;;;;;16040:245:1:o;2034:169:11:-;2108:6;;;-1:-1:-1;;;;;2124:17:11;;;-1:-1:-1;;;;;;2124:17:11;;;;;;;2156:40;;2108:6;;;2124:17;2108:6;;2156:40;;2089:16;;2156:40;2079:124;2034:169;:::o;9375:715:3:-;-1:-1:-1;;;;;9547:16:3;;9539:62;;;;-1:-1:-1;;;9539:62:3;;;;;;;:::i;:::-;9633:7;:14;9619:3;:10;:28;9611:81;;;;-1:-1:-1;;;9611:81:3;;;;;;;:::i;:::-;665:10:2;9703:16:3;9822:101;9846:3;:10;9842:1;:14;9822:101;;;9902:7;9910:1;9902:10;;;;;;;;:::i;:::-;;;;;;;9877:9;:17;9887:3;9891:1;9887:6;;;;;;;;:::i;:::-;;;;;;;9877:17;;;;;;;;;;;:21;9895:2;-1:-1:-1;;;;;9877:21:3;-1:-1:-1;;;;;9877:21:3;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;9858:3:3;;-1:-1:-1;9858:3:3;;;:::i;:::-;;;;9822:101;;;;9974:2;-1:-1:-1;;;;;9938:53:3;9970:1;-1:-1:-1;;;;;9938:53:3;9952:8;-1:-1:-1;;;;;9938:53:3;;9978:3;9983:7;9938:53;;;;;;;:::i;:::-;;;;;;;;10002:81;10038:8;10056:1;10060:2;10064:3;10069:7;10078:4;10002:35;:81::i;10339:657::-;-1:-1:-1;;;;;10464:21:3;;10456:69;;;;-1:-1:-1;;;10456:69:3;;29923:2:13;10456:69:3;;;29905:21:13;29962:2;29942:18;;;29935:30;30001:34;29981:18;;;29974:62;-1:-1:-1;;;30052:18:13;;;30045:33;30095:19;;10456:69:3;29721:399:13;10456:69:3;665:10:2;10578:105:3;665:10:2;10609:7:3;10536:16;10630:21;10648:2;10630:17;:21::i;:::-;10653:25;10671:6;10653:17;:25::i;:::-;-1:-1:-1;;10578:105:3;;;;;;;;;-1:-1:-1;10578:105:3;;-1:-1:-1;;;6105:1045:3;10578:105;10694:22;10719:13;;;;;;;;;;;-1:-1:-1;;;;;10719:22:3;;;;;;;;;;10759:24;;;;10751:73;;;;-1:-1:-1;;;10751:73:3;;30327:2:13;10751:73:3;;;30309:21:13;30366:2;30346:18;;;30339:30;30405:34;30385:18;;;30378:62;-1:-1:-1;;;30456:18:13;;;30449:34;30500:19;;10751:73:3;30125:400:13;10751:73:3;10858:9;:13;;;;;;;;;;;-1:-1:-1;;;;;10858:22:3;;;;;;;;;;;;10883:23;;;10858:48;;10932:57;;27543:25:13;;;27584:18;;;27577:34;;;10858:22:3;;10932:57;;;;;;27516:18:13;10932:57:3;;;;;;;10446:550;;10339:657;;;:::o;4962:797::-;-1:-1:-1;;;;;5143:16:3;;5135:66;;;;-1:-1:-1;;;5135:66:3;;;;;;;:::i;:::-;665:10:2;5254:96:3;665:10:2;5285:4:3;5291:2;5295:21;5313:2;5295:17;:21::i;5254:96::-;5361:19;5383:13;;;;;;;;;;;-1:-1:-1;;;;;5383:19:3;;;;;;;;;;5420:21;;;;5412:76;;;;-1:-1:-1;;;5412:76:3;;;;;;;:::i;:::-;5522:9;:13;;;;;;;;;;;-1:-1:-1;;;;;5522:19:3;;;;;;;;;;5544:20;;;5522:42;;5584:17;;;;;;;:27;;5544:20;;5522:9;5584:27;;5544:20;;5584:27;:::i;:::-;;;;-1:-1:-1;;5627:46:3;;;27543:25:13;;;27599:2;27584:18;;27577:34;;;-1:-1:-1;;;;;5627:46:3;;;;;;;;;;;;;;27516:18:13;5627:46:3;;;;;;;5684:68;5715:8;5725:4;5731:2;5735;5739:6;5747:4;5684:30;:68::i;:::-;5125:634;;4962:797;;;;;:::o;14775:193::-;14894:16;;;14908:1;14894:16;;;;;;;;;14841;;14869:22;;14894:16;;;;;;;;;;;;-1:-1:-1;14894:16:3;14869:41;;14931:7;14920:5;14926:1;14920:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;14956:5;14775:193;-1:-1:-1;;14775:193:3:o;13238:729::-;-1:-1:-1;;;;;13445:13:3;;1034:20:0;1080:8;13441:520:3;;13480:72;;-1:-1:-1;;;13480:72:3;;-1:-1:-1;;;;;13480:38:3;;;;;:72;;13519:8;;13529:4;;13535:2;;13539:6;;13547:4;;13480:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13480:72:3;;;;;;;;-1:-1:-1;;13480:72:3;;;;;;;;;;;;:::i;:::-;;;13476:475;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;13827:6;13820:14;;-1:-1:-1;;;13820:14:3;;;;;;;;:::i;13476:475::-;;;13874:62;;-1:-1:-1;;;13874:62:3;;32412:2:13;13874:62:3;;;32394:21:13;32451:2;32431:18;;;32424:30;32490:34;32470:18;;;32463:62;-1:-1:-1;;;32541:18:13;;;32534:50;32601:19;;13874:62:3;32210:416:13;13476:475:3;-1:-1:-1;;;;;;13601:59:3;;-1:-1:-1;;;13601:59:3;13597:156;;13684:50;;-1:-1:-1;;;13684:50:3;;;;;;;:::i;13973:796::-;-1:-1:-1;;;;;14205:13:3;;1034:20:0;1080:8;14201:562:3;;14240:79;;-1:-1:-1;;;14240:79:3;;-1:-1:-1;;;;;14240:43:3;;;;;:79;;14284:8;;14294:4;;14300:3;;14305:7;;14314:4;;14240:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14240:79:3;;;;;;;;-1:-1:-1;;14240:79:3;;;;;;;;;;;;:::i;:::-;;;14236:517;;;;:::i;:::-;-1:-1:-1;;;;;;14398:64:3;;-1:-1:-1;;;14398:64:3;14394:161;;14486:50;;-1:-1:-1;;;14486:50:3;;;;;;;:::i;16291:739:1:-;16355:9;16366;16377:7;16404:3;:10;16418:2;16404:16;16396:40;;;;-1:-1:-1;;;16396:40:1;;34074:2:13;16396:40:1;;;34056:21:13;34113:2;34093:18;;;34086:30;-1:-1:-1;;;34132:18:13;;;34125:41;34183:18;;16396:40:1;33872:335:13;16396:40:1;-1:-1:-1;;;16804:2:1;16795:12;;16789:19;16868:2;16859:12;;16853:19;16969:2;16960:12;;;16954:19;16789;;16951:1;16946:28;;;;;16291:739::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:13;82:20;;-1:-1:-1;;;;;131:31:13;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:254::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;436:2;421:18;;;;408:32;;-1:-1:-1;;;192:254:13:o;633:131::-;-1:-1:-1;;;;;;707:32:13;;697:43;;687:71;;754:1;751;744:12;769:245;827:6;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;935:9;922:23;954:30;978:5;954:30;:::i;:::-;1003:5;769:245;-1:-1:-1;;;769:245:13:o;1404:180::-;1463:6;1516:2;1504:9;1495:7;1491:23;1487:32;1484:52;;;1532:1;1529;1522:12;1484:52;-1:-1:-1;1555:23:13;;1404:180;-1:-1:-1;1404:180:13:o;1589:258::-;1661:1;1671:113;1685:6;1682:1;1679:13;1671:113;;;1761:11;;;1755:18;1742:11;;;1735:39;1707:2;1700:10;1671:113;;;1802:6;1799:1;1796:13;1793:48;;;-1:-1:-1;;1837:1:13;1819:16;;1812:27;1589:258::o;1852:::-;1894:3;1932:5;1926:12;1959:6;1954:3;1947:19;1975:63;2031:6;2024:4;2019:3;2015:14;2008:4;2001:5;1997:16;1975:63;:::i;:::-;2092:2;2071:15;-1:-1:-1;;2067:29:13;2058:39;;;;2099:4;2054:50;;1852:258;-1:-1:-1;;1852:258:13:o;2115:220::-;2264:2;2253:9;2246:21;2227:4;2284:45;2325:2;2314:9;2310:18;2302:6;2284:45;:::i;2340:127::-;2401:10;2396:3;2392:20;2389:1;2382:31;2432:4;2429:1;2422:15;2456:4;2453:1;2446:15;2472:249;2582:2;2563:13;;-1:-1:-1;;2559:27:13;2547:40;;-1:-1:-1;;;;;2602:34:13;;2638:22;;;2599:62;2596:88;;;2664:18;;:::i;:::-;2700:2;2693:22;-1:-1:-1;;2472:249:13:o;2726:468::-;2790:5;-1:-1:-1;;;;;2816:6:13;2813:30;2810:56;;;2846:18;;:::i;:::-;2895:2;2889:9;2907:69;2964:2;2943:15;;-1:-1:-1;;2939:29:13;2970:4;2935:40;2889:9;2907:69;:::i;:::-;2994:6;2985:15;;3024:6;3016;3009:22;3064:3;3055:6;3050:3;3046:16;3043:25;3040:45;;;3081:1;3078;3071:12;3040:45;3131:6;3126:3;3119:4;3111:6;3107:17;3094:44;3186:1;3179:4;3170:6;3162;3158:19;3154:30;3147:41;;2726:468;;;;;:::o;3199:220::-;3241:5;3294:3;3287:4;3279:6;3275:17;3271:27;3261:55;;3312:1;3309;3302:12;3261:55;3334:79;3409:3;3400:6;3387:20;3380:4;3372:6;3368:17;3334:79;:::i;3424:320::-;3492:6;3545:2;3533:9;3524:7;3520:23;3516:32;3513:52;;;3561:1;3558;3551:12;3513:52;3601:9;3588:23;-1:-1:-1;;;;;3626:6:13;3623:30;3620:50;;;3666:1;3663;3656:12;3620:50;3689:49;3730:7;3721:6;3710:9;3706:22;3689:49;:::i;3749:183::-;3809:4;-1:-1:-1;;;;;3834:6:13;3831:30;3828:56;;;3864:18;;:::i;:::-;-1:-1:-1;3909:1:13;3905:14;3921:4;3901:25;;3749:183::o;3937:724::-;3991:5;4044:3;4037:4;4029:6;4025:17;4021:27;4011:55;;4062:1;4059;4052:12;4011:55;4098:6;4085:20;4124:4;4147:43;4187:2;4147:43;:::i;:::-;4219:2;4213:9;4231:31;4259:2;4251:6;4231:31;:::i;:::-;4297:18;;;4389:1;4385:10;;;;4373:23;;4369:32;;;4331:15;;;;-1:-1:-1;4413:15:13;;;4410:35;;;4441:1;4438;4431:12;4410:35;4477:2;4469:6;4465:15;4489:142;4505:6;4500:3;4497:15;4489:142;;;4571:17;;4559:30;;4609:12;;;;4522;;4489:142;;;-1:-1:-1;4649:6:13;3937:724;-1:-1:-1;;;;;;3937:724:13:o;4666:943::-;4820:6;4828;4836;4844;4852;4905:3;4893:9;4884:7;4880:23;4876:33;4873:53;;;4922:1;4919;4912:12;4873:53;4945:29;4964:9;4945:29;:::i;:::-;4935:39;;4993:38;5027:2;5016:9;5012:18;4993:38;:::i;:::-;4983:48;;5082:2;5071:9;5067:18;5054:32;-1:-1:-1;;;;;5146:2:13;5138:6;5135:14;5132:34;;;5162:1;5159;5152:12;5132:34;5185:61;5238:7;5229:6;5218:9;5214:22;5185:61;:::i;:::-;5175:71;;5299:2;5288:9;5284:18;5271:32;5255:48;;5328:2;5318:8;5315:16;5312:36;;;5344:1;5341;5334:12;5312:36;5367:63;5422:7;5411:8;5400:9;5396:24;5367:63;:::i;:::-;5357:73;;5483:3;5472:9;5468:19;5455:33;5439:49;;5513:2;5503:8;5500:16;5497:36;;;5529:1;5526;5519:12;5497:36;;5552:51;5595:7;5584:8;5573:9;5569:24;5552:51;:::i;:::-;5542:61;;;4666:943;;;;;;;;:::o;5614:248::-;5682:6;5690;5743:2;5731:9;5722:7;5718:23;5714:32;5711:52;;;5759:1;5756;5749:12;5711:52;-1:-1:-1;;5782:23:13;;;5852:2;5837:18;;;5824:32;;-1:-1:-1;5614:248:13:o;5867:450::-;5936:6;5989:2;5977:9;5968:7;5964:23;5960:32;5957:52;;;6005:1;6002;5995:12;5957:52;6045:9;6032:23;-1:-1:-1;;;;;6070:6:13;6067:30;6064:50;;;6110:1;6107;6100:12;6064:50;6133:22;;6186:4;6178:13;;6174:27;-1:-1:-1;6164:55:13;;6215:1;6212;6205:12;6164:55;6238:73;6303:7;6298:2;6285:16;6280:2;6276;6272:11;6238:73;:::i;6322:186::-;6381:6;6434:2;6422:9;6413:7;6409:23;6405:32;6402:52;;;6450:1;6447;6440:12;6402:52;6473:29;6492:9;6473:29;:::i;6513:1208::-;6631:6;6639;6692:2;6680:9;6671:7;6667:23;6663:32;6660:52;;;6708:1;6705;6698:12;6660:52;6748:9;6735:23;-1:-1:-1;;;;;6818:2:13;6810:6;6807:14;6804:34;;;6834:1;6831;6824:12;6804:34;6872:6;6861:9;6857:22;6847:32;;6917:7;6910:4;6906:2;6902:13;6898:27;6888:55;;6939:1;6936;6929:12;6888:55;6975:2;6962:16;6997:4;7020:43;7060:2;7020:43;:::i;:::-;7092:2;7086:9;7104:31;7132:2;7124:6;7104:31;:::i;:::-;7170:18;;;7258:1;7254:10;;;;7246:19;;7242:28;;;7204:15;;;;-1:-1:-1;7282:19:13;;;7279:39;;;7314:1;7311;7304:12;7279:39;7338:11;;;;7358:148;7374:6;7369:3;7366:15;7358:148;;;7440:23;7459:3;7440:23;:::i;:::-;7428:36;;7391:12;;;;7484;;;;7358:148;;;7525:6;-1:-1:-1;;7569:18:13;;7556:32;;-1:-1:-1;;7600:16:13;;;7597:36;;;7629:1;7626;7619:12;7597:36;;7652:63;7707:7;7696:8;7685:9;7681:24;7652:63;:::i;:::-;7642:73;;;6513:1208;;;;;:::o;7726:435::-;7779:3;7817:5;7811:12;7844:6;7839:3;7832:19;7870:4;7899:2;7894:3;7890:12;7883:19;;7936:2;7929:5;7925:14;7957:1;7967:169;7981:6;7978:1;7975:13;7967:169;;;8042:13;;8030:26;;8076:12;;;;8111:15;;;;8003:1;7996:9;7967:169;;;-1:-1:-1;8152:3:13;;7726:435;-1:-1:-1;;;;;7726:435:13:o;8166:261::-;8345:2;8334:9;8327:21;8308:4;8365:56;8417:2;8406:9;8402:18;8394:6;8365:56;:::i;8432:394::-;8509:6;8517;8570:2;8558:9;8549:7;8545:23;8541:32;8538:52;;;8586:1;8583;8576:12;8538:52;8609:29;8628:9;8609:29;:::i;:::-;8599:39;;8689:2;8678:9;8674:18;8661:32;-1:-1:-1;;;;;8708:6:13;8705:30;8702:50;;;8748:1;8745;8738:12;8702:50;8771:49;8812:7;8803:6;8792:9;8788:22;8771:49;:::i;9039:456::-;9125:6;9133;9141;9194:2;9182:9;9173:7;9169:23;9165:32;9162:52;;;9210:1;9207;9200:12;9162:52;9250:9;9237:23;-1:-1:-1;;;;;9275:6:13;9272:30;9269:50;;;9315:1;9312;9305:12;9269:50;9338:49;9379:7;9370:6;9359:9;9355:22;9338:49;:::i;:::-;9328:59;9434:2;9419:18;;9406:32;;-1:-1:-1;9485:2:13;9470:18;;;9457:32;;9039:456;-1:-1:-1;;;;9039:456:13:o;9500:160::-;9565:20;;9621:13;;9614:21;9604:32;;9594:60;;9650:1;9647;9640:12;9665:180;9721:6;9774:2;9762:9;9753:7;9749:23;9745:32;9742:52;;;9790:1;9787;9780:12;9742:52;9813:26;9829:9;9813:26;:::i;10073:272::-;10131:6;10184:2;10172:9;10163:7;10159:23;10155:32;10152:52;;;10200:1;10197;10190:12;10152:52;10239:9;10226:23;10289:6;10282:5;10278:18;10271:5;10268:29;10258:57;;10311:1;10308;10301:12;10350:260;10418:6;10426;10479:2;10467:9;10458:7;10454:23;10450:32;10447:52;;;10495:1;10492;10485:12;10447:52;10518:29;10537:9;10518:29;:::i;:::-;10508:39;;10566:38;10600:2;10589:9;10585:18;10566:38;:::i;:::-;10556:48;;10350:260;;;;;:::o;10615:254::-;10680:6;10688;10741:2;10729:9;10720:7;10716:23;10712:32;10709:52;;;10757:1;10754;10747:12;10709:52;10780:29;10799:9;10780:29;:::i;:::-;10770:39;;10828:35;10859:2;10848:9;10844:18;10828:35;:::i;10874:595::-;10992:6;11000;11053:2;11041:9;11032:7;11028:23;11024:32;11021:52;;;11069:1;11066;11059:12;11021:52;11109:9;11096:23;-1:-1:-1;;;;;11179:2:13;11171:6;11168:14;11165:34;;;11195:1;11192;11185:12;11165:34;11218:61;11271:7;11262:6;11251:9;11247:22;11218:61;:::i;:::-;11208:71;;11332:2;11321:9;11317:18;11304:32;11288:48;;11361:2;11351:8;11348:16;11345:36;;;11377:1;11374;11367:12;11474:254;11542:6;11550;11603:2;11591:9;11582:7;11578:23;11574:32;11571:52;;;11619:1;11616;11609:12;11571:52;11655:9;11642:23;11632:33;;11684:38;11718:2;11707:9;11703:18;11684:38;:::i;11733:606::-;11837:6;11845;11853;11861;11869;11922:3;11910:9;11901:7;11897:23;11893:33;11890:53;;;11939:1;11936;11929:12;11890:53;11962:29;11981:9;11962:29;:::i;:::-;11952:39;;12010:38;12044:2;12033:9;12029:18;12010:38;:::i;:::-;12000:48;;12095:2;12084:9;12080:18;12067:32;12057:42;;12146:2;12135:9;12131:18;12118:32;12108:42;;12201:3;12190:9;12186:19;12173:33;-1:-1:-1;;;;;12221:6:13;12218:30;12215:50;;;12261:1;12258;12251:12;12215:50;12284:49;12325:7;12316:6;12305:9;12301:22;12284:49;:::i;13528:380::-;13607:1;13603:12;;;;13650;;;13671:61;;13725:4;13717:6;13713:17;13703:27;;13671:61;13778:2;13770:6;13767:14;13747:18;13744:38;13741:161;;;13824:10;13819:3;13815:20;13812:1;13805:31;13859:4;13856:1;13849:15;13887:4;13884:1;13877:15;13741:161;;13528:380;;;:::o;14039:973::-;14124:12;;14089:3;;14179:1;14199:18;;;;14252;;;;14279:61;;14333:4;14325:6;14321:17;14311:27;;14279:61;14359:2;14407;14399:6;14396:14;14376:18;14373:38;14370:161;;;14453:10;14448:3;14444:20;14441:1;14434:31;14488:4;14485:1;14478:15;14516:4;14513:1;14506:15;14370:161;14547:18;14574:104;;;;14692:1;14687:319;;;;14540:466;;14574:104;-1:-1:-1;;14607:24:13;;14595:37;;14652:16;;;;-1:-1:-1;14574:104:13;;14687:319;13986:1;13979:14;;;14023:4;14010:18;;14781:1;14795:165;14809:6;14806:1;14803:13;14795:165;;;14887:14;;14874:11;;;14867:35;14930:16;;;;14824:10;;14795:165;;;14799:3;;14989:6;14984:3;14980:16;14973:23;;14540:466;;;;;;;14039:973;;;;:::o;15017:376::-;15193:3;15221:38;15255:3;15247:6;15221:38;:::i;:::-;15288:6;15282:13;15304:52;15349:6;15345:2;15338:4;15330:6;15326:17;15304:52;:::i;:::-;15372:15;;15017:376;-1:-1:-1;;;;15017:376:13:o;16091:184::-;16161:6;16214:2;16202:9;16193:7;16189:23;16185:32;16182:52;;;16230:1;16227;16220:12;16182:52;-1:-1:-1;16253:16:13;;16091:184;-1:-1:-1;16091:184:13:o;16280:339::-;16482:2;16464:21;;;16521:2;16501:18;;;16494:30;-1:-1:-1;;;16555:2:13;16540:18;;16533:45;16610:2;16595:18;;16280:339::o;16624:127::-;16685:10;16680:3;16676:20;16673:1;16666:31;16716:4;16713:1;16706:15;16740:4;16737:1;16730:15;16756:224;16795:3;16823:6;16856:2;16853:1;16849:10;16886:2;16883:1;16879:10;16917:3;16913:2;16909:12;16904:3;16901:21;16898:47;;;16925:18;;:::i;16985:128::-;17025:3;17056:1;17052:6;17049:1;17046:13;17043:39;;;17062:18;;:::i;:::-;-1:-1:-1;17098:9:13;;16985:128::o;17118:345::-;17320:2;17302:21;;;17359:2;17339:18;;;17332:30;-1:-1:-1;;;17393:2:13;17378:18;;17371:51;17454:2;17439:18;;17118:345::o;17468:135::-;17507:3;-1:-1:-1;;17528:17:13;;17525:43;;;17548:18;;:::i;:::-;-1:-1:-1;17595:1:13;17584:13;;17468:135::o;17608:181::-;17646:3;17690:6;17683:5;17679:18;17716:7;17706:41;;17727:18;;:::i;:::-;-1:-1:-1;;17763:20:13;;17608:181;-1:-1:-1;;17608:181:13:o;19267:342::-;19469:2;19451:21;;;19508:2;19488:18;;;19481:30;-1:-1:-1;;;19542:2:13;19527:18;;19520:48;19600:2;19585:18;;19267:342::o;19614:217::-;19653:4;19682:6;19738:10;;;;19708;;19760:12;;;19757:38;;;19775:18;;:::i;:::-;19812:13;;19614:217;-1:-1:-1;;;19614:217:13:o;19836:168::-;19876:7;19942:1;19938;19934:6;19930:14;19927:1;19924:21;19919:1;19912:9;19905:17;19901:45;19898:71;;;19949:18;;:::i;:::-;-1:-1:-1;19989:9:13;;19836:168::o;20009:342::-;20211:2;20193:21;;;20250:2;20230:18;;;20223:30;-1:-1:-1;;;20284:2:13;20269:18;;20262:48;20342:2;20327:18;;20009:342::o;20356:304::-;-1:-1:-1;;;;;20586:15:13;;;20568:34;;20638:15;;20633:2;20618:18;;20611:43;20518:2;20503:18;;20356:304::o;20665:337::-;20867:2;20849:21;;;20906:2;20886:18;;;20879:30;-1:-1:-1;;;20940:2:13;20925:18;;20918:43;20993:2;20978:18;;20665:337::o;21286:338::-;21488:2;21470:21;;;21527:2;21507:18;;;21500:30;-1:-1:-1;;;21561:2:13;21546:18;;21539:44;21615:2;21600:18;;21286:338::o;21629:345::-;21831:2;21813:21;;;21870:2;21850:18;;;21843:30;-1:-1:-1;;;21904:2:13;21889:18;;21882:51;21965:2;21950:18;;21629:345::o;21979:356::-;22181:2;22163:21;;;22200:18;;;22193:30;22259:34;22254:2;22239:18;;22232:62;22326:2;22311:18;;21979:356::o;22340:197::-;22468:3;22493:38;22527:3;22519:6;22493:38;:::i;22952:127::-;23013:10;23008:3;23004:20;23001:1;22994:31;23044:4;23041:1;23034:15;23068:4;23065:1;23058:15;26463:127;26524:10;26519:3;26515:20;26512:1;26505:31;26555:4;26552:1;26545:15;26579:4;26576:1;26569:15;26595:120;26635:1;26661;26651:35;;26666:18;;:::i;:::-;-1:-1:-1;26700:9:13;;26595:120::o;26720:125::-;26760:4;26788:1;26785;26782:8;26779:34;;;26793:18;;:::i;:::-;-1:-1:-1;26830:9:13;;26720:125::o;26850:112::-;26882:1;26908;26898:35;;26913:18;;:::i;:::-;-1:-1:-1;26947:9:13;;26850:112::o;26967:397::-;27169:2;27151:21;;;27208:2;27188:18;;;27181:30;27247:34;27242:2;27227:18;;27220:62;-1:-1:-1;;;27313:2:13;27298:18;;27291:31;27354:3;27339:19;;26967:397::o;27622:404::-;27824:2;27806:21;;;27863:2;27843:18;;;27836:30;27902:34;27897:2;27882:18;;27875:62;-1:-1:-1;;;27968:2:13;27953:18;;27946:38;28016:3;28001:19;;27622:404::o;28031:401::-;28233:2;28215:21;;;28272:2;28252:18;;;28245:30;28311:34;28306:2;28291:18;;28284:62;-1:-1:-1;;;28377:2:13;28362:18;;28355:35;28422:3;28407:19;;28031:401::o;28437:406::-;28639:2;28621:21;;;28678:2;28658:18;;;28651:30;28717:34;28712:2;28697:18;;28690:62;-1:-1:-1;;;28783:2:13;28768:18;;28761:40;28833:3;28818:19;;28437:406::o;28848:465::-;29105:2;29094:9;29087:21;29068:4;29131:56;29183:2;29172:9;29168:18;29160:6;29131:56;:::i;:::-;29235:9;29227:6;29223:22;29218:2;29207:9;29203:18;29196:50;29263:44;29300:6;29292;29263:44;:::i;30530:561::-;-1:-1:-1;;;;;30827:15:13;;;30809:34;;30879:15;;30874:2;30859:18;;30852:43;30926:2;30911:18;;30904:34;;;30969:2;30954:18;;30947:34;;;30789:3;31012;30997:19;;30990:32;;;30752:4;;31039:46;;31065:19;;31057:6;31039:46;:::i;:::-;31031:54;30530:561;-1:-1:-1;;;;;;;30530:561:13:o;31096:249::-;31165:6;31218:2;31206:9;31197:7;31193:23;31189:32;31186:52;;;31234:1;31231;31224:12;31186:52;31266:9;31260:16;31285:30;31309:5;31285:30;:::i;31350:179::-;31385:3;31427:1;31409:16;31406:23;31403:120;;;31473:1;31470;31467;31452:23;-1:-1:-1;31510:1:13;31504:8;31499:3;31495:18;31403:120;31350:179;:::o;31534:671::-;31573:3;31615:4;31597:16;31594:26;31591:39;;;31534:671;:::o;31591:39::-;31657:2;31651:9;-1:-1:-1;;31722:16:13;31718:25;;31715:1;31651:9;31694:50;31773:4;31767:11;31797:16;-1:-1:-1;;;;;31903:2:13;31896:4;31888:6;31884:17;31881:25;31876:2;31868:6;31865:14;31862:45;31859:58;;;31910:5;;;;;31534:671;:::o;31859:58::-;31947:6;31941:4;31937:17;31926:28;;31983:3;31977:10;32010:2;32002:6;31999:14;31996:27;;;32016:5;;;;;;31534:671;:::o;31996:27::-;32100:2;32081:16;32075:4;32071:27;32067:36;32060:4;32051:6;32046:3;32042:16;32038:27;32035:69;32032:82;;;32107:5;;;;;;31534:671;:::o;32032:82::-;32123:57;32174:4;32165:6;32157;32153:19;32149:30;32143:4;32123:57;:::i;:::-;-1:-1:-1;32196:3:13;;31534:671;-1:-1:-1;;;;;31534:671:13:o;32631:404::-;32833:2;32815:21;;;32872:2;32852:18;;;32845:30;32911:34;32906:2;32891:18;;32884:62;-1:-1:-1;;;32977:2:13;32962:18;;32955:38;33025:3;33010:19;;32631:404::o;33040:827::-;-1:-1:-1;;;;;33437:15:13;;;33419:34;;33489:15;;33484:2;33469:18;;33462:43;33399:3;33536:2;33521:18;;33514:31;;;33362:4;;33568:57;;33605:19;;33597:6;33568:57;:::i;:::-;33673:9;33665:6;33661:22;33656:2;33645:9;33641:18;33634:50;33707:44;33744:6;33736;33707:44;:::i;:::-;33693:58;;33800:9;33792:6;33788:22;33782:3;33771:9;33767:19;33760:51;33828:33;33854:6;33846;33828:33;:::i;:::-;33820:41;33040:827;-1:-1:-1;;;;;;;;33040:827:13:o

Swarm Source

ipfs://7ea6b02ac0d883e80652bc36ea42d32094a408744a8c1de66b5a0281b2707fef
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.