Contract 0x50f5474724e0Ee42D9a4e711ccFB275809Fd6d4a 7

 
Token migration announcement. Sandbox's LANDs token contract has migrated to 0x5CC5B05a8A13E3fBDB0BB9FcCd98D38e50F90c38.
 
Txn Hash
Method
Block
From
To
Value
0x114f494fc328ce723696bdeb378ddbc5bd38037ec2747ea420d0db644538838dSet Approval For...153588662022-08-17 13:00:372 days 4 hrs ago0x0a2779cddeb46789b8550d0c6a7fd6aabc293bb1 IN  The Sandbox: Old LAND Token0 Ether0.00024745 9.38570805
0x260e25fb3d6fc59b498f01c53c8f4e5992ab98d21a39508bad5055ae0202064cSet Approval For...153487402022-08-15 22:53:273 days 18 hrs agoENS Name noc-nocturnal.eth IN  The Sandbox: Old LAND Token0 Ether0.00071604 27.14657372
0xdf2a4312032370dd8c6bb7f21ed5e3bc1e7a3487674e324128fdc405496df034Set Approval For...153407312022-08-14 16:04:445 days 1 hr ago0x8f9d2c2f33b3f94b2ad3084465b61d10a82237b8 IN  The Sandbox: Old LAND Token0 Ether0.00051638 18.19721998
0xcd7eef05ce846c634580b2bc39e1636e8f6ebfe6d3291271e394f4ee88295f9dSet Approval For...153407282022-08-14 16:04:315 days 1 hr ago0x8f9d2c2f33b3f94b2ad3084465b61d10a82237b8 IN  The Sandbox: Old LAND Token0 Ether0.00041365 15.68245446
0xdd884e97da9836fe68186857e1f9446f3933ee2235459e229c49627f8617e4fcSet Approval For...153337262022-08-13 13:35:556 days 3 hrs agoENS Name stooch.eth IN  The Sandbox: Old LAND Token0 Ether0.00018201 6.90368745
0x45aa7913716aaf453b40eea94eab9dc3d1c2dd4309fbd78d066918a8f8c50b78Set Approval For...153244852022-08-12 2:42:357 days 14 hrs ago0xb836507acf98e5a6000da843527e8a570a5c3aca IN  The Sandbox: Old LAND Token0 Ether0.00045012 17.06496418
0x41d75543cc43e674e855466e32031e52eb7c0d9fb489d2fff975e2f6096878f3Set Approval For...153226052022-08-11 19:45:347 days 21 hrs agoENS Name omimyth.eth IN  The Sandbox: Old LAND Token0 Ether0.00033402 12.66922887
0x7f7ab16550a791a389816110d02969e2a4b4be3d1c3b9dd124a4bce7e1659103Set Approval For...153142422022-08-10 12:06:349 days 5 hrs agoENS Name hitmandie.eth IN  The Sandbox: Old LAND Token0 Ether0.00031279 11.85845976
0x8d567573541764288644adf54569f484159b5437bb2d6884925579eab2d6b93fSet Approval For...153126312022-08-10 5:56:209 days 11 hrs ago0x9ee3871c347533d6870a6e7203890d12283760e5 IN  The Sandbox: Old LAND Token0 Ether0.00023687 8.98051543
0x0cdd164395e962d6f4f1492f8d3acea55c283778b3fda26914d30d3ee85b2e33Set Approval For...153123332022-08-10 4:43:289 days 12 hrs ago0xd3b5aacf391534fa7e988472306ec66f82642656 IN  The Sandbox: Old LAND Token0 Ether0.00021957 8.32435581
0x7d56906ede1f3c646fc1def33ef68ec736617d1b0e6bbb12f23d362e14afa8d4Set Approval For...153109072022-08-09 23:26:579 days 17 hrs ago0x4057f6d0c49358b88a318dcb230f7d3140fa78de IN  The Sandbox: Old LAND Token0 Ether0.00044089 16.71524874
0x78d0fa891c4f643dff9a79812aef46da68cde98d09c8d955f884a9a41f414e6eSet Approval For...153081192022-08-09 12:57:5310 days 4 hrs ago0xe59d87e5298ac2fb24c2fc55d256cb8fcb696238 IN  The Sandbox: Old LAND Token0 Ether0.00028994 10.99221716
0xdfa1a7282143afa683ed2b5bbb9ee534016abac1181ba0ce74a691965f8324e9Set Approval For...153057642022-08-09 4:00:5910 days 13 hrs ago0x6ab3892df5891df69a9f4c6cb956b2d2639915ed IN  The Sandbox: Old LAND Token0 Ether0.00024151 9.15619287
0x8e44c073443bd0a8083dac25016fda38ae196d4fff0a3ca67832abd785ce7b6fSet Approval For...152893372022-08-06 14:43:2513 days 2 hrs agoENS Name killerraider.eth IN  The Sandbox: Old LAND Token0 Ether0.00018083 6.85566353
0x30829f5de7afe365793df50bf74e45346b8220c3679b7363c972bb242bcdf99eSet Approval For...152821022022-08-05 11:42:0914 days 5 hrs agoENS Name clayton.eth IN  The Sandbox: Old LAND Token0 Ether0.00039775 15.0794772
0x51c6f1c81a08a6cf34eb723f56276253914291854366d312b6300022d9a2e55cSet Approval For...152786592022-08-04 23:02:1514 days 18 hrs ago0xd40fcb5d277d4f8b8919530b80d8b28ad49810f1 IN  The Sandbox: Old LAND Token0 Ether0.00030548 11.58160206
0x2b0d36f4387acd9586f5396c30b3277f11e215a7238480c1edf5f8808eeacb42Set Approval For...152231282022-07-27 7:27:1923 days 9 hrs ago0x646629f7363b26dac072238a77ee5e462e2b0097 IN  The Sandbox: Old LAND Token0 Ether0.00010661 4.04185857
0x3d3d1c3ee4b8a7d5577a12170eb70ce147a4085a738d673010fdb56db1424408Set Approval For...152099522022-07-25 6:03:3625 days 11 hrs ago0x963c64a0bf0cc791f4bc31a30dbf53ebab7b6ec0 IN  The Sandbox: Old LAND Token0 Ether0.00021176 8.02830111
0x186504353e47d8cdcca0077b30c09dd40b3138d427602a797d26ad863b6a8b3dSet Approval For...152048602022-07-24 10:46:5426 days 6 hrs agoENS Name *😺😸😻😽😼🙀😿😾.eth IN  The Sandbox: Old LAND Token0 Ether0.00020213 7.66336128
0x10152933e082d6d60c61821b113491e63dd78fd9570d95af2216e63f9f73eb6aSet Approval For...151951542022-07-22 22:30:4427 days 18 hrs ago0x412df104f695755067e0451c53b2ddf07716a955 IN  The Sandbox: Old LAND Token0 Ether0.0003779 14.32714482
0x1014862d8841c63b19e777fbf0d095bd8ccb1cae179614cbc3cc9ed2bff6276fSet Approval For...151903502022-07-22 4:48:4828 days 12 hrs agoENS Name decentbit.eth IN  The Sandbox: Old LAND Token0 Ether0.0002782 10.54708532
0x6e18e93b9a0932ae61d570ec339f908cfe4c3fa9d5da645cad0a58decb9768a3Set Approval For...151845862022-07-21 7:29:3429 days 9 hrs agoENS Name ruroni.eth IN  The Sandbox: Old LAND Token0 Ether0.00047548 18.02651783
0x53159bf5331085098ccf41aa5024aeff8dccf17951bd4fe9e6dc1bbd5d270dadSet Approval For...151766052022-07-20 1:36:5930 days 15 hrs ago0x40211a9c8a1fefdafe58fd60bbdb067050d769cc IN  The Sandbox: Old LAND Token0 Ether0.00031146 11.80818023
0xa8e3afc1f9e14930e8410c201ad35b34a6f2bffaeed824ba3239627e09c25a8fSet Approval For...151752782022-07-19 20:33:5830 days 20 hrs ago0xfa7530c68b9fdf2f8404641abd5aaae0ef526851 IN  The Sandbox: Old LAND Token0 Ether0.00062312 23.62383458
0x35a027f291788328a538d11bf8b85f21235a4acc2b55e7695bb7a69ebbc94994Set Approval For...151678182022-07-18 16:47:3132 days 30 mins ago0x969fa39f580aa68e72959fa279c8576da34e56d9 IN  The Sandbox: Old LAND Token0 Ether0.00080004 30.33133389
[ Download CSV Export 

OVERVIEW

Token migration announcement. Sandbox's LANDs token contract has migrated to 0x5CC5B05a8A13E3fBDB0BB9FcCd98D38e50F90c38.

View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Land

Compiler Version
v0.5.9+commit.e560f70d

Optimization Enabled:
Yes with 2000 runs

Other Settings:
petersburg EvmVersion, None license
File 1 of 10 : Admin.sol
pragma solidity ^0.5.2;

contract Admin {

    address internal _admin;

    event AdminChanged(address oldAdmin, address newAdmin);

    /// @notice gives the current administrator of this contract.
    /// @return the current administrator of this contract.
    function getAdmin() external view returns (address) {
        return _admin;
    }

    /// @notice change the administrator to be `newAdmin`.
    /// @param newAdmin address of the new administrator.
    function changeAdmin(address newAdmin) external {
        require(msg.sender == _admin, "only admin can change admin");
        emit AdminChanged(_admin, newAdmin);
        _admin = newAdmin;
    }

    modifier onlyAdmin() {
        require (msg.sender == _admin, "only admin allowed");
        _;
    }

}

File 2 of 10 : MetaTransactionReceiver.sol
pragma solidity ^0.5.2;

import "./Admin.sol";

contract MetaTransactionReceiver is Admin{

    mapping(address => bool) internal _metaTransactionContracts;
    event MetaTransactionProcessor(address metaTransactionProcessor, bool enabled);

    /// @notice Enable or disable the ability of `metaTransactionProcessor` to perform meta-tx (metaTransactionProcessor rights).
    /// @param metaTransactionProcessor address that will be given/removed metaTransactionProcessor rights.
    /// @param enabled set whether the metaTransactionProcessor is enabled or disabled.
    function setMetaTransactionProcessor(address metaTransactionProcessor, bool enabled) public {
        require(
            msg.sender == _admin,
            "only admin can setup metaTransactionProcessors"
        );
        _setMetaTransactionProcessor(metaTransactionProcessor, enabled);
    }

    function _setMetaTransactionProcessor(address metaTransactionProcessor, bool enabled) internal {
        _metaTransactionContracts[metaTransactionProcessor] = enabled;
        emit MetaTransactionProcessor(metaTransactionProcessor, enabled);
    }

    /// @notice check whether address `who` is given meta-transaction execution rights.
    /// @param who The address to query.
    /// @return whether the address has meta-transaction execution rights.
    function isMetaTransactionProcessor(address who) external view returns(bool) {
        return _metaTransactionContracts[who];
    }
}

File 3 of 10 : SuperOperators.sol
pragma solidity ^0.5.2;

import "./Admin.sol";

contract SuperOperators is Admin {

    mapping(address => bool) internal _superOperators;

    event SuperOperator(address superOperator, bool enabled);

    /// @notice Enable or disable the ability of `superOperator` to transfer tokens of all (superOperator rights).
    /// @param superOperator address that will be given/removed superOperator right.
    /// @param enabled set whether the superOperator is enabled or disabled.
    function setSuperOperator(address superOperator, bool enabled) external {
        require(
            msg.sender == _admin,
            "only admin is allowed to add super operators"
        );
        _superOperators[superOperator] = enabled;
        emit SuperOperator(superOperator, enabled);
    }

    /// @notice check whether address `who` is given superOperator rights.
    /// @param who The address to query.
    /// @return whether the address has superOperator rights.
    function isSuperOperator(address who) public view returns (bool) {
        return _superOperators[who];
    }
}

File 4 of 10 : ERC721Events.sol
pragma solidity ^0.5.2;

/**
 * @title ERC721 Non-Fungible Token Standard basic interface
 * @dev see https://eips.ethereum.org/EIPS/eip-721
 */
interface ERC721Events {
    event Transfer(
        address indexed _from,
        address indexed _to,
        uint256 indexed _tokenId
    );
    event Approval(
        address indexed _owner,
        address indexed _approved,
        uint256 indexed _tokenId
    );
    event ApprovalForAll(
        address indexed _owner,
        address indexed _operator,
        bool _approved
    );
}

File 5 of 10 : ERC721MandatoryTokenReceiver.sol
pragma solidity ^0.5.2;

/**
    Note: The ERC-165 identifier for this interface is 0x5e8bf644.
*/
interface ERC721MandatoryTokenReceiver {
    function onERC721BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        bytes calldata data
    ) external returns (bytes4); // needs to return 0x4b808c46

    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4); // needs to return 0x150b7a02

    // needs to implements EIP-165
    // function supportsInterface(bytes4 interfaceId)
    //     external
    //     view
    //     returns (bool);
}

File 6 of 10 : ERC721TokenReceiver.sol
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This code has not been reviewed.
 * Do not use or deploy this code before reviewing it personally first.
 */
// solhint-disable-next-line compiler-fixed
pragma solidity ^0.5.2;

interface ERC721TokenReceiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 7 of 10 : AddressUtils.sol
pragma solidity ^0.5.2;

library AddressUtils {

    function toPayable(address _address) internal pure returns (address payable _payable) {
        return address(uint160(_address));
    }

    function isContract(address addr) internal view returns (bool) {
        // for accounts without code, i.e. `keccak256('')`:
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;

        bytes32 codehash;
        // solium-disable-next-line security/no-inline-assembly
        assembly {
            codehash := extcodehash(addr)
        }
        return (codehash != 0x0 && codehash != accountHash);
    }
}

File 8 of 10 : Land.sol
/* solhint-disable no-empty-blocks */

pragma solidity 0.5.9;

import "./Land/erc721/LandBaseToken.sol";

contract Land is LandBaseToken {
    constructor(
        address metaTransactionContract,
        address admin
    ) public LandBaseToken(
        metaTransactionContract,
        admin
    ) {
    }

    /**
     * @notice Return the name of the token contract
     * @return The name of the token contract
     */
    function name() external pure returns (string memory) {
        return "Sandbox's LANDs";
    }

    /**
     * @notice Return the symbol of the token contract
     * @return The symbol of the token contract
     */
    function symbol() external pure returns (string memory) {
        return "LAND";
    }

    // solium-disable-next-line security/no-assign-params
    function uint2str(uint _i) internal pure returns (string memory) {
        if (_i == 0) {
            return "0";
        }
        uint j = _i;
        uint len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint k = len - 1;
        while (_i != 0) {
            bstr[k--] = byte(uint8(48 + _i % 10));
            _i /= 10;
        }
        return string(bstr);
    }

    /**
     * @notice Return the URI of a specific token
     * @param id The id of the token
     * @return The URI of the token
     */
    function tokenURI(uint256 id) public view returns (string memory) {
        require(_ownerOf(id) != address(0), "Id does not exist");
        return
            string(
                abi.encodePacked(
                    "https://api.sandbox.game/lands/",
                    uint2str(id),
                    "/metadata.json"
                )
            );
    }

    /**
     * @notice Check if the contract supports an interface
     * 0x01ffc9a7 is ERC-165
     * 0x80ac58cd is ERC-721
     * 0x5b5e139f is ERC-721 metadata
     * @param id The id of the interface
     * @return True if the interface is supported
     */
    function supportsInterface(bytes4 id) external pure returns (bool) {
        return id == 0x01ffc9a7 || id == 0x80ac58cd || id == 0x5b5e139f;
    }
}

File 9 of 10 : ERC721BaseToken.sol
/* solhint-disable func-order, code-complexity */
pragma solidity 0.5.9;

import "../../../contracts_common/src/Libraries/AddressUtils.sol";
import "../../../contracts_common/src/Interfaces/ERC721TokenReceiver.sol";
import "../../../contracts_common/src/Interfaces/ERC721Events.sol";
import "../../../contracts_common/src/BaseWithStorage/SuperOperators.sol";
import "../../../contracts_common/src/BaseWithStorage/MetaTransactionReceiver.sol";
import "../../../contracts_common/src/Interfaces/ERC721MandatoryTokenReceiver.sol";

contract ERC721BaseToken is ERC721Events, SuperOperators, MetaTransactionReceiver {
    using AddressUtils for address;

    bytes4 internal constant _ERC721_RECEIVED = 0x150b7a02;
    bytes4 internal constant _ERC721_BATCH_RECEIVED = 0x4b808c46;

    bytes4 internal constant ERC165ID = 0x01ffc9a7;
    bytes4 internal constant ERC721_MANDATORY_RECEIVER = 0x5e8bf644;

    mapping (address => uint256) public _numNFTPerAddress;
    mapping (uint256 => uint256) public _owners;
    mapping (address => mapping(address => bool)) public _operatorsForAll;
    mapping (uint256 => address) public _operators;

    constructor(
        address metaTransactionContract,
        address admin
    ) internal {
        _admin = admin;
        _setMetaTransactionProcessor(metaTransactionContract, true);
    }

    function _transferFrom(address from, address to, uint256 id) internal {
        _numNFTPerAddress[from]--;
        _numNFTPerAddress[to]++;
        _owners[id] = uint256(to);
        emit Transfer(from, to, id);
    }

    /**
     * @notice Return the number of Land owned by an address
     * @param owner The address to look for
     * @return The number of Land token owned by the address
     */
    function balanceOf(address owner) external view returns (uint256) {
        require(owner != address(0), "owner is zero address");
        return _numNFTPerAddress[owner];
    }


    function _ownerOf(uint256 id) internal view returns (address) {
        return address(_owners[id]);
    }

    function _ownerAndOperatorEnabledOf(uint256 id) internal view returns (address owner, bool operatorEnabled) {
        uint256 data = _owners[id];
        owner = address(data);
        operatorEnabled = (data / 2**255) == 1;
    }

    /**
     * @notice Return the owner of a Land
     * @param id The id of the Land
     * @return The address of the owner
     */
    function ownerOf(uint256 id) external view returns (address owner) {
        owner = _ownerOf(id);
        require(owner != address(0), "token does not exist");
    }

    function _approveFor(address owner, address operator, uint256 id) internal {
        if(operator == address(0)) {
            _owners[id] = uint256(owner); // no need to resset the operator, it will be overriden next time
        } else {
            _owners[id] = uint256(owner) + 2**255;
            _operators[id] = operator;
        }
        emit Approval(owner, operator, id);
    }

    /**
     * @notice Approve an operator to spend tokens on the sender behalf
     * @param sender The address giving the approval
     * @param operator The address receiving the approval
     * @param id The id of the token
     */
    function approveFor(
        address sender,
        address operator,
        uint256 id
    ) external {
        address owner = _ownerOf(id);
        require(sender != address(0), "sender is zero address");
        require(
            msg.sender == sender ||
            _metaTransactionContracts[msg.sender] ||
            _superOperators[msg.sender] ||
            _operatorsForAll[sender][msg.sender],
            "not authorized to approve"
        );
        require(owner == sender, "owner != sender");
        _approveFor(owner, operator, id);
    }

    /**
     * @notice Approve an operator to spend tokens on the sender behalf
     * @param operator The address receiving the approval
     * @param id The id of the token
     */
    function approve(address operator, uint256 id) external {
        address owner = _ownerOf(id);
        require(owner != address(0), "token does not exist");
        require(
            owner == msg.sender ||
            _superOperators[msg.sender] ||
            _operatorsForAll[owner][msg.sender],
            "not authorized to approve"
        );
        _approveFor(owner, operator, id);
    }

    /**
     * @notice Get the approved operator for a specific token
     * @param id The id of the token
     * @return The address of the operator
     */
    function getApproved(uint256 id) external view returns (address) {
        (address owner, bool operatorEnabled) = _ownerAndOperatorEnabledOf(id);
        require(owner != address(0), "token does not exist");
        if (operatorEnabled) {
            return _operators[id];
        } else {
            return address(0);
        }
    }

    function _checkTransfer(address from, address to, uint256 id) internal view returns (bool isMetaTx) {
        (address owner, bool operatorEnabled) = _ownerAndOperatorEnabledOf(id);
        require(owner != address(0), "token does not exist");
        require(owner == from, "not owner in _checkTransfer");
        require(to != address(0), "can't send to zero address");
        isMetaTx = msg.sender != from && _metaTransactionContracts[msg.sender];
        if (msg.sender != from && !isMetaTx) {
            require(
                _superOperators[msg.sender] ||
                _operatorsForAll[from][msg.sender] ||
                (operatorEnabled && _operators[id] == msg.sender),
                "not approved to transfer"
            );
        }
    }

    function _checkInterfaceWith10000Gas(address _contract, bytes4 interfaceId)
        internal
        view
        returns (bool)
    {
        bool success;
        bool result;
        bytes memory call_data = abi.encodeWithSelector(
            ERC165ID,
            interfaceId
        );
        // solium-disable-next-line security/no-inline-assembly
        assembly {
            let call_ptr := add(0x20, call_data)
            let call_size := mload(call_data)
            let output := mload(0x40) // Find empty storage location using "free memory pointer"
            mstore(output, 0x0)
            success := staticcall(
                10000,
                _contract,
                call_ptr,
                call_size,
                output,
                0x20
            ) // 32 bytes
            result := mload(output)
        }
        // (10000 / 63) "not enough for supportsInterface(...)" // consume all gas, so caller can potentially know that there was not enough gas
        assert(gasleft() > 158);
        return success && result;
    }

    /**
     * @notice Transfer a token between 2 addresses
     * @param from The sender of the token
     * @param to The recipient of the token
     * @param id The id of the token
    */
    function transferFrom(address from, address to, uint256 id) external {
        bool metaTx = _checkTransfer(from, to, id);
        _transferFrom(from, to, id);
        if (to.isContract() && _checkInterfaceWith10000Gas(to, ERC721_MANDATORY_RECEIVER)) {
            require(
                _checkOnERC721Received(metaTx ? from : msg.sender, from, to, id, ""),
                "erc721 transfer rejected by to"
            );
        }
    }

    /**
     * @notice Transfer a token between 2 addresses letting the receiver knows of the transfer
     * @param from The sender of the token
     * @param to The recipient of the token
     * @param id The id of the token
     * @param data Additional data
     */
    function safeTransferFrom(address from, address to, uint256 id, bytes memory data) public {
        bool metaTx = _checkTransfer(from, to, id);
        _transferFrom(from, to, id);
        if (to.isContract()) {
            require(
                _checkOnERC721Received(metaTx ? from : msg.sender, from, to, id, data),
                "ERC721: transfer rejected by to"
            );
        }
    }

    /**
     * @notice Transfer a token between 2 addresses letting the receiver knows of the transfer
     * @param from The send of the token
     * @param to The recipient of the token
     * @param id The id of the token
     */
    function safeTransferFrom(address from, address to, uint256 id) external {
        safeTransferFrom(from, to, id, "");
    }

    /**
     * @notice Transfer many tokens between 2 addresses
     * @param from The sender of the token
     * @param to The recipient of the token
     * @param ids The ids of the tokens
     * @param data additional data
    */
    function batchTransferFrom(address from, address to, uint256[] calldata ids, bytes calldata data) external {
        _batchTransferFrom(from, to, ids, data, false);
    }

    function _batchTransferFrom(address from, address to, uint256[] memory ids, bytes memory data, bool safe) internal {
        bool metaTx = msg.sender != from && _metaTransactionContracts[msg.sender];
        bool authorized = msg.sender == from ||
            metaTx ||
            _superOperators[msg.sender] ||
            _operatorsForAll[from][msg.sender];

        require(from != address(0), "from is zero address");
        require(to != address(0), "can't send to zero address");

        uint256 numTokens = ids.length;
        for(uint256 i = 0; i < numTokens; i ++) {
            uint256 id = ids[i];
            (address owner, bool operatorEnabled) = _ownerAndOperatorEnabledOf(id);
            require(owner == from, "not owner in batchTransferFrom");
            require(authorized || (operatorEnabled && _operators[id] == msg.sender), "not authorized");
            _owners[id] = uint256(to);
            emit Transfer(from, to, id);
        }
        if (from != to) {
            _numNFTPerAddress[from] -= numTokens;
            _numNFTPerAddress[to] += numTokens;
        }

        if (to.isContract() && (safe || _checkInterfaceWith10000Gas(to, ERC721_MANDATORY_RECEIVER))) {
            require(
                _checkOnERC721BatchReceived(metaTx ? from : msg.sender, from, to, ids, data),
                "erc721 batch transfer rejected by to"
            );
        }
    }

    /**
     * @notice Transfer many tokens between 2 addresses ensuring the receiving contract has a receiver method
     * @param from The sender of the token
     * @param to The recipient of the token
     * @param ids The ids of the tokens
     * @param data additional data
    */
    function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, bytes calldata data) external {
        _batchTransferFrom(from, to, ids, data, true);
    }

    /**
     * @notice Check if the contract supports an interface
     * 0x01ffc9a7 is ERC-165
     * 0x80ac58cd is ERC-721
     * @param id The id of the interface
     * @return True if the interface is supported
     */
    function supportsInterface(bytes4 id) external pure returns (bool) {
        return id == 0x01ffc9a7 || id == 0x80ac58cd;
    }

    /**
     * @notice Set the approval for an operator to manage all the tokens of the sender
     * @param sender The address giving the approval
     * @param operator The address receiving the approval
     * @param approved The determination of the approval
     */
    function setApprovalForAllFor(
        address sender,
        address operator,
        bool approved
    ) external {
        require(sender != address(0), "Invalid sender address");
        require(
            msg.sender == sender ||
            _metaTransactionContracts[msg.sender] ||
            _superOperators[msg.sender],
            "not authorized to approve for all"
        );

        _setApprovalForAll(sender, operator, approved);
    }

    /**
     * @notice Set the approval for an operator to manage all the tokens of the sender
     * @param operator The address receiving the approval
     * @param approved The determination of the approval
     */
    function setApprovalForAll(address operator, bool approved) external {
        _setApprovalForAll(msg.sender, operator, approved);
    }


    function _setApprovalForAll(
        address sender,
        address operator,
        bool approved
    ) internal {
        require(
            !_superOperators[operator],
            "super operator can't have their approvalForAll changed"
        );
        _operatorsForAll[sender][operator] = approved;

        emit ApprovalForAll(sender, operator, approved);
    }

    /**
     * @notice Check if the sender approved the operator
     * @param owner The address of the owner
     * @param operator The address of the operator
     * @return The status of the approval
     */
    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool isOperator)
    {
        return _operatorsForAll[owner][operator] || _superOperators[operator];
    }

    function _burn(address from, address owner, uint256 id) public {
        require(from == owner, "not owner");
        _owners[id] = 2**160; // cannot mint it again
        _numNFTPerAddress[from]--;
        emit Transfer(from, address(0), id);
    }

    /// @notice Burns token `id`.
    /// @param id token which will be burnt.
    function burn(uint256 id) external {
        _burn(msg.sender, _ownerOf(id), id);
    }

    /// @notice Burn token`id` from `from`.
    /// @param from address whose token is to be burnt.
    /// @param id token which will be burnt.
    function burnFrom(address from, uint256 id) external {
        require(from != address(0), "Invalid sender address");
        (address owner, bool operatorEnabled) = _ownerAndOperatorEnabledOf(id);
        require(
            msg.sender == from ||
            _metaTransactionContracts[msg.sender] ||
            (operatorEnabled && _operators[id] == msg.sender) ||
            _superOperators[msg.sender] ||
            _operatorsForAll[from][msg.sender],
            "not authorized to burn"
        );
        _burn(from, owner, id);
    }

    function _checkOnERC721Received(address operator, address from, address to, uint256 tokenId, bytes memory _data)
        internal returns (bool)
    {
        bytes4 retval = ERC721TokenReceiver(to).onERC721Received(operator, from, tokenId, _data);
        return (retval == _ERC721_RECEIVED);
    }

    function _checkOnERC721BatchReceived(address operator, address from, address to, uint256[] memory ids, bytes memory _data)
        internal returns (bool)
    {
        bytes4 retval = ERC721MandatoryTokenReceiver(to).onERC721BatchReceived(operator, from, ids, _data);
        return (retval == _ERC721_BATCH_RECEIVED);
    }
}

File 10 of 10 : LandBaseToken.sol
/* solhint-disable func-order, code-complexity */
pragma solidity 0.5.9;

import "./ERC721BaseToken.sol";

contract LandBaseToken is ERC721BaseToken {
    // Our grid is 408 x 408 lands
    uint256 internal constant GRID_SIZE = 408;

    uint256 internal constant LAYER =          0xFF00000000000000000000000000000000000000000000000000000000000000;
    uint256 internal constant LAYER_1x1 =      0x0000000000000000000000000000000000000000000000000000000000000000;
    uint256 internal constant LAYER_3x3 =      0x0100000000000000000000000000000000000000000000000000000000000000;
    uint256 internal constant LAYER_6x6 =      0x0200000000000000000000000000000000000000000000000000000000000000;
    uint256 internal constant LAYER_12x12 =    0x0300000000000000000000000000000000000000000000000000000000000000;
    uint256 internal constant LAYER_24x24 =    0x0400000000000000000000000000000000000000000000000000000000000000;

    mapping(address => bool) internal _minters;
    event Minter(address superOperator, bool enabled);

    /// @notice Enable or disable the ability of `minter` to mint tokens
    /// @param minter address that will be given/removed minter right.
    /// @param enabled set whether the minter is enabled or disabled.
    function setMinter(address minter, bool enabled) external {
        require(
            msg.sender == _admin,
            "only admin is allowed to add minters"
        );
        _minters[minter] = enabled;
        emit Minter(minter, enabled);
    }

    /// @notice check whether address `who` is given minter rights.
    /// @param who The address to query.
    /// @return whether the address has minter rights.
    function isMinter(address who) public view returns (bool) {
        return _minters[who];
    }

    constructor(
        address metaTransactionContract,
        address admin
    ) public ERC721BaseToken(metaTransactionContract, admin) {
    }

    /// @notice total width of the map
    /// @return width
    function width() external returns(uint256) {
        return GRID_SIZE;
    }

    /// @notice total height of the map
    /// @return height
    function height() external returns(uint256) {
        return GRID_SIZE;
    }

    /// @notice x coordinate of Land token
    /// @param id tokenId
    /// @return the x coordinates
    function x(uint256 id) external returns(uint256) {
        require(_ownerOf(id) != address(0), "token does not exist");
        return id % GRID_SIZE;
    }

    /// @notice y coordinate of Land token
    /// @param id tokenId
    /// @return the y coordinates
    function y(uint256 id) external returns(uint256) {
        require(_ownerOf(id) != address(0), "token does not exist");
        return id / GRID_SIZE;
    }

    /**
     * @notice Mint a new quad (aligned to a quad tree with size 3, 6, 12 or 24 only)
     * @param to The recipient of the new quad
     * @param size The size of the new quad
     * @param x The top left x coordinate of the new quad
     * @param y The top left y coordinate of the new quad
     * @param data extra data to pass to the transfer
     */
    function mintQuad(address to, uint256 size, uint256 x, uint256 y, bytes calldata data) external {
        require(to != address(0), "to is zero address");
        require(
            isMinter(msg.sender),
            "Only a minter can mint"
        );
        require(x % size == 0 && y % size == 0, "Invalid coordinates");
        require(x <= GRID_SIZE - size && y <= GRID_SIZE - size, "Out of bounds");

        uint256 quadId;
        uint256 id = x + y * GRID_SIZE;

        if (size == 1) {
            quadId = id;
        } else if (size == 3) {
            quadId = LAYER_3x3 + id;
        } else if (size == 6) {
            quadId = LAYER_6x6 + id;
        } else if (size == 12) {
            quadId = LAYER_12x12 + id;
        } else if (size == 24) {
            quadId = LAYER_24x24 + id;
        } else {
            require(false, "Invalid size");
        }

        require(_owners[LAYER_24x24 + (x/24) * 24 + ((y/24) * 24) * GRID_SIZE] == 0, "Already minted as 24x24");

        uint256 toX = x+size;
        uint256 toY = y+size;
        if (size <= 12) {
            require(
                _owners[LAYER_12x12 + (x/12) * 12 + ((y/12) * 12) * GRID_SIZE] == 0,
                "Already minted as 12x12"
            );
        } else {
            for (uint256 x12i = x; x12i < toX; x12i += 12) {
                for (uint256 y12i = y; y12i < toY; y12i += 12) {
                    uint256 id12x12 = LAYER_12x12 + x12i + y12i * GRID_SIZE;
                    require(_owners[id12x12] == 0, "Already minted as 12x12");
                }
            }
        }

        if (size <= 6) {
            require(_owners[LAYER_6x6 + (x/6) * 6 + ((y/6) * 6) * GRID_SIZE] == 0, "Already minted as 6x6");
        } else {
            for (uint256 x6i = x; x6i < toX; x6i += 6) {
                for (uint256 y6i = y; y6i < toY; y6i += 6) {
                    uint256 id6x6 = LAYER_6x6 + x6i + y6i * GRID_SIZE;
                    require(_owners[id6x6] == 0, "Already minted as 6x6");
                }
            }
        }

        if (size <= 3) {
            require(_owners[LAYER_3x3 + (x/3) * 3 + ((y/3) * 3) * GRID_SIZE] == 0, "Already minted as 3x3");
        } else {
            for (uint256 x3i = x; x3i < toX; x3i += 3) {
                for (uint256 y3i = y; y3i < toY; y3i += 3) {
                    uint256 id3x3 = LAYER_3x3 + x3i + y3i * GRID_SIZE;
                    require(_owners[id3x3] == 0, "Already minted as 3x3");
                }
            }
        }

        for (uint256 i = 0; i < size*size; i++) {
            uint256 id = _idInPath(i, size, x, y);
            require(_owners[id] == 0, "Already minted");
            emit Transfer(address(0), to, id);
        }

        _owners[quadId] = uint256(to);
        _numNFTPerAddress[to] += size * size;

        _checkBatchReceiverAcceptQuad(msg.sender, address(0), to, size, x, y, data);
    }

    function _idInPath(uint256 i, uint256 size, uint256 x, uint256 y) internal pure returns(uint256) {
        uint256 row = i / size;
        if(row % 2 == 0) { // alow ids to follow a path in a quad
            return (x + (i%size)) + ((y + row) * GRID_SIZE);
        } else {
            return ((x + size) - (1 + i%size)) + ((y + row) * GRID_SIZE);
        }
    }

    /// @notice transfer one quad (aligned to a quad tree with size 3, 6, 12 or 24 only)
    /// @param from current owner of the quad
    /// @param to destination
    /// @param size size of the quad
    /// @param x The top left x coordinate of the quad
    /// @param y The top left y coordinate of the quad
    /// @param data additional data
    function transferQuad(address from, address to, uint256 size, uint256 x, uint256 y, bytes calldata data) external {
        require(from != address(0), "from is zero address");
        require(to != address(0), "can't send to zero address");
        bool metaTx = msg.sender != from && _metaTransactionContracts[msg.sender];
        if (msg.sender != from && !metaTx) {
            require(
                _superOperators[msg.sender] ||
                _operatorsForAll[from][msg.sender],
                "not authorized to transferQuad"
            );
        }
        _transferQuad(from, to, size, x, y);
        _numNFTPerAddress[from] -= size * size;
        _numNFTPerAddress[to] += size * size;

        _checkBatchReceiverAcceptQuad(metaTx ? from : msg.sender, from, to, size, x, y, data);
    }

    function _checkBatchReceiverAcceptQuad(
        address operator,
        address from,
        address to,
        uint256 size,
        uint256 x,
        uint256 y,
        bytes memory data
    ) internal {
        if (to.isContract() && _checkInterfaceWith10000Gas(to, ERC721_MANDATORY_RECEIVER)) {
            uint256[] memory ids = new uint256[](size*size);
            for (uint256 i = 0; i < size*size; i++) {
                ids[i] = _idInPath(i, size, x, y);
            }
            require(
                _checkOnERC721BatchReceived(operator, from, to, ids, data),
                "erc721 batch transfer rejected by to"
            );
        }
    }

    /// @notice transfer multiple quad (aligned to a quad tree with size 3, 6, 12 or 24 only)
    /// @param from current owner of the quad
    /// @param to destination
    /// @param sizes list of sizes for each quad
    /// @param xs list of top left x coordinates for each quad
    /// @param ys list of top left y coordinates for each quad
    /// @param data additional data
    function batchTransferQuad(
        address from,
        address to,
        uint256[] calldata sizes,
        uint256[] calldata xs,
        uint256[] calldata ys,
        bytes calldata data
    ) external {
        require(from != address(0), "from is zero address");
        require(to != address(0), "can't send to zero address");
        require(sizes.length == xs.length && xs.length == ys.length, "invalid data");
        bool metaTx = msg.sender != from && _metaTransactionContracts[msg.sender];
        if (msg.sender != from && !metaTx) {
            require(
                _superOperators[msg.sender] ||
                _operatorsForAll[from][msg.sender],
                "not authorized to transferMultiQuads"
            );
        }
        uint256 numTokensTransfered = 0;
        for (uint256 i = 0; i < sizes.length; i++) {
            uint256 size = sizes[i];
            _transferQuad(from, to, size, xs[i], ys[i]);
            numTokensTransfered += size * size;
        }
        _numNFTPerAddress[from] -= numTokensTransfered;
        _numNFTPerAddress[to] += numTokensTransfered;

        if (to.isContract() && _checkInterfaceWith10000Gas(to, ERC721_MANDATORY_RECEIVER)) {
            uint256[] memory ids = new uint256[](numTokensTransfered);
            uint256 counter = 0;
            for (uint256 j = 0; j < sizes.length; j++) {
                uint256 size = sizes[j];
                for (uint256 i = 0; i < size*size; i++) {
                    ids[counter] = _idInPath(i, size, xs[j], ys[j]);
                    counter++;
                }
            }
            require(
                _checkOnERC721BatchReceived(metaTx ? from : msg.sender, from, to, ids, data),
                "erc721 batch transfer rejected by to"
            );
        }
    }

    function _transferQuad(address from, address to, uint256 size, uint256 x, uint256 y) internal {
        if (size == 1) {
            uint256 id1x1 = x + y * GRID_SIZE;
            address owner = _ownerOf(id1x1);
            require(owner != address(0), "token does not exist");
            require(owner == from, "not owner in _transferQuad");
            _owners[id1x1] = uint256(to);
        } else {
            _regroup(from, to, size, x, y);
        }
        for (uint256 i = 0; i < size*size; i++) {
            emit Transfer(from, to, _idInPath(i, size, x, y));
        }
    }

    function _checkAndClear(address from, uint256 id) internal returns(bool) {
        uint256 owner = _owners[id];
        if (owner != 0) {
            require(address(owner) == from, "not owner");
            _owners[id] = 0;
            return true;
        }
        return false;
    }

    function _regroup(address from, address to, uint256 size, uint256 x, uint256 y) internal {
        require(x % size == 0 && y % size == 0, "Invalid coordinates");
        require(x <= GRID_SIZE - size && y <= GRID_SIZE - size, "Out of bounds");

        if (size == 3) {
            _regroup3x3(from, to, x, y, true);
        } else if (size == 6) {
            _regroup6x6(from, to, x, y, true);
        } else if (size == 12) {
            _regroup12x12(from, to, x, y, true);
        } else if (size == 24) {
            _regroup24x24(from, to, x, y, true);
        } else {
            require(false, "Invalid size");
        }
    }

    function _regroup3x3(address from, address to, uint256 x, uint256 y, bool set) internal returns (bool) {
        uint256 id = x + y * GRID_SIZE;
        uint256 quadId = LAYER_3x3 + id;
        bool ownerOfAll = true;
        for (uint256 xi = x; xi < x+3; xi++) {
            for (uint256 yi = y; yi < y+3; yi++) {
                ownerOfAll = _checkAndClear(from, xi + yi * GRID_SIZE) && ownerOfAll;
            }
        }
        if(set) {
            if(!ownerOfAll) {
                require(
                    _owners[quadId] == uint256(from) ||
                    _owners[LAYER_6x6 + (x/6) * 6 + ((y/6) * 6) * GRID_SIZE] == uint256(from) ||
                    _owners[LAYER_12x12 + (x/12) * 12 + ((y/12) * 12) * GRID_SIZE] == uint256(from) ||
                    _owners[LAYER_24x24 + (x/24) * 24 + ((y/24) * 24) * GRID_SIZE] == uint256(from),
                    "not owner of all sub quads nor parent quads"
                );
            }
            _owners[quadId] = uint256(to);
            return true;
        }
        return ownerOfAll;
    }
    function _regroup6x6(address from, address to, uint256 x, uint256 y, bool set) internal returns (bool) {
        uint256 id = x + y * GRID_SIZE;
        uint256 quadId = LAYER_6x6 + id;
        bool ownerOfAll = true;
        for (uint256 xi = x; xi < x+6; xi += 3) {
            for (uint256 yi = y; yi < y+6; yi += 3) {
                bool ownAllIndividual = _regroup3x3(from, to, xi, yi, false);
                uint256 id3x3 = LAYER_3x3 + xi + yi * GRID_SIZE;
                uint256 owner3x3 = _owners[id3x3];
                if (owner3x3 != 0) {
                    if(!ownAllIndividual) {
                        require(owner3x3 == uint256(from), "not owner of 3x3 quad");
                    }
                    _owners[id3x3] = 0;
                }
                ownerOfAll = (ownAllIndividual || owner3x3 != 0) && ownerOfAll;
            }
        }
        if(set) {
            if(!ownerOfAll) {
                require(
                    _owners[quadId] == uint256(from) ||
                    _owners[LAYER_12x12 + (x/12) * 12 + ((y/12) * 12) * GRID_SIZE] == uint256(from) ||
                    _owners[LAYER_24x24 + (x/24) * 24 + ((y/24) * 24) * GRID_SIZE] == uint256(from),
                    "not owner of all sub quads nor parent quads"
                );
            }
            _owners[quadId] = uint256(to);
            return true;
        }
        return ownerOfAll;
    }
    function _regroup12x12(address from, address to, uint256 x, uint256 y, bool set) internal returns (bool) {
        uint256 id = x + y * GRID_SIZE;
        uint256 quadId = LAYER_12x12 + id;
        bool ownerOfAll = true;
        for (uint256 xi = x; xi < x+12; xi += 6) {
            for (uint256 yi = y; yi < y+12; yi += 6) {
                bool ownAllIndividual = _regroup6x6(from, to, xi, yi, false);
                uint256 id6x6 = LAYER_6x6 + xi + yi * GRID_SIZE;
                uint256 owner6x6 = _owners[id6x6];
                if (owner6x6 != 0) {
                    if(!ownAllIndividual) {
                        require(owner6x6 == uint256(from), "not owner of 6x6 quad");
                    }
                    _owners[id6x6] = 0;
                }
                ownerOfAll = (ownAllIndividual || owner6x6 != 0) && ownerOfAll;
            }
        }
        if(set) {
            if(!ownerOfAll) {
                require(
                    _owners[quadId] == uint256(from) ||
                    _owners[LAYER_24x24 + (x/24) * 24 + ((y/24) * 24) * GRID_SIZE] == uint256(from),
                    "not owner of all sub quads nor parent quads"
                );
            }
            _owners[quadId] = uint256(to);
            return true;
        }
        return ownerOfAll;
    }
    function _regroup24x24(address from, address to, uint256 x, uint256 y, bool set) internal returns (bool) {
        uint256 id = x + y * GRID_SIZE;
        uint256 quadId = LAYER_24x24 + id;
        bool ownerOfAll = true;
        for (uint256 xi = x; xi < x+24; xi += 12) {
            for (uint256 yi = y; yi < y+24; yi += 12) {
                bool ownAllIndividual = _regroup12x12(from, to, xi, yi, false);
                uint256 id12x12 = LAYER_12x12 + xi + yi * GRID_SIZE;
                uint256 owner12x12 = _owners[id12x12];
                if (owner12x12 != 0) {
                    if(!ownAllIndividual) {
                        require(owner12x12 == uint256(from), "not owner of 12x12 quad");
                    }
                    _owners[id12x12] = 0;
                }
                ownerOfAll = (ownAllIndividual || owner12x12 != 0) && ownerOfAll;
            }
        }
        if(set) {
            if(!ownerOfAll) {
                require(
                    _owners[quadId] == uint256(from),
                    "not owner of all sub quads not parent quad"
                );
            }
            _owners[quadId] = uint256(to);
            return true;
        }
        return ownerOfAll || _owners[quadId] == uint256(from);
    }

    function _ownerOf(uint256 id) internal view returns (address) {
        require(id & LAYER == 0, "Invalid token id");
        uint256 x = id % GRID_SIZE;
        uint256 y = id / GRID_SIZE;
        uint256 owner1x1 = _owners[id];

        if (owner1x1 != 0) {
            return address(owner1x1); // cast to zero
        } else {
            address owner3x3 = address(_owners[LAYER_3x3 + (x/3) * 3 + ((y/3) * 3) * GRID_SIZE]);
            if (owner3x3 != address(0)) {
                return owner3x3;
            } else {
                address owner6x6 = address(_owners[LAYER_6x6 + (x/6) * 6 + ((y/6) * 6) * GRID_SIZE]);
                if (owner6x6 != address(0)) {
                    return owner6x6;
                } else {
                    address owner12x12 = address(_owners[LAYER_12x12 + (x/12) * 12 + ((y/12) * 12) * GRID_SIZE]);
                    if (owner12x12 != address(0)) {
                        return owner12x12;
                    } else {
                        return address(_owners[LAYER_24x24 + (x/24) * 24 + ((y/24) * 24) * GRID_SIZE]);
                    }
                }
            }
        }
    }

    function _ownerAndOperatorEnabledOf(uint256 id) internal view returns (address owner, bool operatorEnabled) {
        require(id & LAYER == 0, "Invalid token id");
        uint256 x = id % GRID_SIZE;
        uint256 y = id / GRID_SIZE;
        uint256 owner1x1 = _owners[id];

        if (owner1x1 != 0) {
            owner = address(owner1x1);
            operatorEnabled = (owner1x1 / 2**255) == 1;
        } else {
            address owner3x3 = address(_owners[LAYER_3x3 + (x/3) * 3 + ((y/3) * 3) * GRID_SIZE]);
            if (owner3x3 != address(0)) {
                owner = owner3x3;
                operatorEnabled = false;
            } else {
                address owner6x6 = address(_owners[LAYER_6x6 + (x/6) * 6 + ((y/6) * 6) * GRID_SIZE]);
                if (owner6x6 != address(0)) {
                    owner = owner6x6;
                    operatorEnabled = false;
                } else {
                    address owner12x12 = address(_owners[LAYER_12x12 + (x/12) * 12 + ((y/12) * 12) * GRID_SIZE]);
                    if (owner12x12 != address(0)) {
                        owner = owner12x12;
                        operatorEnabled = false;
                    } else {
                        owner = address(_owners[LAYER_24x24 + (x/24) * 24 + ((y/24) * 24) * GRID_SIZE]);
                        operatorEnabled = false;
                    }
                }
            }
        }
    }

}

Settings
{
  "evmVersion": "petersburg",
  "libraries": {},
  "metadata": {
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 2000
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"id","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"},{"name":"id","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"height","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"ids","type":"uint256[]"},{"name":"data","type":"bytes"}],"name":"batchTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"ids","type":"uint256[]"},{"name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"operator","type":"address"},{"name":"id","type":"uint256"}],"name":"approveFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"size","type":"uint256"},{"name":"x","type":"uint256"},{"name":"y","type":"uint256"},{"name":"data","type":"bytes"}],"name":"transferQuad","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"uint256"}],"name":"x","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"uint256"}],"name":"y","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"who","type":"address"}],"name":"isSuperOperator","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"size","type":"uint256"},{"name":"x","type":"uint256"},{"name":"y","type":"uint256"},{"name":"data","type":"bytes"}],"name":"mintQuad","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAdmin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"owner","type":"address"},{"name":"id","type":"uint256"}],"name":"_burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"id","type":"uint256"}],"name":"burnFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"_numNFTPerAddress","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"metaTransactionProcessor","type":"address"},{"name":"enabled","type":"bool"}],"name":"setMetaTransactionProcessor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"_owners","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"_operatorsForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"width","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"operator","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"who","type":"address"}],"name":"isMinter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"superOperator","type":"address"},{"name":"enabled","type":"bool"}],"name":"setSuperOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"id","type":"uint256"},{"name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"_operators","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"minter","type":"address"},{"name":"enabled","type":"bool"}],"name":"setMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"who","type":"address"}],"name":"isMetaTransactionProcessor","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"isOperator","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"sizes","type":"uint256[]"},{"name":"xs","type":"uint256[]"},{"name":"ys","type":"uint256[]"},{"name":"data","type":"bytes"}],"name":"batchTransferQuad","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"operator","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAllFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"metaTransactionContract","type":"address"},{"name":"admin","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"superOperator","type":"address"},{"indexed":false,"name":"enabled","type":"bool"}],"name":"Minter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"metaTransactionProcessor","type":"address"},{"indexed":false,"name":"enabled","type":"bool"}],"name":"MetaTransactionProcessor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"superOperator","type":"address"},{"indexed":false,"name":"enabled","type":"bool"}],"name":"SuperOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldAdmin","type":"address"},{"indexed":false,"name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":true,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_approved","type":"address"},{"indexed":true,"name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_operator","type":"address"},{"indexed":false,"name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]

60806040523480156200001157600080fd5b506040516200496938038062004969833981810160405260408110156200003757600080fd5b508051602090910151600080546001600160a01b0319166001600160a01b038316179055818181816200006c82600162000078565b505050505050620000dc565b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915582519384529083015280517fb21eb88b4e33b3f1281830a7178d74d8aa73220416215726b68ae23d539515cb9281900390910190a15050565b61487d80620000ec6000396000f3fe608060405234801561001057600080fd5b50600436106102ad5760003560e01c806370a082311161017b578063aa271e1a116100d8578063cf456ae71161008c578063e985e9c511610071578063e985e9c514610b3d578063eaa5e06714610b6b578063eeb5a5d114610cea576102ad565b8063cf456ae714610ae9578063dc5074af14610b17576102ad565b8063b88d4fde116100bd578063b88d4fde146109e9578063b9b710e914610aaf578063c87b56dd14610acc576102ad565b8063aa271e1a14610995578063ac9fe421146109bb576102ad565b806395d89b411161012f5780639d786bbc116101145780639d786bbc146109395780639ededf77146103d1578063a22cb46514610967576102ad565b806395d89b4114610914578063992924a61461091c576102ad565b80638782676411610160578063878267641461089a5780638a04af6a146108c05780638f283970146108ee576102ad565b806370a082311461084857806379cc67901461086e576102ad565b806338bb305a116102295780636352211e116101dd5780636e1e3bbf116101c25780636e1e3bbf146107795780636e9960c31461080a5780636ee678ae14610812576102ad565b80636352211e14610736578063654b748a14610753576102ad565b806342842e0e1161020e57806342842e0e146106c657806342966c68146106fc5780636259e7e114610719576102ad565b806338bb305a1461060d5780633f4263ef146106a9576102ad565b80630ef267431161028057806323b872dd1161026557806323b872dd146104c657806328cfbd46146104fc5780632b991746146105d7576102ad565b80630ef26743146103d157806315ddc535146103eb576102ad565b806301ffc9a7146102b257806306fdde03146102ed578063081812fc1461036a578063095ea7b3146103a3575b600080fd5b6102d9600480360360208110156102c857600080fd5b50356001600160e01b031916610d22565b604080519115158252519081900360200190f35b6102f5610dc1565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561032f578181015183820152602001610317565b50505050905090810190601f16801561035c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103876004803603602081101561038057600080fd5b5035610df8565b604080516001600160a01b039092168252519081900360200190f35b6103cf600480360360408110156103b957600080fd5b506001600160a01b038135169060200135610e8e565b005b6103d9610fa2565b60408051918252519081900360200190f35b6103cf6004803603608081101561040157600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561043557600080fd5b82018360208201111561044757600080fd5b8035906020019184602083028401116401000000008311171561046957600080fd5b91939092909160208101903564010000000081111561048757600080fd5b82018360208201111561049957600080fd5b803590602001918460018302840111640100000000831117156104bb57600080fd5b509092509050610fa8565b6103cf600480360360608110156104dc57600080fd5b506001600160a01b03813581169160208101359091169060400135611022565b6103cf6004803603608081101561051257600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561054657600080fd5b82018360208201111561055857600080fd5b8035906020019184602083028401116401000000008311171561057a57600080fd5b91939092909160208101903564010000000081111561059857600080fd5b8201836020820111156105aa57600080fd5b803590602001918460018302840111640100000000831117156105cc57600080fd5b5090925090506110ea565b6103cf600480360360608110156105ed57600080fd5b506001600160a01b0381358116916020810135909116906040013561115f565b6103cf600480360360c081101561062357600080fd5b6001600160a01b0382358116926020810135909116916040820135916060810135916080820135919081019060c0810160a082013564010000000081111561066a57600080fd5b82018360208201111561067c57600080fd5b8035906020019184600183028401116401000000008311171561069e57600080fd5b5090925090506112f7565b6103d9600480360360208110156106bf57600080fd5b5035611523565b6103cf600480360360608110156106dc57600080fd5b506001600160a01b0381358116916020810135909116906040013561158b565b6103cf6004803603602081101561071257600080fd5b50356115a6565b6103d96004803603602081101561072f57600080fd5b50356115bc565b6103876004803603602081101561074c57600080fd5b5035611624565b6102d96004803603602081101561076957600080fd5b50356001600160a01b0316611683565b6103cf600480360360a081101561078f57600080fd5b6001600160a01b038235169160208101359160408201359160608101359181019060a0810160808201356401000000008111156107cb57600080fd5b8201836020820111156107dd57600080fd5b803590602001918460018302840111640100000000831117156107ff57600080fd5b5090925090506116a1565b610387611e3f565b6103cf6004803603606081101561082857600080fd5b506001600160a01b03813581169160208101359091169060400135611e4e565b6103d96004803603602081101561085e57600080fd5b50356001600160a01b0316611f29565b6103cf6004803603604081101561088457600080fd5b506001600160a01b038135169060200135611fa2565b6103d9600480360360208110156108b057600080fd5b50356001600160a01b0316612101565b6103cf600480360360408110156108d657600080fd5b506001600160a01b0381351690602001351515612113565b6103cf6004803603602081101561090457600080fd5b50356001600160a01b031661216a565b6102f561224b565b6103d96004803603602081101561093257600080fd5b5035612282565b6102d96004803603604081101561094f57600080fd5b506001600160a01b0381358116916020013516612294565b6103cf6004803603604081101561097d57600080fd5b506001600160a01b03813516906020013515156122b4565b6102d9600480360360208110156109ab57600080fd5b50356001600160a01b03166122bf565b6103cf600480360360408110156109d157600080fd5b506001600160a01b03813516906020013515156122dd565b6103cf600480360360808110156109ff57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135640100000000811115610a3a57600080fd5b820183602082011115610a4c57600080fd5b80359060200191846001830284011164010000000083111715610a6e57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061238a945050505050565b61038760048036036020811015610ac557600080fd5b503561242c565b6102f560048036036020811015610ae257600080fd5b5035612447565b6103cf60048036036040811015610aff57600080fd5b506001600160a01b03813516906020013515156125b0565b6102d960048036036020811015610b2d57600080fd5b50356001600160a01b031661265d565b6102d960048036036040811015610b5357600080fd5b506001600160a01b038135811691602001351661267b565b6103cf600480360360c0811015610b8157600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135640100000000811115610bb557600080fd5b820183602082011115610bc757600080fd5b80359060200191846020830284011164010000000083111715610be957600080fd5b919390929091602081019035640100000000811115610c0757600080fd5b820183602082011115610c1957600080fd5b80359060200191846020830284011164010000000083111715610c3b57600080fd5b919390929091602081019035640100000000811115610c5957600080fd5b820183602082011115610c6b57600080fd5b80359060200191846020830284011164010000000083111715610c8d57600080fd5b919390929091602081019035640100000000811115610cab57600080fd5b820183602082011115610cbd57600080fd5b80359060200191846001830284011164010000000083111715610cdf57600080fd5b5090925090506126d2565b6103cf60048036036060811015610d0057600080fd5b506001600160a01b038135811691602081013590911690604001351515612ac0565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b031983161480610d8557507f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b80610db957507f5b5e139f000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b90505b919050565b60408051808201909152600f81527f53616e64626f782773204c414e44730000000000000000000000000000000000602082015290565b6000806000610e0684612ba1565b90925090506001600160a01b038216610e5d576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b8015610e83575050506000818152600660205260409020546001600160a01b0316610dbc565b600092505050610dbc565b6000610e9982612dc5565b90506001600160a01b038116610eed576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b6001600160a01b038116331480610f1357503360009081526001602052604090205460ff165b80610f4157506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610f92576040805162461bcd60e51b815260206004820152601960248201527f6e6f7420617574686f72697a656420746f20617070726f766500000000000000604482015290519081900360640190fd5b610f9d818484612fba565b505050565b61019890565b61101a868686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8a018190048102820181019092528881529250889150879081908401838280828437600092018290525092506130a4915050565b505050505050565b600061102f84848461343b565b905061103c84848461366b565b61104e836001600160a01b03166136db565b80156110665750611066836317a2fd9160e21b613717565b156110e45761109381611079573361107b565b845b858585604051806020016040528060008152506137ca565b6110e4576040805162461bcd60e51b815260206004820152601e60248201527f657263373231207472616e736665722072656a656374656420627920746f0000604482015290519081900360640190fd5b50505050565b61101a868686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8a018190048102820181019092528881529250889150879081908401838280828437600092019190915250600192506130a4915050565b600061116a82612dc5565b90506001600160a01b0384166111c7576040805162461bcd60e51b815260206004820152601660248201527f73656e646572206973207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b336001600160a01b03851614806111ed57503360009081526002602052604090205460ff165b8061120757503360009081526001602052604090205460ff165b8061123557506001600160a01b038416600090815260056020908152604080832033845290915290205460ff165b611286576040805162461bcd60e51b815260206004820152601960248201527f6e6f7420617574686f72697a656420746f20617070726f766500000000000000604482015290519081900360640190fd5b836001600160a01b0316816001600160a01b0316146112ec576040805162461bcd60e51b815260206004820152600f60248201527f6f776e657220213d2073656e6465720000000000000000000000000000000000604482015290519081900360640190fd5b6110e4818484612fba565b6001600160a01b038716611352576040805162461bcd60e51b815260206004820152601460248201527f66726f6d206973207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0386166113ad576040805162461bcd60e51b815260206004820152601a60248201527f63616e27742073656e6420746f207a65726f2061646472657373000000000000604482015290519081900360640190fd5b6000336001600160a01b038916148015906113d757503360009081526002602052604090205460ff165b9050336001600160a01b038916148015906113f0575080155b15611487573360009081526001602052604090205460ff168061143657506001600160a01b038816600090815260056020908152604080832033845290915290205460ff165b611487576040805162461bcd60e51b815260206004820152601e60248201527f6e6f7420617574686f72697a656420746f207472616e73666572517561640000604482015290519081900360640190fd5b6114948888888888613916565b6001600160a01b0380891660009081526003602052604080822080548a800290819003909155928a168252902080549091019055611519816114d657336114d8565b885b898989898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613a7992505050565b5050505050505050565b60008061152f83612dc5565b6001600160a01b03161415611582576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b50610198900690565b610f9d8383836040518060200160405280600081525061238a565b6115b9336115b383612dc5565b83611e4e565b50565b6000806115c883612dc5565b6001600160a01b0316141561161b576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b50610198900490565b600061162f82612dc5565b90506001600160a01b038116610dbc576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b6001600160a01b031660009081526001602052604090205460ff1690565b6001600160a01b0386166116fc576040805162461bcd60e51b815260206004820152601260248201527f746f206973207a65726f20616464726573730000000000000000000000000000604482015290519081900360640190fd5b611705336122bf565b611756576040805162461bcd60e51b815260206004820152601660248201527f4f6e6c792061206d696e7465722063616e206d696e7400000000000000000000604482015290519081900360640190fd5b84848161175f57fe5b06158015611774575084838161177157fe5b06155b6117c5576040805162461bcd60e51b815260206004820152601360248201527f496e76616c696420636f6f7264696e6174657300000000000000000000000000604482015290519081900360640190fd5b846101980384111580156117dd575084610198038311155b61182e576040805162461bcd60e51b815260206004820152600d60248201527f4f7574206f6620626f756e647300000000000000000000000000000000000000604482015290519081900360640190fd5b6000610198840285016001871415611848578091506118f1565b866003141561185f5780600160f81b0191506118f1565b86600614156118765780600160f91b0191506118f1565b86600c141561188d5780600360f81b0191506118f1565b86601814156118a45780600160fa1b0191506118f1565b6040805162461bcd60e51b815260206004820152600c60248201527f496e76616c69642073697a650000000000000000000000000000000000000000604482015290519081900360640190fd5b6004600061019860188804601802026018898161190a57fe5b04601802600160fa1b0101815260200190815260200160002054600014611978576040805162461bcd60e51b815260206004820152601760248201527f416c7265616479206d696e746564206173203234783234000000000000000000604482015290519081900360640190fd5b858701858801600c8911611a125760046000610198600c8a04600c0202600c8b8161199f57fe5b04600c02600360f81b0101815260200190815260200160002054600014611a0d576040805162461bcd60e51b815260206004820152601760248201527f416c7265616479206d696e746564206173203132783132000000000000000000604482015290519081900360640190fd5b611aa8565b875b82811015611aa657875b82811015611a9d5761019881028201600360f81b0160008181526004602052604090205415611a94576040805162461bcd60e51b815260206004820152601760248201527f416c7265616479206d696e746564206173203132783132000000000000000000604482015290519081900360640190fd5b50600c01611a1e565b50600c01611a14565b505b60068911611b3c576004600061019860068a046006020260068b81611ac957fe5b04600602600160f91b0101815260200190815260200160002054600014611b37576040805162461bcd60e51b815260206004820152601560248201527f416c7265616479206d696e746564206173203678360000000000000000000000604482015290519081900360640190fd5b611bd2565b875b82811015611bd057875b82811015611bc75761019881028201600160f91b0160008181526004602052604090205415611bbe576040805162461bcd60e51b815260206004820152601560248201527f416c7265616479206d696e746564206173203678360000000000000000000000604482015290519081900360640190fd5b50600601611b48565b50600601611b3e565b505b60038911611c66576004600061019860038a046003020260038b81611bf357fe5b04600302600160f81b0101815260200190815260200160002054600014611c61576040805162461bcd60e51b815260206004820152601560248201527f416c7265616479206d696e746564206173203378330000000000000000000000604482015290519081900360640190fd5b611cfc565b875b82811015611cfa57875b82811015611cf15761019881028201600160f81b0160008181526004602052604090205415611ce8576040805162461bcd60e51b815260206004820152601560248201527f416c7265616479206d696e746564206173203378330000000000000000000000604482015290519081900360640190fd5b50600301611c72565b50600301611c68565b505b60005b898a02811015611dbc576000611d17828c8c8c613b28565b60008181526004602052604090205490915015611d7b576040805162461bcd60e51b815260206004820152600e60248201527f416c7265616479206d696e746564000000000000000000000000000000000000604482015290519081900360640190fd5b60405181906001600160a01b038e16906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a450600101611cff565b5060008481526004602090815260408083206001600160a01b038e169081905583526003825280832080548d80020190558051601f8901839004830281018301909152878152611e3392339290918e918e918e918e91908e908e9081908401838280828437600092019190915250613a7992505050565b50505050505050505050565b6000546001600160a01b031690565b816001600160a01b0316836001600160a01b031614611eb4576040805162461bcd60e51b815260206004820152600960248201527f6e6f74206f776e65720000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60008181526004602090815260408083207401000000000000000000000000000000000000000090556001600160a01b0386168084526003909252808320805460001901905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505050565b60006001600160a01b038216611f86576040805162461bcd60e51b815260206004820152601560248201527f6f776e6572206973207a65726f20616464726573730000000000000000000000604482015290519081900360640190fd5b506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216611ffd576040805162461bcd60e51b815260206004820152601660248201527f496e76616c69642073656e646572206164647265737300000000000000000000604482015290519081900360640190fd5b60008061200983612ba1565b9092509050336001600160a01b038516148061203457503360009081526002602052604090205460ff165b8061205d575080801561205d57506000838152600660205260409020546001600160a01b031633145b8061207757503360009081526001602052604090205460ff165b806120a557506001600160a01b038416600090815260056020908152604080832033845290915290205460ff165b6120f6576040805162461bcd60e51b815260206004820152601660248201527f6e6f7420617574686f72697a656420746f206275726e00000000000000000000604482015290519081900360640190fd5b6110e4848385611e4e565b60036020526000908152604090205481565b6000546001600160a01b0316331461215c5760405162461bcd60e51b815260040180806020018281038252602e8152602001806147a5602e913960400191505060405180910390fd5b6121668282613b7f565b5050565b6000546001600160a01b031633146121c9576040805162461bcd60e51b815260206004820152601b60248201527f6f6e6c792061646d696e2063616e206368616e67652061646d696e0000000000604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f9281900390910190a1600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60408051808201909152600481527f4c414e4400000000000000000000000000000000000000000000000000000000602082015290565b60046020526000908152604090205481565b600560209081526000928352604080842090915290825290205460ff1681565b612166338383613be3565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031633146123265760405162461bcd60e51b815260040180806020018281038252602c815260200180614755602c913960400191505060405180910390fd5b6001600160a01b038216600081815260016020908152604091829020805460ff191685151590811790915582519384529083015280517f44f92d27abdf4cfb6a7d712c3af68f3be086d4ca747ab802c36f67d6790060d89281900390910190a15050565b600061239785858561343b565b90506123a485858561366b565b6123b6846001600160a01b03166136db565b15612425576123d4816123c957336123cb565b855b868686866137ca565b612425576040805162461bcd60e51b815260206004820152601f60248201527f4552433732313a207472616e736665722072656a656374656420627920746f00604482015290519081900360640190fd5b5050505050565b6006602052600090815260409020546001600160a01b031681565b6060600061245483612dc5565b6001600160a01b031614156124b0576040805162461bcd60e51b815260206004820152601160248201527f496420646f6573206e6f74206578697374000000000000000000000000000000604482015290519081900360640190fd5b6124b982613ca9565b60405160200180807f68747470733a2f2f6170692e73616e64626f782e67616d652f6c616e64732f00815250601f0182805190602001908083835b6020831061253157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016124f4565b5181516020939093036101000a60001901801990911692169190911790527f2f6d657461646174612e6a736f6e000000000000000000000000000000000000920191825250604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee018152600e9092019052949350505050565b6000546001600160a01b031633146125f95760405162461bcd60e51b81526004018080602001828103825260248152602001806146fb6024913960400191505060405180910390fd5b6001600160a01b038216600081815260076020908152604091829020805460ff191685151590811790915582519384529083015280517fff452b3b9159b024a9098f0058c63eccd90d36b3584608202800d662f962bb609281900390910190a15050565b6001600160a01b031660009081526002602052604090205460ff1690565b6001600160a01b03808316600090815260056020908152604080832093851683529290529081205460ff16806126c957506001600160a01b03821660009081526001602052604090205460ff165b90505b92915050565b6001600160a01b038a1661272d576040805162461bcd60e51b815260206004820152601460248201527f66726f6d206973207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038916612788576040805162461bcd60e51b815260206004820152601a60248201527f63616e27742073656e6420746f207a65726f2061646472657373000000000000604482015290519081900360640190fd5b868514801561279657508483145b6127e7576040805162461bcd60e51b815260206004820152600c60248201527f696e76616c696420646174610000000000000000000000000000000000000000604482015290519081900360640190fd5b6000336001600160a01b038c161480159061281157503360009081526002602052604090205460ff165b9050336001600160a01b038c161480159061282a575080155b156128ab573360009081526001602052604090205460ff168061287057506001600160a01b038b16600090815260056020908152604080832033845290915290205460ff165b6128ab5760405162461bcd60e51b81526004018080602001828103825260248152602001806147816024913960400191505060405180910390fd5b6000805b8981101561290e5760008b8b838181106128c557fe5b9050602002013590506128ff8e8e838d8d878181106128e057fe5b905060200201358c8c888181106128f357fe5b90506020020135613916565b800291909101906001016128af565b506001600160a01b03808d1660009081526003602052604080822080548590039055918d16808252919020805483019055612948906136db565b801561296057506129608b6317a2fd9160e21b613717565b15612ab257606081604051908082528060200260200182016040528015612991578160200160208202803883390190505b5090506000805b8b811015612a245760008d8d838181106129ae57fe5b90506020020135905060008090505b818202811015612a1a576129f781838f8f878181106129d857fe5b905060200201358e8e888181106129eb57fe5b90506020020135613b28565b858581518110612a0357fe5b6020908102919091010152600193840193016129bd565b5050600101612998565b50612a7484612a335733612a35565b8e5b8f8f858a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613d9e92505050565b612aaf5760405162461bcd60e51b81526004018080602001828103825260248152602001806146d76024913960400191505060405180910390fd5b50505b505050505050505050505050565b6001600160a01b038316612b1b576040805162461bcd60e51b815260206004820152601660248201527f496e76616c69642073656e646572206164647265737300000000000000000000604482015290519081900360640190fd5b336001600160a01b0384161480612b4157503360009081526002602052604090205460ff165b80612b5b57503360009081526001602052604090205460ff165b612b965760405162461bcd60e51b81526004018080602001828103825260218152602001806147fd6021913960400191505060405180910390fd5b610f9d838383613be3565b6000807fff00000000000000000000000000000000000000000000000000000000000000831615612c19576040805162461bcd60e51b815260206004820152601060248201527f496e76616c696420746f6b656e20696400000000000000000000000000000000604482015290519081900360640190fd5b60008381526004602052604090205461019880850691908504908015612c69579350837f800000000000000000000000000000000000000000000000000000000000000081046001149350612dbd565b6000600481610198600386046003020260038781612c8357fe5b04600302600160f81b0101815260200190815260200160002054905060006001600160a01b0316816001600160a01b031614612cc55780955060009450612dbb565b6000600481610198600687046006020260068881612cdf57fe5b04600602600160f91b0101815260200190815260200160002054905060006001600160a01b0316816001600160a01b031614612d215780965060009550612db9565b6000600481610198600c8804600c0202600c8981612d3b57fe5b04600c02600360f81b0101815260200190815260200160002054905060006001600160a01b0316816001600160a01b031614612d7d5780975060009650612db7565b60046000610198601888046018020260188981612d9657fe5b04601802600160fa1b01018152602001908152602001600020549750600096505b505b505b505b505050915091565b60007fff00000000000000000000000000000000000000000000000000000000000000821615612e3c576040805162461bcd60e51b815260206004820152601060248201527f496e76616c696420746f6b656e20696400000000000000000000000000000000604482015290519081900360640190fd5b60008281526004602052604090205461019880840691908404908015612e66579250610dbc915050565b6000600481610198600386046003020260038781612e8057fe5b04600302600160f81b0101815260200190815260200160002054905060006001600160a01b0316816001600160a01b031614612ec1579350610dbc92505050565b6000600481610198600687046006020260068881612edb57fe5b04600602600160f91b0101815260200190815260200160002054905060006001600160a01b0316816001600160a01b031614612f1d579450610dbc9350505050565b6000600481610198600c8804600c0202600c8981612f3757fe5b04600c02600360f81b0101815260200190815260200160002054905060006001600160a01b0316816001600160a01b031614612f7a579550610dbc945050505050565b60046000610198601888046018020260188981612f9357fe5b04601802600160fa1b01018152602001908152602001600020549650505050505050610dbc565b6001600160a01b038216612fe75760008181526004602052604090206001600160a01b038416905561305e565b60008181526004602090815260408083206001600160a01b038781167f800000000000000000000000000000000000000000000000000000000000000001909155600690925290912080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b80826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000336001600160a01b038716148015906130ce57503360009081526002602052604090205460ff165b90506000336001600160a01b03881614806130e65750815b8061310057503360009081526001602052604090205460ff165b8061312e57506001600160a01b038716600090815260056020908152604080832033845290915290205460ff165b90506001600160a01b03871661318b576040805162461bcd60e51b815260206004820152601460248201527f66726f6d206973207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0386166131e6576040805162461bcd60e51b815260206004820152601a60248201527f63616e27742073656e6420746f207a65726f2061646472657373000000000000604482015290519081900360640190fd5b845160005b8181101561336957600087828151811061320157fe5b6020026020010151905060008061321783612ba1565b915091508b6001600160a01b0316826001600160a01b031614613281576040805162461bcd60e51b815260206004820152601e60248201527f6e6f74206f776e657220696e2062617463685472616e7366657246726f6d0000604482015290519081900360640190fd5b85806132ab57508080156132ab57506000838152600660205260409020546001600160a01b031633145b6132fc576040805162461bcd60e51b815260206004820152600e60248201527f6e6f7420617574686f72697a6564000000000000000000000000000000000000604482015290519081900360640190fd5b8a6001600160a01b03166004600085815260200190815260200160002081905550828b6001600160a01b03168d6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050506001016131eb565b50866001600160a01b0316886001600160a01b0316146133b1576001600160a01b03808916600090815260036020526040808220805485900390559189168152208054820190555b6133c3876001600160a01b03166136db565b80156133e2575083806133e257506133e2876317a2fd9160e21b613717565b1561151957613400836133f557336133f7565b885b89898989613d9e565b6115195760405162461bcd60e51b81526004018080602001828103825260248152602001806146d76024913960400191505060405180910390fd5b600080600061344984612ba1565b90925090506001600160a01b0382166134a0576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b856001600160a01b0316826001600160a01b031614613506576040805162461bcd60e51b815260206004820152601b60248201527f6e6f74206f776e657220696e205f636865636b5472616e736665720000000000604482015290519081900360640190fd5b6001600160a01b038516613561576040805162461bcd60e51b815260206004820152601a60248201527f63616e27742073656e6420746f207a65726f2061646472657373000000000000604482015290519081900360640190fd5b336001600160a01b0387161480159061358957503360009081526002602052604090205460ff165b9250336001600160a01b038716148015906135a2575082155b15613662573360009081526001602052604090205460ff16806135e857506001600160a01b038616600090815260056020908152604080832033845290915290205460ff165b80613611575080801561361157506000848152600660205260409020546001600160a01b031633145b613662576040805162461bcd60e51b815260206004820152601860248201527f6e6f7420617070726f76656420746f207472616e736665720000000000000000604482015290519081900360640190fd5b50509392505050565b6001600160a01b03808416600081815260036020908152604080832080546000190190559386168083528483208054600101905585835260049091528382208190559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470823f801580159061370f5750818114155b949350505050565b604080516001600160e01b031983166024808301919091528251808303909101815260449091018252602081810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a7000000000000000000000000000000000000000000000000000000001781528251935160008082529485948594909392908183858c612710fa955080519450505050609e5a116137b657fe5b8280156137c05750815b9695505050505050565b600080846001600160a01b031663150b7a02888887876040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561386257818101518382015260200161384a565b50505050905090810190601f16801561388f5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156138b157600080fd5b505af11580156138c5573d6000803e3d6000fd5b505050506040513d60208110156138db57600080fd5b50516001600160e01b0319167f150b7a0200000000000000000000000000000000000000000000000000000000149150505b95945050505050565b8260011415613a0b5761019881028201600061393182612dc5565b90506001600160a01b038116613985576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b0316146139eb576040805162461bcd60e51b815260206004820152601a60248201527f6e6f74206f776e657220696e205f7472616e7366657251756164000000000000604482015290519081900360640190fd5b5060009081526004602052604090206001600160a01b0385169055613a18565b613a188585858585613f27565b60005b83840281101561101a57613a3181858585613b28565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4600101613a1b565b613a8b856001600160a01b03166136db565b8015613aa35750613aa3856317a2fd9160e21b613717565b15613b1f576060848502604051908082528060200260200182016040528015613ad6578160200160208202803883390190505b50905060005b858602811015613b1157613af281878787613b28565b828281518110613afe57fe5b6020908102919091010152600101613adc565b506134008888888486613d9e565b50505050505050565b600080848681613b3457fe5b04905060028106613b5b5761019881840102858781613b4f57fe5b0685010191505061370f565b61019881840102858781613b6b57fe5b066001018686010301915050949350505050565b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915582519384529083015280517fb21eb88b4e33b3f1281830a7178d74d8aa73220416215726b68ae23d539515cb9281900390910190a15050565b6001600160a01b03821660009081526001602052604090205460ff1615613c3b5760405162461bcd60e51b815260040180806020018281038252603681526020018061471f6036913960400191505060405180910390fd5b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff1916861515908117909155825190815291517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319281900390910190a3505050565b606081613cea575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610dbc565b8160005b8115613d0257600101600a82049150613cee565b6060816040519080825280601f01601f191660200182016040528015613d2f576020820181803883390190505b50905060001982015b8515613d9557600a860660300160f81b82828060019003935081518110613d5b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a86049550613d38565b50949350505050565b600080846001600160a01b0316634b808c46888887876040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015613e37578181015183820152602001613e1f565b50505050905001838103825284818151815260200191508051906020019080838360005b83811015613e73578181015183820152602001613e5b565b50505050905090810190601f168015613ea05780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015613ec357600080fd5b505af1158015613ed7573d6000803e3d6000fd5b505050506040513d6020811015613eed57600080fd5b50516001600160e01b0319167f4b808c46000000000000000000000000000000000000000000000000000000001491505095945050505050565b828281613f3057fe5b06158015613f455750828181613f4257fe5b06155b613f96576040805162461bcd60e51b815260206004820152601360248201527f496e76616c696420636f6f7264696e6174657300000000000000000000000000604482015290519081900360640190fd5b82610198038211158015613fae575082610198038111155b613fff576040805162461bcd60e51b815260206004820152600d60248201527f4f7574206f6620626f756e647300000000000000000000000000000000000000604482015290519081900360640190fd5b826003141561401c57614016858584846001614061565b50612425565b82600614156140335761401685858484600161421c565b82600c141561404a57614016858584846001614362565b82601814156118a4576140168585848460016144a8565b600061019883028401600160f81b81016001865b876003018110156140b957865b876003018110156140b05761409d8b61019883028401614639565b80156140a65750825b9250600101614082565b50600101614075565b50841561421057806141eb576000828152600460205260409020546001600160a01b038a16148061412457506001600160a01b0389166004600061019860068a046006020260068b8161410857fe5b04600602600160f91b0101815260200190815260200160002054145b8061416a57506001600160a01b03891660046000610198600c8a5b04600c0202600c8b8161414e57fe5b04600c02600360f81b0101815260200190815260200160002054145b806141b057506001600160a01b0389166004600061019860188a5b046018020260188b8161419457fe5b04601802600160fa1b0101815260200190815260200160002054145b6141eb5760405162461bcd60e51b815260040180806020018281038252602b81526020018061481e602b913960400191505060405180910390fd5b5060009081526004602052604090206001600160a01b0387169055506001905061390d565b98975050505050505050565b600061019883028401600160f91b81016001865b8760060181101561431d57865b876006018110156143145760006142588c8c85856000614061565b61019883028401600160f81b016000818152600460205260409020549192509080156142f057826142e0578d6001600160a01b031681146142e0576040805162461bcd60e51b815260206004820152601560248201527f6e6f74206f776e6572206f662033783320717561640000000000000000000000604482015290519081900360640190fd5b6000828152600460205260408120555b82806142fb57508015155b80156143045750855b955050505060038101905061423d565b50600301614230565b50841561421057806141eb576000828152600460205260409020546001600160a01b038a16148061416a57506001600160a01b03891660046000610198600c8a61413f565b600061019883028401600360f81b81016001865b87600c0181101561446357865b87600c0181101561445a57600061439e8c8c8585600061421c565b61019883028401600160f91b016000818152600460205260409020549192509080156144365782614426578d6001600160a01b03168114614426576040805162461bcd60e51b815260206004820152601560248201527f6e6f74206f776e6572206f662036783620717561640000000000000000000000604482015290519081900360640190fd5b6000828152600460205260408120555b828061444157508015155b801561444a5750855b9550505050600681019050614383565b50600601614376565b50841561421057806141eb576000828152600460205260409020546001600160a01b038a1614806141b057506001600160a01b0389166004600061019860188a614185565b600061019883028401600160fa1b81016001865b876018018110156145a957865b876018018110156145a05760006144e48c8c85856000614362565b61019883028401600360f81b0160008181526004602052604090205491925090801561457c578261456c578d6001600160a01b0316811461456c576040805162461bcd60e51b815260206004820152601760248201527f6e6f74206f776e6572206f662031327831322071756164000000000000000000604482015290519081900360640190fd5b6000828152600460205260408120555b828061458757508015155b80156145905750855b9550505050600c810190506144c9565b50600c016144bc565b50841561460a57806141eb576000828152600460205260409020546001600160a01b038a16146141eb5760405162461bcd60e51b815260040180806020018281038252602a8152602001806147d3602a913960400191505060405180910390fd5b808061462c57506000828152600460205260409020546001600160a01b038a16145b9998505050505050505050565b60008181526004602052604081205480156146cc57836001600160a01b0316816001600160a01b0316146146b4576040805162461bcd60e51b815260206004820152600960248201527f6e6f74206f776e65720000000000000000000000000000000000000000000000604482015290519081900360640190fd5b505060008181526004602052604081205560016126cc565b506000939250505056fe657263373231206261746368207472616e736665722072656a656374656420627920746f6f6e6c792061646d696e20697320616c6c6f77656420746f20616464206d696e746572737375706572206f70657261746f722063616e2774206861766520746865697220617070726f76616c466f72416c6c206368616e6765646f6e6c792061646d696e20697320616c6c6f77656420746f20616464207375706572206f70657261746f72736e6f7420617574686f72697a656420746f207472616e736665724d756c746951756164736f6e6c792061646d696e2063616e207365747570206d6574615472616e73616374696f6e50726f636573736f72736e6f74206f776e6572206f6620616c6c20737562207175616473206e6f7420706172656e7420717561646e6f7420617574686f72697a656420746f20617070726f766520666f7220616c6c6e6f74206f776e6572206f6620616c6c20737562207175616473206e6f7220706172656e74207175616473a265627a7a7230582083895022ccd1f4731144230de229e76c02767e3161aeff679a637da2234bc09f64736f6c634300050900320000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d000000000000000000000000018dd4e0eb8699ea4fee238de41ecfb95e32272f8

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

0000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d000000000000000000000000018dd4e0eb8699ea4fee238de41ecfb95e32272f8

-----Decoded View---------------
Arg [0] : metaTransactionContract (address): 0x3845badade8e6dff049820680d1f14bd3903a5d0
Arg [1] : admin (address): 0x18dd4e0eb8699ea4fee238de41ecfb95e32272f8

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000003845badade8e6dff049820680d1f14bd3903a5d0
Arg [1] : 00000000000000000000000018dd4e0eb8699ea4fee238de41ecfb95e32272f8


Deployed ByteCode Sourcemap

106:2072:7:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;106:2072:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2029:147;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2029:147:7;-1:-1:-1;;;;;;2029:147:7;;:::i;:::-;;;;;;;;;;;;;;;;;;428:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;428:95:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4521:338:8;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4521:338:8;;:::i;:::-;;;;-1:-1:-1;;;;;4521:338:8;;;;;;;;;;;;;;3957:400;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3957:400:8;;;;;;;;:::i;:::-;;2126:77:9;;;:::i;:::-;;;;;;;;;;;;;;;;8618:170:8;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;8618:170:8;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;8618:170:8;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8618:170:8;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;8618:170:8;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;8618:170:8;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8618:170:8;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;8618:170:8;;-1:-1:-1;8618:170:8;-1:-1:-1;8618:170:8;:::i;6900:439::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;6900:439:8;;;;;;;;;;;;;;;;;:::i;10485:173::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;10485:173:8;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;10485:173:8;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;10485:173:8;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;10485:173:8;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;10485:173:8;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;10485:173:8;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;10485:173:8;;-1:-1:-1;10485:173:8;-1:-1:-1;10485:173:8;:::i;3208:560::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3208:560:8;;;;;;;;;;;;;;;;;:::i;6717:804:9:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;6717:804:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;6717:804:9;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6717:804:9;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;6717:804:9;;-1:-1:-1;6717:804:9;-1:-1:-1;6717:804:9;:::i;2312:156::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2312:156:9;;:::i;8255:124:8:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8255:124:8;;;;;;;;;;;;;;;;;:::i;13255:87::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13255:87:8;;:::i;2577:156:9:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2577:156:9;;:::i;2406:166:8:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2406:166:8;;:::i;970:109:2:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;970:109:2;-1:-1:-1;;;;;970:109:2;;:::i;3102:2891:9:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;3102:2891:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;3102:2891:9;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3102:2891:9;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;3102:2891:9;;-1:-1:-1;3102:2891:9;-1:-1:-1;3102:2891:9;:::i;264:82:0:-;;;:::i;12921:249:8:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12921:249:8;;;;;;;;;;;;;;;;;:::i;1740:177::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1740:177:8;-1:-1:-1;;;;;1740:177:8;;:::i;13493:543::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;13493:543:8;;;;;;;;:::i;902:53::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;902:53:8;-1:-1:-1;;;;;902:53:8;;:::i;572:295:1:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;572:295:1;;;;;;;;;;:::i;469:197:0:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;469:197:0;-1:-1:-1;;;;;469:197:0;;:::i;648:86:7:-;;;:::i;961:43:8:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;961:43:8;;:::i;1010:69::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1010:69:8;;;;;;;;;;:::i;11969:136::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11969:136:8;;;;;;;;;;:::i;1669:95:9:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1669:95:9;-1:-1:-1;;;;;1669:95:9;;:::i;484:302:2:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;484:302:2;;;;;;;;;;:::i;7615:401:8:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;7615:401:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;7615:401:8;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7615:401:8;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;7615:401:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;7615:401:8;;-1:-1:-1;7615:401:8;;-1:-1:-1;;;;;7615:401:8:i;1085:46::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1085:46:8;;:::i;1394:367:7:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1394:367:7;;:::i;1247:252:9:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1247:252:9;;;;;;;;;;:::i;1330:131:1:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1330:131:1;-1:-1:-1;;;;;1330:131:1;;:::i;12702:213:8:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12702:213:8;;;;;;;;;;:::i;8580:1793:9:-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;8580:1793:9;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;8580:1793:9;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8580:1793:9;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;8580:1793:9;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;8580:1793:9;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8580:1793:9;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;8580:1793:9;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;8580:1793:9;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8580:1793:9;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;8580:1793:9;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;8580:1793:9;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8580:1793:9;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;8580:1793:9;;-1:-1:-1;8580:1793:9;-1:-1:-1;8580:1793:9;:::i;11292:453:8:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11292:453:8;;;;;;;;;;;;;;;;;;;:::i;2029:147:7:-;2090:4;2113:16;-1:-1:-1;;;;;;2113:16:7;;;;:36;;-1:-1:-1;2133:16:7;-1:-1:-1;;;;;;2133:16:7;;;2113:36;:56;;;-1:-1:-1;2153:16:7;-1:-1:-1;;;;;;2153:16:7;;;2113:56;2106:63;;2029:147;;;;:::o;428:95::-;492:24;;;;;;;;;;;;;;;;;428:95;:::o;4521:338:8:-;4577:7;4597:13;4612:20;4636:30;4663:2;4636:26;:30::i;:::-;4596:70;;-1:-1:-1;4596:70:8;-1:-1:-1;;;;;;4684:19:8;;4676:52;;;;;-1:-1:-1;;;4676:52:8;;;;;;;;;;;;-1:-1:-1;;;4676:52:8;;;;;;;;;;;;;;;4742:15;4738:115;;;-1:-1:-1;;;4780:14:8;;;;:10;:14;;;;;;-1:-1:-1;;;;;4780:14:8;4773:21;;4738:115;4840:1;4825:17;;;;;;3957:400;4023:13;4039:12;4048:2;4039:8;:12::i;:::-;4023:28;-1:-1:-1;;;;;;4069:19:8;;4061:52;;;;;-1:-1:-1;;;4061:52:8;;;;;;;;;;;;-1:-1:-1;;;4061:52:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;4144:19:8;;4153:10;4144:19;;:62;;-1:-1:-1;4195:10:8;4179:27;;;;:15;:27;;;;;;;;4144:62;:113;;;-1:-1:-1;;;;;;4222:23:8;;;;;;:16;:23;;;;;;;;4246:10;4222:35;;;;;;;;;;4144:113;4123:185;;;;;-1:-1:-1;;;4123:185:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;4318:32;4330:5;4337:8;4347:2;4318:11;:32::i;:::-;3957:400;;;:::o;2126:77:9:-;228:3;2126:77;:::o;8618:170:8:-;8735:46;8754:4;8760:2;8764:3;;8735:46;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;8735:46:8;;;;137:4:-1;8735:46:8;;;;;;;;;;;;;;;;;;-1:-1:-1;8769:4:8;;-1:-1:-1;8769:4:8;;;;8735:46;;8769:4;;;;8735:46;1:33:-1;99:1;81:16;;74:27;;;-1:-1;99:1;-1:-1;8735:18:8;;-1:-1:-1;;8735:46:8:i;:::-;8618:170;;;;;;:::o;6900:439::-;6979:11;6993:28;7008:4;7014:2;7018;6993:14;:28::i;:::-;6979:42;;7031:27;7045:4;7051:2;7055;7031:13;:27::i;:::-;7072:15;:2;-1:-1:-1;;;;;7072:13:8;;:15::i;:::-;:77;;;;-1:-1:-1;7091:58:8;7119:2;-1:-1:-1;;;7091:27:8;:58::i;:::-;7068:265;;;7190:68;7213:6;:26;;7229:10;7213:26;;;7222:4;7213:26;7241:4;7247:2;7251;7190:68;;;;;;;;;;;;:22;:68::i;:::-;7165:157;;;;;-1:-1:-1;;;7165:157:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;6900:439;;;;:::o;10485:173::-;10606:45;10625:4;10631:2;10635:3;;10606:45;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;;10606:45:8;;;;137:4:-1;10606:45:8;;;;;;;;;;;;;;;;;;-1:-1:-1;10640:4:8;;-1:-1:-1;10640:4:8;;;;10606:45;;10640:4;;;;10606:45;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;10646:4:8;;-1:-1:-1;10606:18:8;;-1:-1:-1;;10606:45:8:i;3208:560::-;3323:13;3339:12;3348:2;3339:8;:12::i;:::-;3323:28;-1:-1:-1;;;;;;3369:20:8;;3361:55;;;;;-1:-1:-1;;;3361:55:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;3447:10;-1:-1:-1;;;;;3447:20:8;;;;:73;;-1:-1:-1;3509:10:8;3483:37;;;;:25;:37;;;;;;;;3447:73;:116;;;-1:-1:-1;3552:10:8;3536:27;;;;:15;:27;;;;;;;;3447:116;:168;;;-1:-1:-1;;;;;;3579:24:8;;;;;;:16;:24;;;;;;;;3604:10;3579:36;;;;;;;;;;3447:168;3426:240;;;;;-1:-1:-1;;;3426:240:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;3693:6;-1:-1:-1;;;;;3684:15:8;:5;-1:-1:-1;;;;;3684:15:8;;3676:43;;;;;-1:-1:-1;;;3676:43:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;3729:32;3741:5;3748:8;3758:2;3729:11;:32::i;6717:804:9:-;-1:-1:-1;;;;;6849:18:9;;6841:51;;;;;-1:-1:-1;;;6841:51:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6910:16:9;;6902:55;;;;;-1:-1:-1;;;6902:55:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;6967:11;6981:10;-1:-1:-1;;;;;6981:18:9;;;;;;:59;;-1:-1:-1;7029:10:9;7003:37;;;;:25;:37;;;;;;;;6981:59;6967:73;-1:-1:-1;7054:10:9;-1:-1:-1;;;;;7054:18:9;;;;;;:29;;;7077:6;7076:7;7054:29;7050:230;;;7140:10;7124:27;;;;:15;:27;;;;;;;;;:81;;-1:-1:-1;;;;;;7171:22:9;;;;;;:16;:22;;;;;;;;7194:10;7171:34;;;;;;;;;;7124:81;7099:170;;;;;-1:-1:-1;;;7099:170:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;7289:35;7303:4;7309:2;7313:4;7319:1;7322;7289:13;:35::i;:::-;-1:-1:-1;;;;;7334:23:9;;;;;;;:17;:23;;;;;;:38;;7361:11;;;7334:38;;;;;;;7382:21;;;;;;;:36;;;;;;;7429:85;7459:6;:26;;7475:10;7459:26;;;7468:4;7459:26;7487:4;7493:2;7497:4;7503:1;7506;7509:4;;7429:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;7429:29:9;;-1:-1:-1;;;7429:85:9:i;:::-;6717:804;;;;;;;;:::o;2312:156::-;2352:7;;2379:12;2388:2;2379:8;:12::i;:::-;-1:-1:-1;;;;;2379:26:9;;;2371:59;;;;;-1:-1:-1;;;2371:59:9;;;;;;;;;;;;-1:-1:-1;;;2371:59:9;;;;;;;;;;;;;;;-1:-1:-1;228:3:9;2447:14;;;2312:156::o;8255:124:8:-;8338:34;8355:4;8361:2;8365;8338:34;;;;;;;;;;;;:16;:34::i;13255:87::-;13300:35;13306:10;13318:12;13327:2;13318:8;:12::i;:::-;13332:2;13300:5;:35::i;:::-;13255:87;:::o;2577:156:9:-;2617:7;;2644:12;2653:2;2644:8;:12::i;:::-;-1:-1:-1;;;;;2644:26:9;;;2636:59;;;;;-1:-1:-1;;;2636:59:9;;;;;;;;;;;;-1:-1:-1;;;2636:59:9;;;;;;;;;;;;;;;-1:-1:-1;228:3:9;2712:14;;;2577:156::o;2406:166:8:-;2458:13;2491:12;2500:2;2491:8;:12::i;:::-;2483:20;-1:-1:-1;;;;;;2521:19:8;;2513:52;;;;;-1:-1:-1;;;2513:52:8;;;;;;;;;;;;-1:-1:-1;;;2513:52:8;;;;;;;;;;;;;;970:109:2;-1:-1:-1;;;;;1052:20:2;1029:4;1052:20;;;:15;:20;;;;;;;;;970:109::o;3102:2891:9:-;-1:-1:-1;;;;;3216:16:9;;3208:47;;;;;-1:-1:-1;;;3208:47:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;3286:20;3295:10;3286:8;:20::i;:::-;3265:89;;;;;-1:-1:-1;;;3265:89:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;3376:4;3372:1;:8;;;;;;:13;:30;;;;;3393:4;3389:1;:8;;;;;;:13;3372:30;3364:62;;;;;-1:-1:-1;;;3364:62:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;3461:4;228:3;3449:16;3444:1;:21;;:46;;;;;3486:4;228:3;3474:16;3469:1;:21;;3444:46;3436:72;;;;;-1:-1:-1;;;3436:72:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;3519:14;228:3;3560:13;;3556:17;;3596:1;3588:9;;3584:394;;;3622:2;3613:11;;3584:394;;;3645:4;3653:1;3645:9;3641:337;;;3691:2;-1:-1:-1;;;3679:14:9;3670:23;;3641:337;;;3714:4;3722:1;3714:9;3710:268;;;3760:2;-1:-1:-1;;;3748:14:9;3739:23;;3710:268;;;3783:4;3791:2;3783:10;3779:199;;;3832:2;-1:-1:-1;;;3818:16:9;3809:25;;3779:199;;;3855:4;3863:2;3855:10;3851:127;;;3904:2;-1:-1:-1;;;3890:16:9;3881:25;;3851:127;;;3937:30;;;-1:-1:-1;;;3937:30:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;3996:7;:62;228:3;4036:2;4034:1;:4;4042:2;4033:11;4032:25;4021:2;4019:1;:4;;;;;;4027:2;4018:11;-1:-1:-1;;;4004:25:9;:53;3996:62;;;;;;;;;;;;4062:1;3996:67;3988:103;;;;;-1:-1:-1;;;3988:103:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;4116:6;;;4146;;;4174:2;4166:10;;4162:521;;4217:7;:62;228:3;4257:2;4255:1;:4;4263:2;4254:11;4253:25;4242:2;4240:1;:4;;;;;;4248:2;4239:11;-1:-1:-1;;;4225:25:9;:53;4217:62;;;;;;;;;;;;4283:1;4217:67;4192:149;;;;;-1:-1:-1;;;4192:149:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;4162:521;;;4392:1;4372:301;4402:3;4395:4;:10;4372:301;;;4457:1;4437:222;4467:3;4460:4;:10;4437:222;;;228:3;4545:16;;4524:37;;-1:-1:-1;;;4524:37:9;4506:15;4591:16;;;:7;:16;;;;;;:21;4583:57;;;;;-1:-1:-1;;;4583:57:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4480:2:9;4472:10;4437:222;;;-1:-1:-1;4415:2:9;4407:10;4372:301;;;;4162:521;4705:1;4697:4;:9;4693:448;;4730:7;:56;228:3;4766:1;4764;:3;4771:1;4763:9;4762:23;4753:1;4751;:3;;;;;;4758:1;4750:9;-1:-1:-1;;;4738:21:9;:47;4730:56;;;;;;;;;;;;4790:1;4730:61;4722:95;;;;;-1:-1:-1;;;4722:95:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;4693:448;;;4867:1;4848:283;4876:3;4870;:9;4848:283;;;4928:1;4909:208;4937:3;4931;:9;4909:208;;;228:3;5008:15;;4990:33;;-1:-1:-1;;;4990:33:9;4974:13;5053:14;;;:7;:14;;;;;;:19;5045:53;;;;;-1:-1:-1;;;5045:53:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4949:1:9;4942:8;4909:208;;;-1:-1:-1;4888:1:9;4881:8;4848:283;;;;4693:448;5163:1;5155:4;:9;5151:448;;5188:7;:56;228:3;5224:1;5222;:3;5229:1;5221:9;5220:23;5211:1;5209;:3;;;;;;5216:1;5208:9;-1:-1:-1;;;5196:21:9;:47;5188:56;;;;;;;;;;;;5248:1;5188:61;5180:95;;;;;-1:-1:-1;;;5180:95:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;5151:448;;;5325:1;5306:283;5334:3;5328;:9;5306:283;;;5386:1;5367:208;5395:3;5389;:9;5367:208;;;228:3;5466:15;;5448:33;;-1:-1:-1;;;5448:33:9;5432:13;5511:14;;;:7;:14;;;;;;:19;5503:53;;;;;-1:-1:-1;;;5503:53:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5407:1:9;5400:8;5367:208;;;-1:-1:-1;5346:1:9;5339:8;5306:283;;;;5151:448;5614:9;5609:206;5638:4;5633;:9;5629:1;:13;5609:206;;;5663:10;5676:24;5686:1;5689:4;5695:1;5698;5676:9;:24::i;:::-;5722:11;;;;:7;:11;;;;;;5663:37;;-1:-1:-1;5722:16:9;5714:43;;;;;-1:-1:-1;;;5714:43:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;5776:28;;5801:2;;-1:-1:-1;;;;;5776:28:9;;;5793:1;;5776:28;;5793:1;;5776:28;-1:-1:-1;5644:3:9;;5609:206;;;-1:-1:-1;5825:15:9;;;;:7;:15;;;;;;;;-1:-1:-1;;;;;5843:11:9;;5825:29;;;;5864:21;;:17;:21;;;;;:36;;5889:11;;;5864:36;;;5911:75;;;;;;;;;;;;;;;;;;;;;;5941:10;;5825:15;;5851:2;;5896:4;;5975:1;;5978;;5911:75;5981:4;;;;;;5911:75;;5981:4;;;;5911:75;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;5911:29:9;;-1:-1:-1;;;5911:75:9:i;:::-;3102:2891;;;;;;;;;;:::o;264:82:0:-;307:7;333:6;-1:-1:-1;;;;;333:6:0;264:82;:::o;12921:249:8:-;13010:5;-1:-1:-1;;;;;13002:13:8;:4;-1:-1:-1;;;;;13002:13:8;;12994:35;;;;;-1:-1:-1;;;12994:35:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;13039:11;;;;:7;:11;;;;;;;;13053:6;13039:20;;-1:-1:-1;;;;;13093:23:8;;;;;:17;:23;;;;;;:25;;-1:-1:-1;;13093:25:8;;;13133:30;13047:2;;13039:11;13093:23;13133:30;;13039:11;;13133:30;12921:249;;;:::o;1740:177::-;1797:7;-1:-1:-1;;;;;1824:19:8;;1816:53;;;;;-1:-1:-1;;;1816:53:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1886:24:8;;;;;:17;:24;;;;;;;1740:177::o;13493:543::-;-1:-1:-1;;;;;13564:18:8;;13556:53;;;;;-1:-1:-1;;;13556:53:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;13620:13;13635:20;13659:30;13686:2;13659:26;:30::i;:::-;13619:70;;-1:-1:-1;13619:70:8;-1:-1:-1;13720:10:8;-1:-1:-1;;;;;13720:18:8;;;;:71;;-1:-1:-1;13780:10:8;13754:37;;;;:25;:37;;;;;;;;13720:71;:136;;;;13808:15;:47;;;;-1:-1:-1;13827:14:8;;;;:10;:14;;;;;;-1:-1:-1;;;;;13827:14:8;13845:10;13827:28;13808:47;13720:179;;;-1:-1:-1;13888:10:8;13872:27;;;;:15;:27;;;;;;;;13720:179;:229;;;-1:-1:-1;;;;;;13915:22:8;;;;;;:16;:22;;;;;;;;13938:10;13915:34;;;;;;;;;;13720:229;13699:298;;;;;-1:-1:-1;;;13699:298:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;14007:22;14013:4;14019:5;14026:2;14007:5;:22::i;902:53::-;;;;;;;;;;;;;:::o;572:295:1:-;709:6;;-1:-1:-1;;;;;709:6:1;695:10;:20;674:113;;;;-1:-1:-1;;;674:113:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;797:63;826:24;852:7;797:28;:63::i;:::-;572:295;;:::o;469:197:0:-;549:6;;-1:-1:-1;;;;;549:6:0;535:10;:20;527:60;;;;;-1:-1:-1;;;527:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;615:6;;602:30;;;-1:-1:-1;;;;;615:6:0;;;602:30;;;;;;;;;;;;;;;;;;;;;642:6;:17;;;;-1:-1:-1;;;;;642:17:0;;;;;;;;;;469:197::o;648:86:7:-;714:13;;;;;;;;;;;;;;;;;648:86;:::o;961:43:8:-;;;;;;;;;;;;;:::o;1010:69::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11969:136::-;12048:50;12067:10;12079:8;12089;12048:18;:50::i;1669:95:9:-;-1:-1:-1;;;;;1744:13:9;1721:4;1744:13;;;:8;:13;;;;;;;;;1669:95::o;484:302:2:-;601:6;;-1:-1:-1;;;;;601:6:2;587:10;:20;566:111;;;;-1:-1:-1;;;566:111:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;687:30:2;;;;;;:15;:30;;;;;;;;;:40;;-1:-1:-1;;687:40:2;;;;;;;;;;742:37;;;;;;;;;;;;;;;;;;;;;484:302;;:::o;7615:401:8:-;7715:11;7729:28;7744:4;7750:2;7754;7729:14;:28::i;:::-;7715:42;;7767:27;7781:4;7787:2;7791;7767:13;:27::i;:::-;7808:15;:2;-1:-1:-1;;;;;7808:13:8;;:15::i;:::-;7804:206;;;7864:70;7887:6;:26;;7903:10;7887:26;;;7896:4;7887:26;7915:4;7921:2;7925;7929:4;7864:22;:70::i;:::-;7839:160;;;;;-1:-1:-1;;;7839:160:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;7615:401;;;;;:::o;1085:46::-;;;;;;;;;;;;-1:-1:-1;;;;;1085:46:8;;:::o;1394:367:7:-;1445:13;1502:1;1478:12;1487:2;1478:8;:12::i;:::-;-1:-1:-1;;;;;1478:26:7;;;1470:56;;;;;-1:-1:-1;;;1470:56:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;1672:12;1681:2;1672:8;:12::i;:::-;1579:161;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;1579:161:7;;;;;;-1:-1:-1;1579:161:7;;;26:21:-1;;;22:32;;6:49;;1579:161:7;;;;;;;;-1:-1:-1;;;;1394:367:7:o;1247:252:9:-;1350:6;;-1:-1:-1;;;;;1350:6:9;1336:10;:20;1315:103;;;;-1:-1:-1;;;1315:103:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1428:16:9;;;;;;:8;:16;;;;;;;;;:26;;-1:-1:-1;;1428:26:9;;;;;;;;;;1469:23;;;;;;;;;;;;;;;;;;;;;1247:252;;:::o;1330:131:1:-;-1:-1:-1;;;;;1424:30:1;1401:4;1424:30;;;:25;:30;;;;;;;;;1330:131::o;12702:213:8:-;-1:-1:-1;;;;;12846:23:8;;;12808:15;12846:23;;;:16;:23;;;;;;;;:33;;;;;;;;;;;;;;;:62;;-1:-1:-1;;;;;;12883:25:8;;;;;;:15;:25;;;;;;;;12846:62;12839:69;;12702:213;;;;;:::o;8580:1793:9:-;-1:-1:-1;;;;;8807:18:9;;8799:51;;;;;-1:-1:-1;;;8799:51:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8868:16:9;;8860:55;;;;;-1:-1:-1;;;8860:55:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;8933:25;;;:51;;;;-1:-1:-1;8962:22:9;;;8933:51;8925:76;;;;;-1:-1:-1;;;8925:76:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;9011:11;9025:10;-1:-1:-1;;;;;9025:18:9;;;;;;:59;;-1:-1:-1;9073:10:9;9047:37;;;;:25;:37;;;;;;;;9025:59;9011:73;-1:-1:-1;9098:10:9;-1:-1:-1;;;;;9098:18:9;;;;;;:29;;;9121:6;9120:7;9098:29;9094:236;;;9184:10;9168:27;;;;:15;:27;;;;;;;;;:81;;-1:-1:-1;;;;;;9215:22:9;;;;;;:16;:22;;;;;;;;9238:10;9215:34;;;;;;;;;;9168:81;9143:176;;;;-1:-1:-1;;;9143:176:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9339:27;;9380:196;9400:16;;;9380:196;;;9437:12;9452:5;;9458:1;9452:8;;;;;;;;;;;;;9437:23;;9474:43;9488:4;9494:2;9498:4;9504:2;;9507:1;9504:5;;;;;;;;;;;;;9511:2;;9514:1;9511:5;;;;;;;;;;;;;9474:13;:43::i;:::-;9554:11;;9531:34;;;;;9418:3;;9380:196;;;-1:-1:-1;;;;;;9585:23:9;;;;;;;:17;:23;;;;;;:46;;;;;;;9641:21;;;;;;;;;:44;;;;;;9700:15;;:13;:15::i;:::-;:77;;;;-1:-1:-1;9719:58:9;9747:2;-1:-1:-1;;;9719:27:9;:58::i;:::-;9696:671;;;9793:20;9830:19;9816:34;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;9816:34:9;-1:-1:-1;9793:57:9;-1:-1:-1;9864:15:9;;9897:275;9917:16;;;9897:275;;;9958:12;9973:5;;9979:1;9973:8;;;;;;;;;;;;;9958:23;;10004:9;10016:1;10004:13;;9999:159;10028:4;10023;:9;10019:1;:13;9999:159;;;10076:32;10086:1;10089:4;10095:2;;10098:1;10095:5;;;;;;;;;;;;;10102:2;;10105:1;10102:5;;;;;;;;;;;;;10076:9;:32::i;:::-;10061:3;10065:7;10061:12;;;;;;;;;;;;;;;;;:47;10130:9;;;;;10034:3;9999:159;;;-1:-1:-1;;9935:3:9;;9897:275;;;;10210:76;10238:6;:26;;10254:10;10238:26;;;10247:4;10238:26;10266:4;10272:2;10276:3;10281:4;;10210:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;10210:27:9;;-1:-1:-1;;;10210:76:9:i;:::-;10185:171;;;;-1:-1:-1;;;10185:171:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9696:671;;;8580:1793;;;;;;;;;;;;:::o;11292:453:8:-;-1:-1:-1;;;;;11428:20:8;;11420:55;;;;;-1:-1:-1;;;11420:55:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;11506:10;-1:-1:-1;;;;;11506:20:8;;;;:73;;-1:-1:-1;11568:10:8;11542:37;;;;:25;:37;;;;;;;;11506:73;:116;;;-1:-1:-1;11611:10:8;11595:27;;;;:15;:27;;;;;;;;11506:116;11485:196;;;;-1:-1:-1;;;11485:196:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11692:46;11711:6;11719:8;11729;11692:18;:46::i;18129:1421:9:-;18200:13;;281:66;18255:10;;:15;18247:44;;;;;-1:-1:-1;;;18247:44:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;18301:9;18392:11;;;:7;:11;;;;;;228:3;18313:14;;;;18349;;;;18418:13;;18414:1130;;18463:8;-1:-1:-1;18463:8:9;18516:6;18463:8;18505:17;18527:1;18504:24;18486:42;;18414:1130;;;18559:16;18586:7;18559:16;228:3;18622:1;18620;:3;18627:1;18619:9;18618:23;18609:1;18607;:3;;;;;;18614:1;18606:9;-1:-1:-1;;;18594:21:9;:47;18586:56;;;;;;;;;;;;18559:84;;18681:1;-1:-1:-1;;;;;18661:22:9;:8;-1:-1:-1;;;;;18661:22:9;;18657:877;;18711:8;18703:16;;18755:5;18737:23;;18657:877;;;18799:16;18826:7;18799:16;228:3;18862:1;18860;:3;18867:1;18859:9;18858:23;18849:1;18847;:3;;;;;;18854:1;18846:9;-1:-1:-1;;;18834:21:9;:47;18826:56;;;;;;;;;;;;18799:84;;18925:1;-1:-1:-1;;;;;18905:22:9;:8;-1:-1:-1;;;;;18905:22:9;;18901:619;;18959:8;18951:16;;19007:5;18989:23;;18901:619;;;19059:18;19088:7;19059:18;228:3;19128:2;19126:1;:4;19134:2;19125:11;19124:25;19113:2;19111:1;:4;;;;;;19119:2;19110:11;-1:-1:-1;;;19096:25:9;:53;19088:62;;;;;;;;;;;;19059:92;;19199:1;-1:-1:-1;;;;;19177:24:9;:10;-1:-1:-1;;;;;19177:24:9;;19173:329;;19237:10;19229:18;;19291:5;19273:23;;19173:329;;;19367:7;:62;228:3;19407:2;19405:1;:4;19413:2;19404:11;19403:25;19392:2;19390:1;:4;;;;;;19398:2;19389:11;-1:-1:-1;;;19375:25:9;:53;19367:62;;;;;;;;;;;;19351:79;;19474:5;19456:23;;19173:329;18901:619;;18657:877;;18414:1130;;18129:1421;;;;;;:::o;16977:1146::-;17030:7;281:66;17057:10;;:15;17049:44;;;;;-1:-1:-1;;;17049:44:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;17103:9;17194:11;;;:7;:11;;;;;;228:3;17115:14;;;;17151;;;;17220:13;;17216:901;;17264:8;-1:-1:-1;17249:24:9;;-1:-1:-1;;17249:24:9;17216:901;17320:16;17347:7;17320:16;228:3;17383:1;17381;:3;17388:1;17380:9;17379:23;17370:1;17368;:3;;;;;;17375:1;17367:9;-1:-1:-1;;;17355:21:9;:47;17347:56;;;;;;;;;;;;17320:84;;17442:1;-1:-1:-1;;;;;17422:22:9;:8;-1:-1:-1;;;;;17422:22:9;;17418:689;;17471:8;-1:-1:-1;17464:15:9;;-1:-1:-1;;;17464:15:9;17418:689;17518:16;17545:7;17518:16;228:3;17581:1;17579;:3;17586:1;17578:9;17577:23;17568:1;17566;:3;;;;;;17573:1;17565:9;-1:-1:-1;;;17553:21:9;:47;17545:56;;;;;;;;;;;;17518:84;;17644:1;-1:-1:-1;;;;;17624:22:9;:8;-1:-1:-1;;;;;17624:22:9;;17620:473;;17677:8;-1:-1:-1;17670:15:9;;-1:-1:-1;;;;17670:15:9;17620:473;17732:18;17761:7;17732:18;228:3;17801:2;17799:1;:4;17807:2;17798:11;17797:25;17786:2;17784:1;:4;;;;;;17792:2;17783:11;-1:-1:-1;;;17769:25:9;:53;17761:62;;;;;;;;;;;;17732:92;;17872:1;-1:-1:-1;;;;;17850:24:9;:10;-1:-1:-1;;;;;17850:24:9;;17846:229;;17909:10;-1:-1:-1;17902:17:9;;-1:-1:-1;;;;;17902:17:9;17846:229;17989:7;:62;228:3;18029:2;18027:1;:4;18035:2;18026:11;18025:25;18014:2;18012:1;:4;;;;;;18020:2;18011:11;-1:-1:-1;;;17997:25:9;:53;17989:62;;;;;;;;;;;;17974:78;;;;;;;;;;2578:388:8;-1:-1:-1;;;;;2666:22:8;;2663:253;;2704:11;;;;:7;:11;;;;;-1:-1:-1;;;;;2718:14:8;;2704:28;;2663:253;;;2829:11;;;;:7;:11;;;;;;;;-1:-1:-1;;;;;2843:14:8;;;2860:6;2843:23;2829:37;;;2880:10;:14;;;;;;:25;;;;;;;;;;;;;2663:253;2956:2;2946:8;-1:-1:-1;;;;;2930:29:8;2939:5;-1:-1:-1;;;;;2930:29:8;;;;;;;;;;;2578:388;;;:::o;8794:1398::-;8919:11;8933:10;-1:-1:-1;;;;;8933:18:8;;;;;;:59;;-1:-1:-1;8981:10:8;8955:37;;;;:25;:37;;;;;;;;8933:59;8919:73;-1:-1:-1;9002:15:8;9020:10;-1:-1:-1;;;;;9020:18:8;;;;:40;;;9054:6;9020:40;:83;;;-1:-1:-1;9092:10:8;9076:27;;;;:15;:27;;;;;;;;9020:83;:133;;;-1:-1:-1;;;;;;9119:22:8;;;;;;:16;:22;;;;;;;;9142:10;9119:34;;;;;;;;;;9020:133;9002:151;-1:-1:-1;;;;;;9172:18:8;;9164:51;;;;;-1:-1:-1;;;9164:51:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9233:16:8;;9225:55;;;;;-1:-1:-1;;;9225:55:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;9311:10;;9291:17;9331:422;9354:9;9350:1;:13;9331:422;;;9385:10;9398:3;9402:1;9398:6;;;;;;;;;;;;;;9385:19;;9419:13;9434:20;9458:30;9485:2;9458:26;:30::i;:::-;9418:70;;;;9519:4;-1:-1:-1;;;;;9510:13:8;:5;-1:-1:-1;;;;;9510:13:8;;9502:56;;;;;-1:-1:-1;;;9502:56:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;9580:10;:63;;;;9595:15;:47;;;;-1:-1:-1;9614:14:8;;;;:10;:14;;;;;;-1:-1:-1;;;;;9614:14:8;9632:10;9614:28;9595:47;9572:90;;;;;-1:-1:-1;;;9572:90:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;9698:2;-1:-1:-1;;;;;9690:11:8;9676:7;:11;9684:2;9676:11;;;;;;;;;;;:25;;;;9739:2;9735;-1:-1:-1;;;;;9720:22:8;9729:4;-1:-1:-1;;;;;9720:22:8;;;;;;;;;;;-1:-1:-1;;;9365:4:8;;9331:422;;;;9774:2;-1:-1:-1;;;;;9766:10:8;:4;-1:-1:-1;;;;;9766:10:8;;9762:125;;-1:-1:-1;;;;;9792:23:8;;;;;;;:17;:23;;;;;;:36;;;;;;;9842:21;;;;;;:34;;;;;;9762:125;9901:15;:2;-1:-1:-1;;;;;9901:13:8;;:15::i;:::-;:87;;;;;9921:4;:66;;;-1:-1:-1;9929:58:8;9957:2;-1:-1:-1;;;9929:27:8;:58::i;:::-;9897:289;;;10029:76;10057:6;:26;;10073:10;10057:26;;;10066:4;10057:26;10085:4;10091:2;10095:3;10100:4;10029:27;:76::i;:::-;10004:171;;;;-1:-1:-1;;;10004:171:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4865:761;4950:13;4976;4991:20;5015:30;5042:2;5015:26;:30::i;:::-;4975:70;;-1:-1:-1;4975:70:8;-1:-1:-1;;;;;;5063:19:8;;5055:52;;;;;-1:-1:-1;;;5055:52:8;;;;;;;;;;;;-1:-1:-1;;;5055:52:8;;;;;;;;;;;;;;;5134:4;-1:-1:-1;;;;;5125:13:8;:5;-1:-1:-1;;;;;5125:13:8;;5117:53;;;;;-1:-1:-1;;;5117:53:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5188:16:8;;5180:55;;;;;-1:-1:-1;;;5180:55:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;5256:10;-1:-1:-1;;;;;5256:18:8;;;;;;:59;;-1:-1:-1;5304:10:8;5278:37;;;;:25;:37;;;;;;;;5256:59;5245:70;-1:-1:-1;5329:10:8;-1:-1:-1;;;;;5329:18:8;;;;;;:31;;;5352:8;5351:9;5329:31;5325:295;;;5417:10;5401:27;;;;:15;:27;;;;;;;;;:81;;-1:-1:-1;;;;;;5448:22:8;;;;;;:16;:22;;;;;;;;5471:10;5448:34;;;;;;;;;;5401:81;:150;;;;5503:15;:47;;;;-1:-1:-1;5522:14:8;;;;:10;:14;;;;;;-1:-1:-1;;;;;5522:14:8;5540:10;5522:28;5503:47;5376:233;;;;;-1:-1:-1;;;5376:233:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;4865:761;;;;;;;:::o;1335:217::-;-1:-1:-1;;;;;1415:23:8;;;;;;;:17;:23;;;;;;;;:25;;-1:-1:-1;;1415:25:8;;;1450:21;;;;;;;;;:23;;1415:25;1450:23;;;1483:11;;;:7;:11;;;;;;:25;;;1523:22;;1491:2;;1450:21;1415:23;1523:22;;;1335:217;;;:::o;195:451:6:-;252:4;350:66;552:17;;596:15;;;;;:42;;;627:11;615:8;:23;;596:42;588:51;195:451;-1:-1:-1;;;;195:451:6:o;5632:1071:8:-;5843:79;;;-1:-1:-1;;;;;;5843:79:8;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;5843:79:8;;;;;;;25:18:-1;;;61:17;;5843:79:8;182:15:-1;5879:8:8;179:29:-1;160:49;;6085:16:8;;6128:11;;5755:4;6211:19;;;5755:4;;;;;5843:79;;25:18:-1;6128:11:8;;6085:16;25:18:-1;6305:9:8;6282:5;6254:173;6243:184;;6468:6;6462:13;6452:23;;6005:480;;;6658:3;6646:9;:15;6639:23;;;;6679:7;:17;;;;;6690:6;6679:17;6672:24;5632:1071;-1:-1:-1;;;;;;5632:1071:8:o;14042:299::-;14181:4;14201:13;14237:2;-1:-1:-1;;;;;14217:40:8;;14258:8;14268:4;14274:7;14283:5;14217:72;;;;;;;;;;;;;-1:-1:-1;;;;;14217:72:8;-1:-1:-1;;;;;14217:72:8;;;;;;-1:-1:-1;;;;;14217:72:8;-1:-1:-1;;;;;14217:72:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;14217:72:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14217:72:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14217:72:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14217:72:8;-1:-1:-1;;;;;;14307:26:8;14317:16;14307:26;;-1:-1:-1;;14042:299:8;;;;;;;;:::o;10379:586:9:-;10487:4;10495:1;10487:9;10483:353;;;228:3;10532:13;;10528:17;;10512:13;10575:15;10528:17;10575:8;:15::i;:::-;10559:31;-1:-1:-1;;;;;;10612:19:9;;10604:52;;;;;-1:-1:-1;;;10604:52:9;;;;;;;;;;;;-1:-1:-1;;;10604:52:9;;;;;;;;;;;;;;;10687:4;-1:-1:-1;;;;;10678:13:9;:5;-1:-1:-1;;;;;10678:13:9;;10670:52;;;;;-1:-1:-1;;;10670:52:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10736:14:9;;;;:7;:14;;;;;-1:-1:-1;;;;;10753:11:9;;10736:28;;10483:353;;;10795:30;10804:4;10810:2;10814:4;10820:1;10823;10795:8;:30::i;:::-;10850:9;10845:114;10874:4;10869;:9;10865:1;:13;10845:114;;;10923:24;10933:1;10936:4;10942:1;10945;10923:9;:24::i;:::-;10919:2;-1:-1:-1;;;;;10904:44:9;10913:4;-1:-1:-1;;;;;10904:44:9;;;;;;;;;;;10880:3;;10845:114;;7527:666;7750:15;:2;-1:-1:-1;;;;;7750:13:9;;:15::i;:::-;:77;;;;-1:-1:-1;7769:58:9;7797:2;-1:-1:-1;;;7769:27:9;:58::i;:::-;7746:441;;;7843:20;7885:4;7880;:9;7866:24;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;7866:24:9;-1:-1:-1;7843:47:9;-1:-1:-1;7909:9:9;7904:106;7933:4;7928;:9;7924:1;:13;7904:106;;;7971:24;7981:1;7984:4;7990:1;7993;7971:9;:24::i;:::-;7962:3;7966:1;7962:6;;;;;;;;;;;;;;;;;:33;7939:3;;7904:106;;;;8048:58;8076:8;8086:4;8092:2;8096:3;8101:4;8048:27;:58::i;7746:441::-;7527:666;;;;;;;:::o;5999:364::-;6087:7;6106:11;6124:4;6120:1;:8;;;;;;;-1:-1:-1;6147:1:9;6120:8;6141:7;6138:219;;228:3;6238;6234:1;:7;6233:21;6223:4;6221:1;:6;;;;;;6216:1;:12;6215:40;6208:47;;;;;6138:219;228:3;6329;6325:1;:7;6324:21;6314:4;6312:1;:6;;;;;;6308:1;:10;6299:4;6295:1;:8;6294:25;6293:53;6286:60;;;5999:364;;;;;;:::o;873:247:1:-;-1:-1:-1;;;;;978:51:1;;;;;;:25;:51;;;;;;;;;:61;;-1:-1:-1;;978:61:1;;;;;;;;;;1054:59;;;;;;;;;;;;;;;;;;;;;873:247;;:::o;12112:373:8:-;-1:-1:-1;;;;;12260:25:8;;;;;;:15;:25;;;;;;;;12259:26;12238:127;;;;-1:-1:-1;;;12238:127:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12375:24:8;;;;;;;:16;:24;;;;;;;;:34;;;;;;;;;;;;;:45;;-1:-1:-1;;12375:45:8;;;;;;;;;;12436:42;;;;;;;;;;;;;;;;;12112:373;;;:::o;798:451:7:-;848:13;877:7;873:48;;-1:-1:-1;900:10:7;;;;;;;;;;;;;;;;;;;873:48;939:2;930:6;969:66;976:6;;969:66;;998:5;;1022:2;1017:7;;;;969:66;;;1044:17;1074:3;1064:14;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;1064:14:7;87:34:-1;135:17;;-1:-1;1064:14:7;-1:-1:-1;1044:34:7;-1:-1:-1;;;1097:7:7;;1114:100;1121:7;;1114:100;;1177:2;1172;:7;1167:2;:12;1156:25;;1144:4;1149:3;;;;;;;1144:9;;;;;;;;;;;:37;;;;;;;;;;-1:-1:-1;1201:2:7;1195:8;;;;1114:100;;;-1:-1:-1;1237:4:7;798:451;-1:-1:-1;;;;798:451:7:o;14347:325:8:-;14496:4;14516:13;14561:2;-1:-1:-1;;;;;14532:54:8;;14587:8;14597:4;14603:3;14608:5;14532:82;;;;;;;;;;;;;-1:-1:-1;;;;;14532:82:8;-1:-1:-1;;;;;14532:82:8;;;;;;-1:-1:-1;;;;;14532:82:8;-1:-1:-1;;;;;14532:82:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;14532:82:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;14532:82:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14532:82:8;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14532:82:8;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14532:82:8;-1:-1:-1;;;;;;14632:32:8;14642:22;14632:32;;-1:-1:-1;;14347:325:8;;;;;;;:::o;11264:637:9:-;11375:4;11371:1;:8;;;;;;:13;:30;;;;;11392:4;11388:1;:8;;;;;;:13;11371:30;11363:62;;;;;-1:-1:-1;;;11363:62:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;11460:4;228:3;11448:16;11443:1;:21;;:46;;;;;11485:4;228:3;11473:16;11468:1;:21;;11443:46;11435:72;;;;;-1:-1:-1;;;11435:72:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;11522:4;11530:1;11522:9;11518:377;;;11547:33;11559:4;11565:2;11569:1;11572;11575:4;11547:11;:33::i;:::-;;11518:377;;;11601:4;11609:1;11601:9;11597:298;;;11626:33;11638:4;11644:2;11648:1;11651;11654:4;11626:11;:33::i;11597:298::-;11680:4;11688:2;11680:10;11676:219;;;11706:35;11720:4;11726:2;11730:1;11733;11736:4;11706:13;:35::i;11676:219::-;11762:4;11770:2;11762:10;11758:137;;;11788:35;11802:4;11808:2;11812:1;11815;11818:4;11788:13;:35::i;11907:1065::-;12004:4;228:3;12037:13;;12033:17;;-1:-1:-1;;;12077:14:9;;12119:4;12033:1;12133:199;12159:1;12161;12159:3;12154:2;:8;12133:199;;;12202:1;12184:138;12210:1;12212;12210:3;12205:2;:8;12184:138;;;12252:41;12267:4;228:3;12278:2;:14;12273:2;:19;12252:14;:41::i;:::-;:55;;;;;12297:10;12252:55;12239:68;-1:-1:-1;12215:4:9;;12184:138;;;-1:-1:-1;12164:4:9;;12133:199;;;;12344:3;12341:598;;;12367:10;12363:498;;12426:15;;;;:7;:15;;;;;;-1:-1:-1;;;;;12445:13:9;;12426:32;;:129;;-1:-1:-1;;;;;;12542:13:9;;12482:7;:56;228:3;12518:1;12516;:3;12523:1;12515:9;12514:23;12505:1;12503;:3;;;;;;12510:1;12502:9;-1:-1:-1;;;12490:21:9;:47;12482:56;;;;;;;;;;;;:73;12426:129;:232;;;-1:-1:-1;;;;;;12645:13:9;;12579:7;:62;228:3;12619:2;12617:1;:4;;12625:2;12616:11;12615:25;12604:2;12602:1;:4;;;;;;12610:2;12601:11;-1:-1:-1;;;12587:25:9;:53;12579:62;;;;;;;;;;;;:79;12426:232;:335;;;-1:-1:-1;;;;;;12748:13:9;;12682:7;:62;228:3;12722:2;12720:1;:4;;12728:2;12719:11;12718:25;12707:2;12705:1;:4;;;;;;12713:2;12704:11;-1:-1:-1;;;12690:25:9;:53;12682:62;;;;;;;;;;;;:79;12426:335;12397:449;;;;-1:-1:-1;;;12397:449:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12874:15:9;;;;:7;:15;;;;;-1:-1:-1;;;;;12892:11:9;;12874:29;;-1:-1:-1;12924:4:9;;-1:-1:-1;12917:11:9;;12341:598;12955:10;11907:1065;-1:-1:-1;;;;;;;;11907:1065:9:o;12977:1408::-;13074:4;228:3;13107:13;;13103:17;;-1:-1:-1;;;13147:14:9;;13189:4;13103:1;13203:639;13229:1;13231;13229:3;13224:2;:8;13203:639;;;13275:1;13257:575;13283:1;13285;13283:3;13278:2;:8;13257:575;;;13315:21;13339:36;13351:4;13357:2;13361;13365;13369:5;13339:11;:36::i;:::-;228:3;13426:14;;13409:31;;-1:-1:-1;;;13409:31:9;13393:13;13477:14;;;:7;:14;;;;;;13315:60;;-1:-1:-1;13409:31:9;13513:13;;13509:229;;13554:16;13550:130;;13626:4;-1:-1:-1;;;;;13618:13:9;13606:8;:25;13598:59;;;;;-1:-1:-1;;;13598:59:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;13718:1;13701:14;;;:7;:14;;;;;:18;13509:229;13769:16;:33;;;-1:-1:-1;13789:13:9;;;13769:33;13768:49;;;;;13807:10;13768:49;13755:62;;13257:575;;;13294:1;13288:7;;;;13257:575;;;-1:-1:-1;13240:1:9;13234:7;13203:639;;;;13854:3;13851:501;;;13877:10;13873:401;;13936:15;;;;:7;:15;;;;;;-1:-1:-1;;;;;13955:13:9;;13936:32;;:135;;-1:-1:-1;;;;;;14058:13:9;;13992:7;:62;228:3;14032:2;14030:1;:4;;14390:1311;14489:4;228:3;14522:13;;14518:17;;-1:-1:-1;;;14562:16:9;;14606:4;14518:1;14620:641;14646:1;14648:2;14646:4;14641:2;:9;14620:641;;;14693:1;14675:576;14701:1;14703:2;14701:4;14696:2;:9;14675:576;;;14734:21;14758:36;14770:4;14776:2;14780;14784;14788:5;14758:11;:36::i;:::-;228:3;14845:14;;14828:31;;-1:-1:-1;;;14828:31:9;14812:13;14896:14;;;:7;:14;;;;;;14734:60;;-1:-1:-1;14828:31:9;14932:13;;14928:229;;14973:16;14969:130;;15045:4;-1:-1:-1;;;;;15037:13:9;15025:8;:25;15017:59;;;;;-1:-1:-1;;;15017:59:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;15137:1;15120:14;;;:7;:14;;;;;:18;14928:229;15188:16;:33;;;-1:-1:-1;15208:13:9;;;15188:33;15187:49;;;;;15226:10;15187:49;15174:62;;14675:576;;;14713:1;14707:7;;;;14675:576;;;-1:-1:-1;14658:1:9;14652:7;14620:641;;;;15273:3;15270:398;;;15296:10;15292:298;;15355:15;;;;:7;:15;;;;;;-1:-1:-1;;;;;15374:13:9;;15355:32;;:135;;-1:-1:-1;;;;;;15477:13:9;;15411:7;:62;228:3;15451:2;15449:1;:4;;15706:1265;15805:4;228:3;15838:13;;15834:17;;-1:-1:-1;;;15878:16:9;;15922:4;15834:1;15936:663;15962:1;15964:2;15962:4;15957:2;:9;15936:663;;;16010:1;15992:597;16018:1;16020:2;16018:4;16013:2;:9;15992:597;;;16052:21;16076:38;16090:4;16096:2;16100;16104;16108:5;16076:13;:38::i;:::-;228:3;16169:14;;16150:33;;-1:-1:-1;;;16150:33:9;16132:15;16222:16;;;:7;:16;;;;;;16052:62;;-1:-1:-1;16150:33:9;16260:15;;16256:237;;16303:16;16299:134;;16377:4;-1:-1:-1;;;;;16369:13:9;16355:10;:27;16347:63;;;;;-1:-1:-1;;;16347:63:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;16473:1;16454:16;;;:7;:16;;;;;:20;16256:237;16524:16;:35;;;-1:-1:-1;16544:15:9;;;16524:35;16523:51;;;;;16564:10;16523:51;16510:64;;15992:597;;;16030:2;16024:8;;;;15992:597;;;-1:-1:-1;15974:2:9;15968:8;15936:663;;;;16611:3;16608:294;;;16634:10;16630:194;;16693:15;;;;:7;:15;;;;;;-1:-1:-1;;;;;16712:13:9;;16693:32;16664:145;;;;-1:-1:-1;;;16664:145:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16608:294;16918:10;:46;;;-1:-1:-1;16932:15:9;;;;:7;:15;;;;;;-1:-1:-1;;;;;16951:13:9;;16932:32;16918:46;16911:53;15706:1265;-1:-1:-1;;;;;;;;;15706:1265:9:o;10971:287::-;11038:4;11070:11;;;:7;:11;;;;;;11095:10;;11091:139;;11147:4;-1:-1:-1;;;;;11129:22:9;11137:5;-1:-1:-1;;;;;11129:22:9;;11121:44;;;;;-1:-1:-1;;;11121:44:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11193:1:9;11179:11;;;:7;:11;;;;;:15;11215:4;11208:11;;11091:139;-1:-1:-1;11246:5:9;;10971:287;-1:-1:-1;;;10971:287:9:o

Swarm Source

bzzr://83895022ccd1f4731144230de229e76c02767e3161aeff679a637da2234bc09f
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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