ETH Price: $1,978.82 (-4.60%)

Contract

0x1A2bDBc30e64B4dc960E4c2f3A687D2DC479B8DF
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...131480572021-09-02 19:06:051646 days ago1630609565IN
0x1A2bDBc3...DC479B8DF
0 ETH0.00692265150.01966249
Mint128766372021-07-22 14:06:521688 days ago1626962812IN
0x1A2bDBc3...DC479B8DF
0 ETH0.005925624
Mint128765992021-07-22 13:59:451688 days ago1626962385IN
0x1A2bDBc3...DC479B8DF
0 ETH0.0056789723
Mint128765522021-07-22 13:49:291688 days ago1626961769IN
0x1A2bDBc3...DC479B8DF
0 ETH0.006172825
Mint128743232021-07-22 5:26:031688 days ago1626931563IN
0x1A2bDBc3...DC479B8DF
0 ETH0.0046913219
Mint128742832021-07-22 5:16:171688 days ago1626930977IN
0x1A2bDBc3...DC479B8DF
0 ETH0.0039505916
Mint128742302021-07-22 5:04:021688 days ago1626930242IN
0x1A2bDBc3...DC479B8DF
0 ETH0.0051851521
Mint128558342021-07-19 7:56:271691 days ago1626681387IN
0x1A2bDBc3...DC479B8DF
0 ETH0.0046913219
Mint128557472021-07-19 7:36:451691 days ago1626680205IN
0x1A2bDBc3...DC479B8DF
0 ETH0.0037036815
Set Approval For...128521292021-07-18 18:09:381692 days ago1626631778IN
0x1A2bDBc3...DC479B8DF
0 ETH0.0008767519
Mint128429982021-07-17 7:41:171693 days ago1626507677IN
0x1A2bDBc3...DC479B8DF
0 ETH0.0051851521
Mint128429712021-07-17 7:34:531693 days ago1626507293IN
0x1A2bDBc3...DC479B8DF
0 ETH0.0049375220
Mint128429262021-07-17 7:25:231693 days ago1626506723IN
0x1A2bDBc3...DC479B8DF
0 ETH0.0051851521
Mint128429162021-07-17 7:22:021693 days ago1626506522IN
0x1A2bDBc3...DC479B8DF
0 ETH0.0051851521
Mint128428812021-07-17 7:14:271693 days ago1626506067IN
0x1A2bDBc3...DC479B8DF
0 ETH0.0051851521
Mint128427962021-07-17 6:55:511693 days ago1626504951IN
0x1A2bDBc3...DC479B8DF
0 ETH0.0046913219
Mint128427862021-07-17 6:52:591693 days ago1626504779IN
0x1A2bDBc3...DC479B8DF
0 ETH0.0044444118
Mint128368292021-07-16 8:25:271694 days ago1626423927IN
0x1A2bDBc3...DC479B8DF
0 ETH0.007160129
Mint128365422021-07-16 7:21:151694 days ago1626420075IN
0x1A2bDBc3...DC479B8DF
0 ETH0.0051851521
Mint128363322021-07-16 6:32:301694 days ago1626417150IN
0x1A2bDBc3...DC479B8DF
0 ETH0.006172825
Mint128362582021-07-16 6:14:491694 days ago1626416089IN
0x1A2bDBc3...DC479B8DF
0 ETH0.005925624
Mint128362392021-07-16 6:11:281694 days ago1626415888IN
0x1A2bDBc3...DC479B8DF
0 ETH0.0059258824
Mint128362182021-07-16 6:04:301694 days ago1626415470IN
0x1A2bDBc3...DC479B8DF
0 ETH0.0069135328
Mint128361052021-07-16 5:38:411694 days ago1626413921IN
0x1A2bDBc3...DC479B8DF
0 ETH0.0051851521
Mint128360752021-07-16 5:32:371694 days ago1626413557IN
0x1A2bDBc3...DC479B8DF
0 ETH0.005184921
View all transactions

Latest 3 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
Safe Transfer Fr...128191072021-07-13 13:40:041697 days ago1626183604
0x1A2bDBc3...DC479B8DF
0 ETH
Get Creator128191072021-07-13 13:40:041697 days ago1626183604
0x1A2bDBc3...DC479B8DF
0 ETH
Royalty Fee128191072021-07-13 13:40:041697 days ago1626183604
0x1A2bDBc3...DC479B8DF
0 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

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

Contract Source Code Verified (Exact Match)

Contract Name:
AMENFT

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license
/**
 *Submitted for verification at Etherscan.io on 2021-07-08
*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.4;

library Strings {

    function toString(uint256 value) internal pure returns (string memory) {

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

library EnumerableMap {

    struct MapEntry {
        bytes32 _key;
        bytes32 _value;
    }

    struct Map {
        MapEntry[] _entries;

        mapping (bytes32 => uint256) _indexes;
    }

    function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) {
        uint256 keyIndex = map._indexes[key];

        if (keyIndex == 0) { // Equivalent to !contains(map, key)
            map._entries.push(MapEntry({ _key: key, _value: value }));
            map._indexes[key] = map._entries.length;
            return true;
        } else {
            map._entries[keyIndex - 1]._value = value;
            return false;
        }
    }

    function _remove(Map storage map, bytes32 key) private returns (bool) {
        uint256 keyIndex = map._indexes[key];

        if (keyIndex != 0) { // Equivalent to contains(map, key)
            uint256 toDeleteIndex = keyIndex - 1;
            uint256 lastIndex = map._entries.length - 1;
            MapEntry storage lastEntry = map._entries[lastIndex];

            map._entries[toDeleteIndex] = lastEntry;
            map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based

            map._entries.pop();

            delete map._indexes[key];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Map storage map, bytes32 key) private view returns (bool) {
        return map._indexes[key] != 0;
    }

    function _length(Map storage map) private view returns (uint256) {
        return map._entries.length;
    }

    function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) {
        require(map._entries.length > index, "EnumerableMap: index out of bounds");

        MapEntry storage entry = map._entries[index];
        return (entry._key, entry._value);
    }

    function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) {
        uint256 keyIndex = map._indexes[key];
        if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key)
        return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based
    }

    function _get(Map storage map, bytes32 key) private view returns (bytes32) {
        uint256 keyIndex = map._indexes[key];
        require(keyIndex != 0, "EnumerableMap: nonexistent key"); // Equivalent to contains(map, key)
        return map._entries[keyIndex - 1]._value; // All indexes are 1-based
    }

    function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) {
        uint256 keyIndex = map._indexes[key];
        require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key)
        return map._entries[keyIndex - 1]._value; // All indexes are 1-based
    }

    struct UintToAddressMap {
        Map _inner;
    }

    function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) {
        return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));
    }

    function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) {
        return _remove(map._inner, bytes32(key));
    }

    function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) {
        return _contains(map._inner, bytes32(key));
    }

    function length(UintToAddressMap storage map) internal view returns (uint256) {
        return _length(map._inner);
    }

    function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) {
        (bytes32 key, bytes32 value) = _at(map._inner, index);
        return (uint256(key), address(uint160(uint256(value))));
    }

    function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) {
        (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));
        return (success, address(uint160(uint256(value))));
    }

    function get(UintToAddressMap storage map, uint256 key) internal view returns (address) {
        return address(uint160(uint256(_get(map._inner, bytes32(key)))));
    }

    function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) {
        return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage))));
    }
}

library EnumerableSet {
    struct Set {
        bytes32[] _values;
        mapping (bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;
            bytes32 lastvalue = set._values[lastIndex];

            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

interface IERC165 {

    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */ 

    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC1155 is IERC165 {

    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
    event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);
    event URI(string value, uint256 indexed id);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function balanceOf(address account, uint256 id) external view returns (uint256);
    function royaltyFee(uint256 tokenId) external view returns(uint256);
    function getCreator(uint256 tokenId) external view returns(address);
    function tokenURI(uint256 tokenId) external view returns (string memory);
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);
    function setApprovalForAll(address operator, bool approved) external;
    function isApprovedForAll(address account, address operator) external view returns (bool);
    function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;
    function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
}

interface IERC1155MetadataURI is IERC1155 {
}

interface IERC1155Receiver is IERC165 {
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    )
        external
        returns(bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    )
        external
        returns(bytes4);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

contract ERC165 is IERC165 {
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor () {
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    function supportsInterface(bytes4 interfaceId) public view override returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    function _registerInterface(bytes4 interfaceId) internal virtual {
        require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
*/

library SafeMath {

    /**
    * @dev Adds two numbers, throws on overflow.
    */

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
    * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Multiplies two numbers, throws on overflow.
    */

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

    /**
    * @dev Integer modulo of two numbers, truncating the remainder.
    */

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {

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

contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using SafeMath for uint256;
    using Address for address;
    using Strings for uint256;
    using EnumerableMap for EnumerableMap.UintToAddressMap;

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

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

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

    EnumerableMap.UintToAddressMap private _tokenOwners;

    string private _name;

    string private _symbol;

    bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;

    bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;

    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;

        _registerInterface(_INTERFACE_ID_ERC1155);
        _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
        * @dev Internal function to set the token URI for a given token.
        * Reverts if the token ID does not exist.
        * @param tokenId uint256 ID of the token to set its URI
        * @param uri string URI to assign
    */    

    function _setTokenURI(uint256 tokenId, string memory uri) public {
        _tokenURIs[tokenId] = uri;
    }

    /**
        @notice Get the royalty associated with tokenID.
        @param tokenId     ID of the Token.
        @return        royaltyFee of given ID.
     */

    function royaltyFee(uint256 tokenId) public view override returns(uint256) {
        return _royaltyFee[tokenId];
    }

    /**
        @notice Get the creator of given tokenID.
        @param tokenId     ID of the Token.
        @return        creator of given ID.
     */    

    function getCreator(uint256 tokenId) public view virtual override returns(address) {
        return creators[tokenId];
    }

    /**
        * @dev Internal function to set the token URI for all the tokens.
        * @param _tokenURIPrefix string memory _tokenURIPrefix of the tokens.
    */   

    function _setTokenURIPrefix(string memory _tokenURIPrefix) public {
        tokenURIPrefix = _tokenURIPrefix;
    }

    /**
        * @dev Returns an URI for a given token ID.
        * Throws if the token ID does not exist. May return an empty string.
        * @param tokenId uint256 ID of the token to query
    */    

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC1155Metadata: URI query for nonexistent token");
        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = tokenURIPrefix;

        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }
        return string(abi.encodePacked(base, tokenId.toString()));
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _tokenOwners.contains(tokenId);
    }

    /**
        @notice Get the balance of an account's Tokens.
        @param account  The address of the token holder
        @param tokenId     ID of the Token
        @return        The owner's balance of the Token type requested
     */

    function balanceOf(address account, uint256 tokenId) public view override returns (uint256) {
        require(_exists(tokenId), "ERC1155Metadata: balance query for nonexistent token");
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[tokenId][account];
    }


    /**
        @notice Get the balance of multiple account/token pairs
        @param accounts The addresses of the token holders
        @param ids    ID of the Tokens
        @return        The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair)
     */

    function balanceOfBatch(
        address[] memory accounts,
        uint256[] memory ids
    )
        public
        view
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

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

        for (uint256 i = 0; i < accounts.length; ++i) {
            require(accounts[i] != address(0), "ERC1155: batch balance query for the zero address");
            batchBalances[i] = _balances[ids[i]][accounts[i]];
        }

        return batchBalances;
    }

    /**
        @notice Enable or disable approval for a third party ("operator") to manage all of the caller's tokens.
        @dev MUST emit the ApprovalForAll event on success.
        @param operator  Address to add to the set of authorized operators
        @param approved  True if the operator is approved, false to revoke approval
    */

    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

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

    /**
        @notice Queries the approval status of an operator for a given owner.
        @param account     The owner of the Tokens
        @param operator  Address of authorized operator
        @return           True if the operator is approved, false if not
    */

    function isApprovedForAll(address account, address operator) public view override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    /**
        @notice Transfers `_value` amount of an `_id` from the `_from` address to the `_to` address specified (with safety call).
        @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
        MUST revert if `_to` is the zero address.
        MUST revert if balance of holder for token `_id` is lower than the `_value` sent.
        MUST revert on any other error.
        MUST emit the `TransferSingle` event to reflect the balance change (see "Safe Transfer Rules" section of the standard).
        After the above conditions are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call `onERC1155Received` on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
        @param from    Source address
        @param to      Target address
        @param tokenId      ID of the token type
        @param amount   Transfer amount
        @param data    Additional data with no specified format, MUST be sent unaltered in call to `onERC1155Received` on `_to`
    */    

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        uint256 amount,
        bytes memory data
    )
        public
        virtual
        override
    {
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        address operator = _msgSender();

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

        _balances[tokenId][from] = _balances[tokenId][from].sub(amount, "ERC1155: insufficient balance for transfer");
        _balances[tokenId][to] = _balances[tokenId][to].add(amount);

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

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

    /**
        @notice Transfers `_values` amount(s) of `_ids` from the `_from` address to the `_to` address specified (with safety call).
        @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
        MUST revert if `_to` is the zero address.
        MUST revert if length of `_ids` is not the same as length of `_values`.
        MUST revert if any of the balance(s) of the holder(s) for token(s) in `_ids` is lower than the respective amount(s) in `_values` sent to the recipient.
        MUST revert on any other error.
        MUST emit `TransferSingle` or `TransferBatch` event(s) such that all the balance changes are reflected (see "Safe Transfer Rules" section of the standard).
        Balance changes and events MUST follow the ordering of the arrays (_ids[0]/_values[0] before _ids[1]/_values[1], etc).
        After the above conditions for the transfer(s) in the batch are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call the relevant `ERC1155TokenReceiver` hook(s) on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
        @param from    Source address
        @param to      Target address
        @param tokenIds     IDs of each token type (order and length must match _values array)
        @param amounts  Transfer amounts per token type (order and length must match _ids array)
        @param data    Additional data with no specified format, MUST be sent unaltered in call to the `ERC1155TokenReceiver` hook(s) on `_to`
    */

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory tokenIds,
        uint256[] memory amounts,
        bytes memory data
    )
        public
        virtual
        override
    {
        require(tokenIds.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );

        address operator = _msgSender();

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

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

            _balances[tokenId][from] = _balances[tokenId][from].sub(
                amount,
                "ERC1155: insufficient balance for transfer"
            );
            _balances[tokenId][to] = _balances[tokenId][to].add(amount);
        }

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

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



    /**
        * @dev Internal function to mint a new token.
        * Reverts if the given token ID already exists.
        * @param tokenId uint256 ID of the token to be minted
        * @param _supply uint256 supply of the token to be minted
        * @param _uri string memory URI of the token to be minted
        * @param _fee uint256 royalty of the token to be minted
    */

    function _mint(uint256 tokenId, uint256 _supply, string memory _uri, uint256 _fee) internal {
        require(!_exists(tokenId), "ERC1155: token already minted");
        require(_supply != 0, "Supply should be positive");
        require(bytes(_uri).length > 0, "uri should be set");

        creators[tokenId] = msg.sender;
        _tokenOwners.set(tokenId, msg.sender);
        _royaltyFee[tokenId] = _fee;
        _balances[tokenId][msg.sender] = _supply;
        _setTokenURI(tokenId, _uri);

        emit TransferSingle(msg.sender, address(0x0), msg.sender, tokenId, _supply);
        emit URI(_uri, tokenId);
    }

    /**
        * @dev version of {_mint}.
        *
        * Requirements:
        *
        * - `tokenIds` and `amounts` must have the same length.
    */

    function _mintBatch(address to, uint256[] memory tokenIds, uint256[] memory amounts, bytes memory data) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(tokenIds.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

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

        for (uint i = 0; i < tokenIds.length; i++) {
            _balances[tokenIds[i]][to] = amounts[i].add(_balances[tokenIds[i]][to]);
        }

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

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

    /**
        * @dev Internal function to burn a specific token.
        * Reverts if the token does not exist.
        * Deprecated, use {ERC721-_burn} instead.
        * @param account owner of the token to burn
        * @param tokenId uint256 ID of the token being burned
        * @param amount uint256 amount of supply being burned
    */    

    function _burn(address account, uint256 tokenId, uint256 amount) internal virtual {
        require(_exists(tokenId), "ERC1155Metadata: burn query for nonexistent token");
        require(account != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

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

        _balances[tokenId][account] = _balances[tokenId][account].sub(
            amount,
            "ERC_holderTokens1155: burn amount exceeds balance"
        );


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


    /**
        * @dev version of {_burn}.
        * Requirements:
        * - `ids` and `amounts` must have the same length.
    */

    function _burnBatch(address account, uint256[] memory tokenIds, uint256[] memory amounts) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");
        require(tokenIds.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

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

        for (uint i = 0; i < tokenIds.length; i++) {
            _balances[tokenIds[i]][account] = _balances[tokenIds[i]][account].sub(
                amounts[i],
                "ERC1155: burn amount exceeds balance"
            );
        }

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


    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory tokenIds,
        uint256[] memory amounts,
        bytes memory data
    )
        internal virtual
    { }

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

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

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

        return array;
    }
}

contract AMENFT is ERC1155 {

    uint256 newItemId = 1;
    address public owner;

    struct Sign {
        uint8 v;
        bytes32 r;
        bytes32 s;
    }

    constructor (string memory name, string memory symbol, string memory tokenURIPrefix) ERC1155 (name, symbol) {
        owner = msg.sender;
        _setTokenURIPrefix(tokenURIPrefix);

    }

    modifier onlyOwner() {
        require(owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    /** @dev change the Ownership from current owner to newOwner address
        @param newOwner : newOwner address */    

    function ownerTransfership(address newOwner) public onlyOwner returns(bool){
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        owner = newOwner;
        return true;
    }

    /** @dev verify the tokenURI that should be verified by owner of the contract.
        *requirements: signer must be owner of the contract
        @param tokenURI string memory URI of token to be minted.
        @param sign struct combination of uint8, bytes32, bytes 32 are v, r, s.
        note : sign value must be in the order of v, r, s.

    */

    function verifySign(string memory tokenURI, Sign memory sign) internal view {
        bytes32 hash = keccak256(abi.encodePacked(this,tokenURI));
        require(owner == ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)), sign.v, sign.r, sign.s), "Owner sign verification failed");
    }

    function mint(string memory uri, uint256 supply, uint256 fee, Sign memory sign)  public {
        verifySign(uri, sign);
        _mint(newItemId, supply, uri,fee);
        newItemId = newItemId+1;
    }

    function burn(uint256 tokenId, uint256 supply) public {
        _burn(msg.sender, tokenId, supply);
    }

    function burnBatch(address account, uint256[] memory tokenIds, uint256[] memory amounts) public {
        _burnBatch(account, tokenIds, amounts);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"tokenURIPrefix","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"_setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURIPrefix","type":"string"}],"name":"_setTokenURIPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getCreator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct AMENFT.Sign","name":"sign","type":"tuple"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"ownerTransfership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"royaltyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenURIPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040526001600b553480156200001657600080fd5b5060405162002b5b38038062002b5b8339810160408190526200003991620002bb565b82826200004d6301ffc9a760e01b620000c5565b81516200006290600990602085019062000162565b5080516200007890600a90602084019062000162565b506200008b636cdb3d1360e11b620000c5565b6200009d6303a24d0760e21b620000c5565b5050600c80546001600160a01b03191633179055620000bc8162000149565b5050506200039b565b6001600160e01b03198082161415620001245760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b80516200015e90600590602084019062000162565b5050565b828054620001709062000348565b90600052602060002090601f016020900481019282620001945760008555620001df565b82601f10620001af57805160ff1916838001178555620001df565b82800160010185558215620001df579182015b82811115620001df578251825591602001919060010190620001c2565b50620001ed929150620001f1565b5090565b5b80821115620001ed5760008155600101620001f2565b600082601f83011262000219578081fd5b81516001600160401b038082111562000236576200023662000385565b604051601f8301601f19908116603f0116810190828211818310171562000261576200026162000385565b816040528381526020925086838588010111156200027d578485fd5b8491505b83821015620002a0578582018301518183018401529082019062000281565b83821115620002b157848385830101525b9695505050505050565b600080600060608486031215620002d0578283fd5b83516001600160401b0380821115620002e7578485fd5b620002f58783880162000208565b945060208601519150808211156200030b578384fd5b620003198783880162000208565b935060408601519150808211156200032f578283fd5b506200033e8682870162000208565b9150509250925092565b600181811c908216806200035d57607f821691505b602082108114156200037f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6127b080620003ab6000396000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c806395d89b41116100ad578063c87b56dd11610071578063c87b56dd146102aa578063ca1daf88146102bd578063d48e638a146102d0578063e985e9c5146102f9578063f242432a1461033557600080fd5b806395d89b4114610254578063a22cb4651461025c578063b390c0ab1461026f578063c0ac998314610282578063c57dc2351461028a57600080fd5b80633f564508116100f45780633f564508146101d05780634e1273f4146101e35780636b20c454146102035780636fdc202f146102165780638da5cb5b1461022957600080fd5b8062fdd58e14610130578063015388681461015657806301ffc9a71461016b57806306fdde03146101a85780632eb2c2d6146101bd575b600080fd5b61014361013e366004611f50565b610348565b6040519081526020015b60405180910390f35b610169610164366004612160565b610453565b005b610198610179366004612043565b6001600160e01b03191660009081526020819052604090205460ff1690565b604051901515815260200161014d565b6101b0610477565b60405161014d919061236c565b6101696101cb366004611d9f565b610509565b6101696101de36600461207b565b610778565b6101f66101f1366004611f79565b61078f565b60405161014d919061232b565b610169610211366004611ea6565b6109c1565b610198610224366004611d53565b6109cc565b600c5461023c906001600160a01b031681565b6040516001600160a01b03909116815260200161014d565b6101b0610ab2565b61016961026a366004611f16565b610ac1565b61016961027d36600461219a565b610b98565b6101b0610ba3565b610143610298366004612148565b60009081526002602052604090205490565b6101b06102b8366004612148565b610c31565b6101696102cb3660046120ad565b610e27565b61023c6102de366004612148565b6000908152600160205260409020546001600160a01b031690565b610198610307366004611d6d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b610169610343366004611e44565b610e56565b600061035382611009565b6103c15760405162461bcd60e51b815260206004820152603460248201527f455243313135354d657461646174613a2062616c616e6365207175657279206660448201527337b9103737b732bc34b9ba32b73a103a37b5b2b760611b60648201526084015b60405180910390fd5b6001600160a01b03831661042b5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084016103b8565b5060009081526003602090815260408083206001600160a01b03949094168352929052205490565b6000828152600660209081526040909120825161047292840190611bc1565b505050565b60606009805461048690612544565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290612544565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b815183511461052a5760405162461bcd60e51b81526004016103b89061244f565b6001600160a01b0384166105505760405162461bcd60e51b81526004016103b8906123c7565b6001600160a01b03851633148061056c575061056c8533610307565b6105d35760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016103b8565b3360005b845181101561070a57600085828151811061060257634e487b7160e01b600052603260045260246000fd5b60200260200101519050600085838151811061062e57634e487b7160e01b600052603260045260246000fd5b6020026020010151905061069b816040518060600160405280602a8152602001612720602a91396003600086815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000205461101c9092919063ffffffff16565b60008381526003602090815260408083206001600160a01b038e811685529252808320939093558a16815220546106d29082611058565b60009283526003602090815260408085206001600160a01b038c1686529091529092209190915550610703816125d0565b90506105d7565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161075a92919061233e565b60405180910390a46107708187878787876110b7565b505050505050565b805161078b906005906020840190611bc1565b5050565b606081518351146107f45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016103b8565b600083516001600160401b0381111561081d57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610846578160200160208202803683370190505b50905060005b84518110156109b95760006001600160a01b031685828151811061088057634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156108f95760405162461bcd60e51b815260206004820152603160248201527f455243313135353a2062617463682062616c616e636520717565727920666f7260448201527020746865207a65726f206164647265737360781b60648201526084016103b8565b6003600085838151811061091d57634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600086838151811061095557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061099e57634e487b7160e01b600052603260045260246000fd5b60209081029190910101526109b2816125d0565b905061084c565b509392505050565b61047283838361122b565b600c546000906001600160a01b03163314610a295760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b8565b6001600160a01b038216610a8e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b8565b50600c80546001600160a01b0319166001600160a01b03831617905560015b919050565b6060600a805461048690612544565b336001600160a01b0383161415610b2c5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016103b8565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61078b338383611413565b60058054610bb090612544565b80601f0160208091040260200160405190810160405280929190818152602001828054610bdc90612544565b8015610c295780601f10610bfe57610100808354040283529160200191610c29565b820191906000526020600020905b815481529060010190602001808311610c0c57829003601f168201915b505050505081565b6060610c3c82611009565b610ca15760405162461bcd60e51b815260206004820152603060248201527f455243313135354d657461646174613a2055524920717565727920666f72206e60448201526f37b732bc34b9ba32b73a103a37b5b2b760811b60648201526084016103b8565b60008281526006602052604081208054610cba90612544565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce690612544565b8015610d335780601f10610d0857610100808354040283529160200191610d33565b820191906000526020600020905b815481529060010190602001808311610d1657829003601f168201915b50505050509050600060058054610d4990612544565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7590612544565b8015610dc25780601f10610d9757610100808354040283529160200191610dc2565b820191906000526020600020905b815481529060010190602001808311610da557829003601f168201915b50505050509050805160001415610dda575092915050565b815115610e0c578082604051602001610df4929190612259565b60405160208183030381529060405292505050919050565b80610e1685611580565b604051602001610df4929190612259565b610e3184826116b2565b610e3f600b548486856117f3565b600b54610e4d9060016124ba565b600b5550505050565b6001600160a01b038416610e7c5760405162461bcd60e51b81526004016103b8906123c7565b6001600160a01b038516331480610e985750610e988533610307565b610ef65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016103b8565b33610f16818787610f06886119b9565b610f0f886119b9565b5050505050565b610f5d836040518060600160405280602a8152602001612720602a913960008781526003602090815260408083206001600160a01b038d168452909152902054919061101c565b60008581526003602090815260408083206001600160a01b038b81168552925280832093909355871681522054610f949084611058565b60008581526003602090815260408083206001600160a01b038a811680865291845293829020949094558051888152918201879052898316928516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610770818787878787611a12565b6000611016600783611adc565b92915050565b600081848411156110405760405162461bcd60e51b81526004016103b8919061236c565b50600061104d84866124e6565b9150505b9392505050565b60008061106583856124ba565b9050838110156110515760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016103b8565b6001600160a01b0384163b156107705760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906110fb9089908990889088908890600401612288565b602060405180830381600087803b15801561111557600080fd5b505af1925050508015611145575060408051601f3d908101601f191682019092526111429181019061205f565b60015b6111f257611151612641565b806308c379a0141561118b5750611166612659565b80611171575061118d565b8060405162461bcd60e51b81526004016103b8919061236c565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016103b8565b6001600160e01b0319811663bc197c8160e01b146112225760405162461bcd60e51b81526004016103b89061237f565b50505050505050565b6001600160a01b0383166112515760405162461bcd60e51b81526004016103b89061240c565b80518251146112725760405162461bcd60e51b81526004016103b89061244f565b604080516020810190915260009081905233905b83518110156113b4576113408382815181106112b257634e487b7160e01b600052603260045260246000fd5b60200260200101516040518060600160405280602481526020016126fc60249139600360008886815181106112f757634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b031681526020019081526020016000205461101c9092919063ffffffff16565b6003600086848151811061136457634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b031681526020019081526020016000208190555080806113ac906125d0565b915050611286565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161140592919061233e565b60405180910390a450505050565b61141c82611009565b6114825760405162461bcd60e51b815260206004820152603160248201527f455243313135354d657461646174613a206275726e20717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b60648201526084016103b8565b6001600160a01b0383166114a85760405162461bcd60e51b81526004016103b89061240c565b336114d8818560006114b9876119b9565b6114c2876119b9565b5050604080516020810190915260009052505050565b61151f8260405180606001604052806031815260200161274a6031913960008681526003602090815260408083206001600160a01b038b168452909152902054919061101c565b60008481526003602090815260408083206001600160a01b0389811680865291845282852095909555815188815292830187905292938516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629101611405565b6060816115a45750506040805180820190915260018152600360fc1b602082015290565b8160005b81156115ce57806115b8816125d0565b91506115c79050600a836124d2565b91506115a8565b6000816001600160401b038111156115f657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611620576020820181803683370190505b50905060006116306001846124e6565b90508593505b83156116a957611647600a856125eb565b6116529060306124ba565b60f81b82826116608161252d565b93508151811061168057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506116a2600a856124d2565b9350611636565b50949350505050565b600030836040516020016116c7929190612221565b60405160208183030381529060405280519060200120905060018160405160200161171e91907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f19818403018152828252805160209182012086518783015188850151600087529386018086529290925260ff16928401929092526060830191909152608082015260a0016020604051602081039080840390855afa15801561178a573d6000803e3d6000fd5b5050604051601f190151600c546001600160a01b0390811691161490506104725760405162461bcd60e51b815260206004820152601e60248201527f4f776e6572207369676e20766572696669636174696f6e206661696c6564000060448201526064016103b8565b6117fc84611009565b156118495760405162461bcd60e51b815260206004820152601d60248201527f455243313135353a20746f6b656e20616c7265616479206d696e74656400000060448201526064016103b8565b826118965760405162461bcd60e51b815260206004820152601960248201527f537570706c792073686f756c6420626520706f7369746976650000000000000060448201526064016103b8565b60008251116118db5760405162461bcd60e51b81526020600482015260116024820152701d5c9a481cda1bdd5b19081899481cd95d607a1b60448201526064016103b8565b600084815260016020526040902080546001600160a01b0319163390811790915561190a906007908690611af4565b50600084815260026020908152604080832084905560038252808320338452909152902083905561193b8483610453565b6040805185815260208101859052339160009183917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4837f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b836040516119ab919061236c565b60405180910390a250505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611a0157634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b156107705760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611a5690899089908890889088906004016122e6565b602060405180830381600087803b158015611a7057600080fd5b505af1925050508015611aa0575060408051601f3d908101601f19168201909252611a9d9181019061205f565b60015b611aac57611151612641565b6001600160e01b0319811663f23a6e6160e01b146112225760405162461bcd60e51b81526004016103b89061237f565b60008181526001830160205260408120541515611051565b6000611b0a84846001600160a01b038516611b12565b949350505050565b600082815260018401602052604081205480611b77575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611051565b8285611b846001846124e6565b81548110611ba257634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101819055506000915050611051565b828054611bcd90612544565b90600052602060002090601f016020900481019282611bef5760008555611c35565b82601f10611c0857805160ff1916838001178555611c35565b82800160010185558215611c35579182015b82811115611c35578251825591602001919060010190611c1a565b50611c41929150611c45565b5090565b5b80821115611c415760008155600101611c46565b80356001600160a01b0381168114610aad57600080fd5b600082601f830112611c81578081fd5b81356020611c8e82612497565b604051611c9b82826125a4565b8381528281019150858301600585901b87018401881015611cba578586fd5b855b85811015611cd857813584529284019290840190600101611cbc565b5090979650505050505050565b600082601f830112611cf5578081fd5b81356001600160401b03811115611d0e57611d0e61262b565b604051611d25601f8301601f1916602001826125a4565b818152846020838601011115611d39578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611d64578081fd5b61105182611c5a565b60008060408385031215611d7f578081fd5b611d8883611c5a565b9150611d9660208401611c5a565b90509250929050565b600080600080600060a08688031215611db6578081fd5b611dbf86611c5a565b9450611dcd60208701611c5a565b935060408601356001600160401b0380821115611de8578283fd5b611df489838a01611c71565b94506060880135915080821115611e09578283fd5b611e1589838a01611c71565b93506080880135915080821115611e2a578283fd5b50611e3788828901611ce5565b9150509295509295909350565b600080600080600060a08688031215611e5b578081fd5b611e6486611c5a565b9450611e7260208701611c5a565b9350604086013592506060860135915060808601356001600160401b03811115611e9a578182fd5b611e3788828901611ce5565b600080600060608486031215611eba578283fd5b611ec384611c5a565b925060208401356001600160401b0380821115611ede578384fd5b611eea87838801611c71565b93506040860135915080821115611eff578283fd5b50611f0c86828701611c71565b9150509250925092565b60008060408385031215611f28578182fd5b611f3183611c5a565b915060208301358015158114611f45578182fd5b809150509250929050565b60008060408385031215611f62578182fd5b611f6b83611c5a565b946020939093013593505050565b60008060408385031215611f8b578182fd5b82356001600160401b0380821115611fa1578384fd5b818501915085601f830112611fb4578384fd5b81356020611fc182612497565b604051611fce82826125a4565b8381528281019150858301600585901b870184018b1015611fed578889fd5b8896505b848710156120165761200281611c5a565b835260019690960195918301918301611ff1565b509650508601359250508082111561202c578283fd5b5061203985828601611c71565b9150509250929050565b600060208284031215612054578081fd5b8135611051816126e2565b600060208284031215612070578081fd5b8151611051816126e2565b60006020828403121561208c578081fd5b81356001600160401b038111156120a1578182fd5b611b0a84828501611ce5565b60008060008084860360c08112156120c3578283fd5b85356001600160401b038111156120d8578384fd5b6120e488828901611ce5565b95505060208601359350604086013592506060605f1982011215612106578182fd5b506040516121138161257f565b606086013560ff81168114612126578283fd5b81526080860135602082015260a0909501356040860152509194909350909190565b600060208284031215612159578081fd5b5035919050565b60008060408385031215612172578182fd5b8235915060208301356001600160401b0381111561218e578182fd5b61203985828601611ce5565b600080604083850312156121ac578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156121ea578151875295820195908201906001016121ce565b509495945050505050565b6000815180845261220d8160208601602086016124fd565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff198360601b1681526000825161224b8160148501602087016124fd565b919091016014019392505050565b6000835161226b8184602088016124fd565b83519083019061227f8183602088016124fd565b01949350505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906122b4908301866121bb565b82810360608401526122c681866121bb565b905082810360808401526122da81856121f5565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612320908301846121f5565b979650505050505050565b60208152600061105160208301846121bb565b60408152600061235160408301856121bb565b828103602084015261236381856121bb565b95945050505050565b60208152600061105160208301846121f5565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60006001600160401b038211156124b0576124b061262b565b5060051b60200190565b600082198211156124cd576124cd6125ff565b500190565b6000826124e1576124e1612615565b500490565b6000828210156124f8576124f86125ff565b500390565b60005b83811015612518578181015183820152602001612500565b83811115612527576000848401525b50505050565b60008161253c5761253c6125ff565b506000190190565b600181811c9082168061255857607f821691505b6020821081141561257957634e487b7160e01b600052602260045260246000fd5b50919050565b606081018181106001600160401b038211171561259e5761259e61262b565b60405250565b601f8201601f191681016001600160401b03811182821017156125c9576125c961262b565b6040525050565b60006000198214156125e4576125e46125ff565b5060010190565b6000826125fa576125fa612615565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561265657600481823e5160e01c5b90565b600060443d10156126675790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561269657505050505090565b82850191508151818111156126ae5750505050505090565b843d87010160208285010111156126c85750505050505090565b6126d7602082860101876125a4565b509095945050505050565b6001600160e01b0319811681146126f857600080fd5b5056fe455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724552435f686f6c646572546f6b656e73313135353a206275726e20616d6f756e7420657863656564732062616c616e6365a2646970667358221220f13a1fe5106584553da9d55a78f1da640192912173624b6e18c06edec653ca9c64736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000007414d45204e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006414d454e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061012b5760003560e01c806395d89b41116100ad578063c87b56dd11610071578063c87b56dd146102aa578063ca1daf88146102bd578063d48e638a146102d0578063e985e9c5146102f9578063f242432a1461033557600080fd5b806395d89b4114610254578063a22cb4651461025c578063b390c0ab1461026f578063c0ac998314610282578063c57dc2351461028a57600080fd5b80633f564508116100f45780633f564508146101d05780634e1273f4146101e35780636b20c454146102035780636fdc202f146102165780638da5cb5b1461022957600080fd5b8062fdd58e14610130578063015388681461015657806301ffc9a71461016b57806306fdde03146101a85780632eb2c2d6146101bd575b600080fd5b61014361013e366004611f50565b610348565b6040519081526020015b60405180910390f35b610169610164366004612160565b610453565b005b610198610179366004612043565b6001600160e01b03191660009081526020819052604090205460ff1690565b604051901515815260200161014d565b6101b0610477565b60405161014d919061236c565b6101696101cb366004611d9f565b610509565b6101696101de36600461207b565b610778565b6101f66101f1366004611f79565b61078f565b60405161014d919061232b565b610169610211366004611ea6565b6109c1565b610198610224366004611d53565b6109cc565b600c5461023c906001600160a01b031681565b6040516001600160a01b03909116815260200161014d565b6101b0610ab2565b61016961026a366004611f16565b610ac1565b61016961027d36600461219a565b610b98565b6101b0610ba3565b610143610298366004612148565b60009081526002602052604090205490565b6101b06102b8366004612148565b610c31565b6101696102cb3660046120ad565b610e27565b61023c6102de366004612148565b6000908152600160205260409020546001600160a01b031690565b610198610307366004611d6d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b610169610343366004611e44565b610e56565b600061035382611009565b6103c15760405162461bcd60e51b815260206004820152603460248201527f455243313135354d657461646174613a2062616c616e6365207175657279206660448201527337b9103737b732bc34b9ba32b73a103a37b5b2b760611b60648201526084015b60405180910390fd5b6001600160a01b03831661042b5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084016103b8565b5060009081526003602090815260408083206001600160a01b03949094168352929052205490565b6000828152600660209081526040909120825161047292840190611bc1565b505050565b60606009805461048690612544565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290612544565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b815183511461052a5760405162461bcd60e51b81526004016103b89061244f565b6001600160a01b0384166105505760405162461bcd60e51b81526004016103b8906123c7565b6001600160a01b03851633148061056c575061056c8533610307565b6105d35760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016103b8565b3360005b845181101561070a57600085828151811061060257634e487b7160e01b600052603260045260246000fd5b60200260200101519050600085838151811061062e57634e487b7160e01b600052603260045260246000fd5b6020026020010151905061069b816040518060600160405280602a8152602001612720602a91396003600086815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000205461101c9092919063ffffffff16565b60008381526003602090815260408083206001600160a01b038e811685529252808320939093558a16815220546106d29082611058565b60009283526003602090815260408085206001600160a01b038c1686529091529092209190915550610703816125d0565b90506105d7565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161075a92919061233e565b60405180910390a46107708187878787876110b7565b505050505050565b805161078b906005906020840190611bc1565b5050565b606081518351146107f45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016103b8565b600083516001600160401b0381111561081d57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610846578160200160208202803683370190505b50905060005b84518110156109b95760006001600160a01b031685828151811061088057634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156108f95760405162461bcd60e51b815260206004820152603160248201527f455243313135353a2062617463682062616c616e636520717565727920666f7260448201527020746865207a65726f206164647265737360781b60648201526084016103b8565b6003600085838151811061091d57634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600086838151811061095557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061099e57634e487b7160e01b600052603260045260246000fd5b60209081029190910101526109b2816125d0565b905061084c565b509392505050565b61047283838361122b565b600c546000906001600160a01b03163314610a295760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b8565b6001600160a01b038216610a8e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b8565b50600c80546001600160a01b0319166001600160a01b03831617905560015b919050565b6060600a805461048690612544565b336001600160a01b0383161415610b2c5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016103b8565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61078b338383611413565b60058054610bb090612544565b80601f0160208091040260200160405190810160405280929190818152602001828054610bdc90612544565b8015610c295780601f10610bfe57610100808354040283529160200191610c29565b820191906000526020600020905b815481529060010190602001808311610c0c57829003601f168201915b505050505081565b6060610c3c82611009565b610ca15760405162461bcd60e51b815260206004820152603060248201527f455243313135354d657461646174613a2055524920717565727920666f72206e60448201526f37b732bc34b9ba32b73a103a37b5b2b760811b60648201526084016103b8565b60008281526006602052604081208054610cba90612544565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce690612544565b8015610d335780601f10610d0857610100808354040283529160200191610d33565b820191906000526020600020905b815481529060010190602001808311610d1657829003601f168201915b50505050509050600060058054610d4990612544565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7590612544565b8015610dc25780601f10610d9757610100808354040283529160200191610dc2565b820191906000526020600020905b815481529060010190602001808311610da557829003601f168201915b50505050509050805160001415610dda575092915050565b815115610e0c578082604051602001610df4929190612259565b60405160208183030381529060405292505050919050565b80610e1685611580565b604051602001610df4929190612259565b610e3184826116b2565b610e3f600b548486856117f3565b600b54610e4d9060016124ba565b600b5550505050565b6001600160a01b038416610e7c5760405162461bcd60e51b81526004016103b8906123c7565b6001600160a01b038516331480610e985750610e988533610307565b610ef65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016103b8565b33610f16818787610f06886119b9565b610f0f886119b9565b5050505050565b610f5d836040518060600160405280602a8152602001612720602a913960008781526003602090815260408083206001600160a01b038d168452909152902054919061101c565b60008581526003602090815260408083206001600160a01b038b81168552925280832093909355871681522054610f949084611058565b60008581526003602090815260408083206001600160a01b038a811680865291845293829020949094558051888152918201879052898316928516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610770818787878787611a12565b6000611016600783611adc565b92915050565b600081848411156110405760405162461bcd60e51b81526004016103b8919061236c565b50600061104d84866124e6565b9150505b9392505050565b60008061106583856124ba565b9050838110156110515760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016103b8565b6001600160a01b0384163b156107705760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906110fb9089908990889088908890600401612288565b602060405180830381600087803b15801561111557600080fd5b505af1925050508015611145575060408051601f3d908101601f191682019092526111429181019061205f565b60015b6111f257611151612641565b806308c379a0141561118b5750611166612659565b80611171575061118d565b8060405162461bcd60e51b81526004016103b8919061236c565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016103b8565b6001600160e01b0319811663bc197c8160e01b146112225760405162461bcd60e51b81526004016103b89061237f565b50505050505050565b6001600160a01b0383166112515760405162461bcd60e51b81526004016103b89061240c565b80518251146112725760405162461bcd60e51b81526004016103b89061244f565b604080516020810190915260009081905233905b83518110156113b4576113408382815181106112b257634e487b7160e01b600052603260045260246000fd5b60200260200101516040518060600160405280602481526020016126fc60249139600360008886815181106112f757634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b031681526020019081526020016000205461101c9092919063ffffffff16565b6003600086848151811061136457634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b031681526020019081526020016000208190555080806113ac906125d0565b915050611286565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161140592919061233e565b60405180910390a450505050565b61141c82611009565b6114825760405162461bcd60e51b815260206004820152603160248201527f455243313135354d657461646174613a206275726e20717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b60648201526084016103b8565b6001600160a01b0383166114a85760405162461bcd60e51b81526004016103b89061240c565b336114d8818560006114b9876119b9565b6114c2876119b9565b5050604080516020810190915260009052505050565b61151f8260405180606001604052806031815260200161274a6031913960008681526003602090815260408083206001600160a01b038b168452909152902054919061101c565b60008481526003602090815260408083206001600160a01b0389811680865291845282852095909555815188815292830187905292938516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629101611405565b6060816115a45750506040805180820190915260018152600360fc1b602082015290565b8160005b81156115ce57806115b8816125d0565b91506115c79050600a836124d2565b91506115a8565b6000816001600160401b038111156115f657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611620576020820181803683370190505b50905060006116306001846124e6565b90508593505b83156116a957611647600a856125eb565b6116529060306124ba565b60f81b82826116608161252d565b93508151811061168057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506116a2600a856124d2565b9350611636565b50949350505050565b600030836040516020016116c7929190612221565b60405160208183030381529060405280519060200120905060018160405160200161171e91907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f19818403018152828252805160209182012086518783015188850151600087529386018086529290925260ff16928401929092526060830191909152608082015260a0016020604051602081039080840390855afa15801561178a573d6000803e3d6000fd5b5050604051601f190151600c546001600160a01b0390811691161490506104725760405162461bcd60e51b815260206004820152601e60248201527f4f776e6572207369676e20766572696669636174696f6e206661696c6564000060448201526064016103b8565b6117fc84611009565b156118495760405162461bcd60e51b815260206004820152601d60248201527f455243313135353a20746f6b656e20616c7265616479206d696e74656400000060448201526064016103b8565b826118965760405162461bcd60e51b815260206004820152601960248201527f537570706c792073686f756c6420626520706f7369746976650000000000000060448201526064016103b8565b60008251116118db5760405162461bcd60e51b81526020600482015260116024820152701d5c9a481cda1bdd5b19081899481cd95d607a1b60448201526064016103b8565b600084815260016020526040902080546001600160a01b0319163390811790915561190a906007908690611af4565b50600084815260026020908152604080832084905560038252808320338452909152902083905561193b8483610453565b6040805185815260208101859052339160009183917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4837f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b836040516119ab919061236c565b60405180910390a250505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611a0157634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b156107705760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611a5690899089908890889088906004016122e6565b602060405180830381600087803b158015611a7057600080fd5b505af1925050508015611aa0575060408051601f3d908101601f19168201909252611a9d9181019061205f565b60015b611aac57611151612641565b6001600160e01b0319811663f23a6e6160e01b146112225760405162461bcd60e51b81526004016103b89061237f565b60008181526001830160205260408120541515611051565b6000611b0a84846001600160a01b038516611b12565b949350505050565b600082815260018401602052604081205480611b77575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611051565b8285611b846001846124e6565b81548110611ba257634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101819055506000915050611051565b828054611bcd90612544565b90600052602060002090601f016020900481019282611bef5760008555611c35565b82601f10611c0857805160ff1916838001178555611c35565b82800160010185558215611c35579182015b82811115611c35578251825591602001919060010190611c1a565b50611c41929150611c45565b5090565b5b80821115611c415760008155600101611c46565b80356001600160a01b0381168114610aad57600080fd5b600082601f830112611c81578081fd5b81356020611c8e82612497565b604051611c9b82826125a4565b8381528281019150858301600585901b87018401881015611cba578586fd5b855b85811015611cd857813584529284019290840190600101611cbc565b5090979650505050505050565b600082601f830112611cf5578081fd5b81356001600160401b03811115611d0e57611d0e61262b565b604051611d25601f8301601f1916602001826125a4565b818152846020838601011115611d39578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611d64578081fd5b61105182611c5a565b60008060408385031215611d7f578081fd5b611d8883611c5a565b9150611d9660208401611c5a565b90509250929050565b600080600080600060a08688031215611db6578081fd5b611dbf86611c5a565b9450611dcd60208701611c5a565b935060408601356001600160401b0380821115611de8578283fd5b611df489838a01611c71565b94506060880135915080821115611e09578283fd5b611e1589838a01611c71565b93506080880135915080821115611e2a578283fd5b50611e3788828901611ce5565b9150509295509295909350565b600080600080600060a08688031215611e5b578081fd5b611e6486611c5a565b9450611e7260208701611c5a565b9350604086013592506060860135915060808601356001600160401b03811115611e9a578182fd5b611e3788828901611ce5565b600080600060608486031215611eba578283fd5b611ec384611c5a565b925060208401356001600160401b0380821115611ede578384fd5b611eea87838801611c71565b93506040860135915080821115611eff578283fd5b50611f0c86828701611c71565b9150509250925092565b60008060408385031215611f28578182fd5b611f3183611c5a565b915060208301358015158114611f45578182fd5b809150509250929050565b60008060408385031215611f62578182fd5b611f6b83611c5a565b946020939093013593505050565b60008060408385031215611f8b578182fd5b82356001600160401b0380821115611fa1578384fd5b818501915085601f830112611fb4578384fd5b81356020611fc182612497565b604051611fce82826125a4565b8381528281019150858301600585901b870184018b1015611fed578889fd5b8896505b848710156120165761200281611c5a565b835260019690960195918301918301611ff1565b509650508601359250508082111561202c578283fd5b5061203985828601611c71565b9150509250929050565b600060208284031215612054578081fd5b8135611051816126e2565b600060208284031215612070578081fd5b8151611051816126e2565b60006020828403121561208c578081fd5b81356001600160401b038111156120a1578182fd5b611b0a84828501611ce5565b60008060008084860360c08112156120c3578283fd5b85356001600160401b038111156120d8578384fd5b6120e488828901611ce5565b95505060208601359350604086013592506060605f1982011215612106578182fd5b506040516121138161257f565b606086013560ff81168114612126578283fd5b81526080860135602082015260a0909501356040860152509194909350909190565b600060208284031215612159578081fd5b5035919050565b60008060408385031215612172578182fd5b8235915060208301356001600160401b0381111561218e578182fd5b61203985828601611ce5565b600080604083850312156121ac578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156121ea578151875295820195908201906001016121ce565b509495945050505050565b6000815180845261220d8160208601602086016124fd565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff198360601b1681526000825161224b8160148501602087016124fd565b919091016014019392505050565b6000835161226b8184602088016124fd565b83519083019061227f8183602088016124fd565b01949350505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906122b4908301866121bb565b82810360608401526122c681866121bb565b905082810360808401526122da81856121f5565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612320908301846121f5565b979650505050505050565b60208152600061105160208301846121bb565b60408152600061235160408301856121bb565b828103602084015261236381856121bb565b95945050505050565b60208152600061105160208301846121f5565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60006001600160401b038211156124b0576124b061262b565b5060051b60200190565b600082198211156124cd576124cd6125ff565b500190565b6000826124e1576124e1612615565b500490565b6000828210156124f8576124f86125ff565b500390565b60005b83811015612518578181015183820152602001612500565b83811115612527576000848401525b50505050565b60008161253c5761253c6125ff565b506000190190565b600181811c9082168061255857607f821691505b6020821081141561257957634e487b7160e01b600052602260045260246000fd5b50919050565b606081018181106001600160401b038211171561259e5761259e61262b565b60405250565b601f8201601f191681016001600160401b03811182821017156125c9576125c961262b565b6040525050565b60006000198214156125e4576125e46125ff565b5060010190565b6000826125fa576125fa612615565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561265657600481823e5160e01c5b90565b600060443d10156126675790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561269657505050505090565b82850191508151818111156126ae5750505050505090565b843d87010160208285010111156126c85750505050505090565b6126d7602082860101876125a4565b509095945050505050565b6001600160e01b0319811681146126f857600080fd5b5056fe455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724552435f686f6c646572546f6b656e73313135353a206275726e20616d6f756e7420657863656564732062616c616e6365a2646970667358221220f13a1fe5106584553da9d55a78f1da640192912173624b6e18c06edec653ca9c64736f6c63430008040033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000007414d45204e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006414d454e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): AME NFT
Arg [1] : symbol (string): AMENFT
Arg [2] : tokenURIPrefix (string): https://gateway.pinata.cloud/ipfs/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 414d45204e465400000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 414d454e46540000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000022
Arg [8] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [9] : 732f000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

33972:2030:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20538:325;;;;;;:::i;:::-;;:::i;:::-;;;22601:25:1;;;22589:2;22574:18;20538:325:0;;;;;;;;18359:109;;;;;;:::i;:::-;;:::i;:::-;;12109:142;;;;;;:::i;:::-;-1:-1:-1;;;;;;12210:33:0;12186:4;12210:33;;;;;;;;;;;;;;12109:142;;;;13476:14:1;;13469:22;13451:41;;13439:2;13424:18;12109:142:0;13406:92:1;17883:100:0;;;:::i;:::-;;;;;;;:::i;26707:1280::-;;;;;;:::i;:::-;;:::i;19251:117::-;;;;;;:::i;:::-;;:::i;21173:634::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;35846:153::-;;;;;;:::i;:::-;;:::i;34602:216::-;;;;;;:::i;:::-;;:::i;34036:20::-;;;;;-1:-1:-1;;;;;34036:20:0;;;;;;-1:-1:-1;;;;;11135:32:1;;;11117:51;;11105:2;11090:18;34036:20:0;11072:102:1;17991:104:0;;;:::i;22169:311::-;;;;;;:::i;:::-;;:::i;35731:107::-;;;;;;:::i;:::-;;:::i;17241:28::-;;;:::i;18647:121::-;;;;;;:::i;:::-;18713:7;18740:20;;;:11;:20;;;;;;;18647:121;19589:556;;;;;;:::i;:::-;;:::i;35517:206::-;;;;;;:::i;:::-;;:::i;18941:126::-;;;;;;:::i;:::-;19015:7;19042:17;;;:8;:17;;;;;;-1:-1:-1;;;;;19042:17:0;;18941:126;22769:160;;;;;;:::i;:::-;-1:-1:-1;;;;;22884:27:0;;;22860:4;22884:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;22769:160;24092:964;;;;;;:::i;:::-;;:::i;20538:325::-;20621:7;20649:16;20657:7;20649;:16::i;:::-;20641:81;;;;-1:-1:-1;;;20641:81:0;;18767:2:1;20641:81:0;;;18749:21:1;18806:2;18786:18;;;18779:30;18845:34;18825:18;;;18818:62;-1:-1:-1;;;18896:18:1;;;18889:50;18956:19;;20641:81:0;;;;;;;;;-1:-1:-1;;;;;20741:21:0;;20733:77;;;;-1:-1:-1;;;20733:77:0;;15162:2:1;20733:77:0;;;15144:21:1;15201:2;15181:18;;;15174:30;15240:34;15220:18;;;15213:62;-1:-1:-1;;;15291:18:1;;;15284:41;15342:19;;20733:77:0;15134:233:1;20733:77:0;-1:-1:-1;20828:18:0;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;20828:27:0;;;;;;;;;;;;20538:325::o;18359:109::-;18435:19;;;;:10;:19;;;;;;;;:25;;;;;;;;:::i;:::-;;18359:109;;:::o;17883:100::-;17937:13;17970:5;17963:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17883:100;:::o;26707:1280::-;26982:7;:14;26963:8;:15;:33;26955:86;;;;-1:-1:-1;;;26955:86:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27060:16:0;;27052:66;;;;-1:-1:-1;;;27052:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27151:20:0;;11601:10;27151:20;;:60;;-1:-1:-1;27175:36:0;27192:4;11601:10;22769:160;:::i;27175:36::-;27129:160;;;;-1:-1:-1;;;27129:160:0;;17989:2:1;27129:160:0;;;17971:21:1;18028:2;18008:18;;;18001:30;18067:34;18047:18;;;18040:62;-1:-1:-1;;;18118:18:1;;;18111:48;18176:19;;27129:160:0;17961:240:1;27129:160:0;11601:10;27302:16;27424:393;27448:8;:15;27444:1;:19;27424:393;;;27485:15;27503:8;27512:1;27503:11;;;;;;-1:-1:-1;;;27503:11:0;;;;;;;;;;;;;;;27485:29;;27529:14;27546:7;27554:1;27546:10;;;;;;-1:-1:-1;;;27546:10:0;;;;;;;;;;;;;;;27529:27;;27600:131;27647:6;27600:131;;;;;;;;;;;;;;;;;:9;:18;27610:7;27600:18;;;;;;;;;;;:24;27619:4;-1:-1:-1;;;;;27600:24:0;-1:-1:-1;;;;;27600:24:0;;;;;;;;;;;;;:28;;:131;;;;;:::i;:::-;27573:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;27573:24:0;;;;;;;;;;:158;;;;27771:22;;;;;;:34;;27798:6;27771:26;:34::i;:::-;27746:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;27746:22:0;;;;;;;;;;:59;;;;-1:-1:-1;27465:3:0;;;:::i;:::-;;;27424:393;;;;27864:2;-1:-1:-1;;;;;27834:52:0;27858:4;-1:-1:-1;;;;;27834:52:0;27848:8;-1:-1:-1;;;;;27834:52:0;;27868:8;27878:7;27834:52;;;;;;;:::i;:::-;;;;;;;;27899:80;27935:8;27945:4;27951:2;27955:8;27965:7;27974:4;27899:35;:80::i;:::-;26707:1280;;;;;;:::o;19251:117::-;19328:32;;;;:14;;:32;;;;;:::i;:::-;;19251:117;:::o;21173:634::-;21337:16;21398:3;:10;21379:8;:15;:29;21371:83;;;;-1:-1:-1;;;21371:83:0;;21134:2:1;21371:83:0;;;21116:21:1;21173:2;21153:18;;;21146:30;21212:34;21192:18;;;21185:62;-1:-1:-1;;;21263:18:1;;;21256:39;21312:19;;21371:83:0;21106:231:1;21371:83:0;21467:30;21514:8;:15;-1:-1:-1;;;;;21500:30:0;;;;;-1:-1:-1;;;21500:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21500:30:0;;21467:63;;21548:9;21543:224;21567:8;:15;21563:1;:19;21543:224;;;21635:1;-1:-1:-1;;;;;21612:25:0;:8;21621:1;21612:11;;;;;;-1:-1:-1;;;21612:11:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21612:25:0;;;21604:87;;;;-1:-1:-1;;;21604:87:0;;15574:2:1;21604:87:0;;;15556:21:1;15613:2;15593:18;;;15586:30;15652:34;15632:18;;;15625:62;-1:-1:-1;;;15703:18:1;;;15696:47;15760:19;;21604:87:0;15546:239:1;21604:87:0;21725:9;:17;21735:3;21739:1;21735:6;;;;;;-1:-1:-1;;;21735:6:0;;;;;;;;;;;;;;;21725:17;;;;;;;;;;;:30;21743:8;21752:1;21743:11;;;;;;-1:-1:-1;;;21743:11:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21725:30:0;-1:-1:-1;;;;;21725:30:0;;;;;;;;;;;;;21706:13;21720:1;21706:16;;;;;;-1:-1:-1;;;21706:16:0;;;;;;;;;;;;;;;;;;:49;21584:3;;;:::i;:::-;;;21543:224;;;-1:-1:-1;21786:13:0;21173:634;-1:-1:-1;;;21173:634:0:o;35846:153::-;35953:38;35964:7;35973:8;35983:7;35953:10;:38::i;34602:216::-;34391:5;;34672:4;;-1:-1:-1;;;;;34391:5:0;34400:10;34391:19;34383:64;;;;-1:-1:-1;;;34383:64:0;;19592:2:1;34383:64:0;;;19574:21:1;;;19611:18;;;19604:30;19670:34;19650:18;;;19643:62;19722:18;;34383:64:0;19564:182:1;34383:64:0;-1:-1:-1;;;;;34696:22:0;::::1;34688:73;;;::::0;-1:-1:-1;;;34688:73:0;;15992:2:1;34688:73:0::1;::::0;::::1;15974:21:1::0;16031:2;16011:18;;;16004:30;16070:34;16050:18;;;16043:62;-1:-1:-1;;;16121:18:1;;;16114:36;16167:19;;34688:73:0::1;15964:228:1::0;34688:73:0::1;-1:-1:-1::0;34772:5:0::1;:16:::0;;-1:-1:-1;;;;;;34772:16:0::1;-1:-1:-1::0;;;;;34772:16:0;::::1;;::::0;;-1:-1:-1;34458:1:0::1;34602:216:::0;;;:::o;17991:104::-;18047:13;18080:7;18073:14;;;;;:::i;22169:311::-;11601:10;-1:-1:-1;;;;;22272:24:0;;;;22264:78;;;;-1:-1:-1;;;22264:78:0;;20724:2:1;22264:78:0;;;20706:21:1;20763:2;20743:18;;;20736:30;20802:34;20782:18;;;20775:62;-1:-1:-1;;;20853:18:1;;;20846:39;20902:19;;22264:78:0;20696:231:1;22264:78:0;11601:10;22355:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;22355:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;22355:53:0;;;;;;;;;;22424:48;;13451:41:1;;;22355:42:0;;11601:10;22424:48;;13424:18:1;22424:48:0;;;;;;;22169:311;;:::o;35731:107::-;35796:34;35802:10;35814:7;35823:6;35796:5;:34::i;17241:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19589:556::-;19662:13;19696:16;19704:7;19696;:16::i;:::-;19688:77;;;;-1:-1:-1;;;19688:77:0;;19953:2:1;19688:77:0;;;19935:21:1;19992:2;19972:18;;;19965:30;20031:34;20011:18;;;20004:62;-1:-1:-1;;;20082:18:1;;;20075:46;20138:19;;19688:77:0;19925:238:1;19688:77:0;19776:23;19802:19;;;:10;:19;;;;;19776:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19832:18;19853:14;19832:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19890:4;19884:18;19906:1;19884:23;19880:72;;;-1:-1:-1;19931:9:0;19589:556;-1:-1:-1;;19589:556:0:o;19880:72::-;19966:23;;:27;19962:108;;20041:4;20047:9;20024:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20010:48;;;;19589:556;;;:::o;19962:108::-;20111:4;20117:18;:7;:16;:18::i;:::-;20094:42;;;;;;;;;:::i;35517:206::-;35616:21;35627:3;35632:4;35616:10;:21::i;:::-;35648:33;35654:9;;35665:6;35673:3;35677;35648:5;:33::i;:::-;35704:9;;:11;;35714:1;35704:11;:::i;:::-;35692:9;:23;-1:-1:-1;;;;35517:206:0:o;24092:964::-;-1:-1:-1;;;;;24323:16:0;;24315:66;;;;-1:-1:-1;;;24315:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24414:20:0;;11601:10;24414:20;;:60;;-1:-1:-1;24438:36:0;24455:4;11601:10;22769:160;:::i;24438:36::-;24392:151;;;;-1:-1:-1;;;24392:151:0;;16755:2:1;24392:151:0;;;16737:21:1;16794:2;16774:18;;;16767:30;16833:34;16813:18;;;16806:62;-1:-1:-1;;;16884:18:1;;;16877:39;16933:19;;24392:151:0;16727:231:1;24392:151:0;11601:10;24600:101;11601:10;24631:4;24637:2;24641:26;24659:7;24641:17;:26::i;:::-;24669:25;24687:6;24669:17;:25::i;:::-;26707:1280;;;;;;24600:101;24741:82;24770:6;24741:82;;;;;;;;;;;;;;;;;:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;24741:24:0;;;;;;;;;;;:82;:28;:82::i;:::-;24714:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;24714:24:0;;;;;;;;;;:109;;;;24859:22;;;;;;:34;;24886:6;24859:26;:34::i;:::-;24834:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;24834:22:0;;;;;;;;;;;;;:59;;;;24911:51;;22811:25:1;;;22852:18;;;22845:34;;;24911:51:0;;;;;;;;;22784:18:1;24911:51:0;;;;;;;24975:73;25006:8;25016:4;25022:2;25026:7;25035:6;25043:4;24975:30;:73::i;20153:127::-;20218:4;20242:30;:12;20264:7;20242:21;:30::i;:::-;20235:37;20153:127;-1:-1:-1;;20153:127:0:o;13109:192::-;13195:7;13231:12;13223:6;;;;13215:29;;;;-1:-1:-1;;;13215:29:0;;;;;;;;:::i;:::-;-1:-1:-1;13255:9:0;13267:5;13271:1;13267;:5;:::i;:::-;13255:17;-1:-1:-1;;13109:192:0;;;;;;:::o;12657:181::-;12715:7;;12747:5;12751:1;12747;:5;:::i;:::-;12735:17;;12776:1;12771;:6;;12763:46;;;;-1:-1:-1;;;12763:46:0;;16399:2:1;12763:46:0;;;16381:21:1;16438:2;16418:18;;;16411:30;16477:29;16457:18;;;16450:57;16524:18;;12763:46:0;16371:177:1;32950:809:0;-1:-1:-1;;;;;33209:13:0;;14611:20;14650:8;33205:547;;33245:84;;-1:-1:-1;;;33245:84:0;;-1:-1:-1;;;;;33245:43:0;;;;;:84;;33289:8;;33299:4;;33305:8;;33315:7;;33324:4;;33245:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33245:84:0;;;;;;;;-1:-1:-1;;33245:84:0;;;;;;;;;;;;:::i;:::-;;;33241:500;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33614:6;33607:14;;-1:-1:-1;;;33607:14:0;;;;;;;;:::i;33241:500::-;;;33663:62;;-1:-1:-1;;;33663:62:0;;14332:2:1;33663:62:0;;;14314:21:1;14371:2;14351:18;;;14344:30;14410:34;14390:18;;;14383:62;-1:-1:-1;;;14461:18:1;;;14454:50;14521:19;;33663:62:0;14304:242:1;33241:500:0;-1:-1:-1;;;;;;33379:64:0;;-1:-1:-1;;;33379:64:0;33375:163;;33468:50;;-1:-1:-1;;;33468:50:0;;;;;;;:::i;33375:163::-;33330:223;32950:809;;;;;;:::o;31155:756::-;-1:-1:-1;;;;;31281:21:0;;31273:69;;;;-1:-1:-1;;;31273:69:0;;;;;;;:::i;:::-;31380:7;:14;31361:8;:15;:33;31353:86;;;;-1:-1:-1;;;31353:86:0;;;;;;;:::i;:::-;31496:74;;;;;;;;;31452:16;31496:74;;;;11601:10;;31583:240;31604:8;:15;31600:1;:19;31583:240;;;31675:136;31729:7;31737:1;31729:10;;;;;;-1:-1:-1;;;31729:10:0;;;;;;;;;;;;;;;31675:136;;;;;;;;;;;;;;;;;:9;:22;31685:8;31694:1;31685:11;;;;;;-1:-1:-1;;;31685:11:0;;;;;;;;;;;;;;;31675:22;;;;;;;;;;;:31;31698:7;-1:-1:-1;;;;;31675:31:0;-1:-1:-1;;;;;31675:31:0;;;;;;;;;;;;;:35;;:136;;;;;:::i;:::-;31641:9;:22;31651:8;31660:1;31651:11;;;;;;-1:-1:-1;;;31651:11:0;;;;;;;;;;;;;;;31641:22;;;;;;;;;;;:31;31664:7;-1:-1:-1;;;;;31641:31:0;-1:-1:-1;;;;;31641:31:0;;;;;;;;;;;;:170;;;;31621:3;;;;;:::i;:::-;;;;31583:240;;;;31881:1;-1:-1:-1;;;;;31840:63:0;31864:7;-1:-1:-1;;;;;31840:63:0;31854:8;-1:-1:-1;;;;;31840:63:0;;31885:8;31895:7;31840:63;;;;;;;:::i;:::-;;;;;;;;31155:756;;;;:::o;30325:680::-;30426:16;30434:7;30426;:16::i;:::-;30418:78;;;;-1:-1:-1;;;30418:78:0;;17165:2:1;30418:78:0;;;17147:21:1;17204:2;17184:18;;;17177:30;17243:34;17223:18;;;17216:62;-1:-1:-1;;;17294:18:1;;;17287:47;17351:19;;30418:78:0;17137:239:1;30418:78:0;-1:-1:-1;;;;;30515:21:0;;30507:69;;;;-1:-1:-1;;;30507:69:0;;;;;;;:::i;:::-;11601:10;30633:110;11601:10;30664:7;30589:16;30685:26;30703:7;30685:17;:26::i;:::-;30713:25;30731:6;30713:17;:25::i;:::-;-1:-1:-1;;30633:110:0;;;;;;;;;-1:-1:-1;30633:110:0;;-1:-1:-1;;;26707:1280:0;30633:110;30786:129;30832:6;30786:129;;;;;;;;;;;;;;;;;:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;30786:27:0;;;;;;;;;;;:129;:31;:129::i;:::-;30756:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;30756:27:0;;;;;;;;;;;;:159;;;;30935:62;;22811:25:1;;;22852:18;;;22845:34;;;30756:18:0;;30935:62;;;;;22784:18:1;30935:62:0;22766:119:1;92:557:0;148:13;180:10;176:53;;-1:-1:-1;;207:10:0;;;;;;;;;;;;-1:-1:-1;;;207:10:0;;;;;92:557::o;176:53::-;254:5;239:12;295:78;302:9;;295:78;;328:8;;;;:::i;:::-;;-1:-1:-1;351:10:0;;-1:-1:-1;359:2:0;351:10;;:::i;:::-;;;295:78;;;383:19;415:6;-1:-1:-1;;;;;405:17:0;;;;;-1:-1:-1;;;405:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;405:17:0;-1:-1:-1;383:39:0;-1:-1:-1;433:13:0;449:10;458:1;449:6;:10;:::i;:::-;433:26;;477:5;470:12;;493:117;500:9;;493:117;;562:9;569:2;562:4;:9;:::i;:::-;557:14;;:2;:14;:::i;:::-;544:29;;526:6;533:7;;;;:::i;:::-;;;526:15;;;;;;-1:-1:-1;;;526:15:0;;;;;;;;;;;;:47;-1:-1:-1;;;;;526:47:0;;;;;;;;-1:-1:-1;588:10:0;596:2;588:10;;:::i;:::-;;;493:117;;;-1:-1:-1;634:6:0;92:557;-1:-1:-1;;;;92:557:0:o;35190:319::-;35277:12;35319:4;35324:8;35302:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35292:42;;;;;;35277:57;;35362:104;35435:4;35382:58;;;;;;;10828:66:1;10816:79;;10920:2;10911:12;;10904:28;;;;10957:2;10948:12;;10806:160;35382:58:0;;;;-1:-1:-1;;35382:58:0;;;;;;;;;35372:69;;35382:58;35372:69;;;;35443:6;;35451;;;;35459;;;;35443;35362:104;;;;;;;;13730:25:1;;;;13803:4;13791:17;13771:18;;;13764:45;;;;13825:18;;;13818:34;;;;13868:18;;;13861:34;13702:19;;35362:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35362:104:0;;-1:-1:-1;;35362:104:0;;35353:5;;-1:-1:-1;;;;;35353:5:0;;;:113;;;;-1:-1:-1;35345:156:0;;;;-1:-1:-1;;;35345:156:0;;18408:2:1;35345:156:0;;;18390:21:1;18447:2;18427:18;;;18420:30;18486:32;18466:18;;;18459:60;18536:18;;35345:156:0;18380:180:1;28392:634:0;28504:16;28512:7;28504;:16::i;:::-;28503:17;28495:59;;;;-1:-1:-1;;;28495:59:0;;21953:2:1;28495:59:0;;;21935:21:1;21992:2;21972:18;;;21965:30;22031:31;22011:18;;;22004:59;22080:18;;28495:59:0;21925:179:1;28495:59:0;28573:12;28565:50;;;;-1:-1:-1;;;28565:50:0;;20370:2:1;28565:50:0;;;20352:21:1;20409:2;20389:18;;;20382:30;20448:27;20428:18;;;20421:55;20493:18;;28565:50:0;20342:175:1;28565:50:0;28655:1;28640:4;28634:18;:22;28626:52;;;;-1:-1:-1;;;28626:52:0;;22311:2:1;28626:52:0;;;22293:21:1;22350:2;22330:18;;;22323:30;-1:-1:-1;;;22369:18:1;;;22362:47;22426:18;;28626:52:0;22283:167:1;28626:52:0;28691:17;;;;:8;:17;;;;;:30;;-1:-1:-1;;;;;;28691:30:0;28711:10;28691:30;;;;;;28732:37;;:12;;28700:7;;28732:16;:37::i;:::-;-1:-1:-1;28780:20:0;;;;:11;:20;;;;;;;;:27;;;28818:9;:18;;;;;28837:10;28818:30;;;;;;;:40;;;28869:27;28792:7;28891:4;28869:12;:27::i;:::-;28914:70;;;22811:25:1;;;22867:2;22852:18;;22845:34;;;28955:10:0;;28949:3;;28955:10;;28914:70;;22784:18:1;28914:70:0;;;;;;;29010:7;29000:18;29004:4;29000:18;;;;;;:::i;:::-;;;;;;;;28392:634;;;;:::o;33767:198::-;33887:16;;;33901:1;33887:16;;;;;;;;;33833;;33862:22;;33887:16;;;;;;;;;;;;-1:-1:-1;33887:16:0;33862:41;;33925:7;33914:5;33920:1;33914:8;;;;;;-1:-1:-1;;;33914:8:0;;;;;;;;;;;;;;;;;;:18;33952:5;33767:198;-1:-1:-1;;33767:198:0:o;32170:772::-;-1:-1:-1;;;;;32404:13:0;;14611:20;14650:8;32400:535;;32440:77;;-1:-1:-1;;;32440:77:0;;-1:-1:-1;;;;;32440:38:0;;;;;:77;;32479:8;;32489:4;;32495:7;;32504:6;;32512:4;;32440:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32440:77:0;;;;;;;;-1:-1:-1;;32440:77:0;;;;;;;;;;;;:::i;:::-;;;32436:488;;;;:::i;:::-;-1:-1:-1;;;;;;32567:59:0;;-1:-1:-1;;;32567:59:0;32563:158;;32651:50;;-1:-1:-1;;;32651:50:0;;;;;;;:::i;3939:151::-;4023:4;2130:17;;;:12;;;:17;;;;;;:22;;4047:35;2035:125;3596:185;3685:4;3709:64;3714:3;3734;-1:-1:-1;;;;;3748:23:0;;3709:4;:64::i;:::-;3702:71;3596:185;-1:-1:-1;;;;3596:185:0:o;874:470::-;950:4;986:17;;;:12;;;:17;;;;;;1020:13;1016:321;;-1:-1:-1;;1105:38:0;;;;;;;;;;;;;;;;;;1087:57;;;;;;;;:12;:57;;;;;;;;;;;;;;;;;;;;;;;;1179:19;;1159:17;;;:12;;;:17;;;;;;;:39;1213:11;;1016:321;1293:5;1257:3;1270:12;1281:1;1270:8;:12;:::i;:::-;1257:26;;;;;;-1:-1:-1;;;1257:26:0;;;;;;;;;;;;;;;;;;;:33;;:41;;;;1320:5;1313:12;;;;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;192:755;246:5;299:3;292:4;284:6;280:17;276:27;266:2;;321:5;314;307:20;266:2;361:6;348:20;387:4;410:43;450:2;410:43;:::i;:::-;482:2;476:9;494:31;522:2;514:6;494:31;:::i;:::-;560:18;;;594:15;;;;-1:-1:-1;629:15:1;;;679:1;675:10;;;663:23;;659:32;;656:41;-1:-1:-1;653:2:1;;;714:5;707;700:20;653:2;740:5;754:163;768:2;765:1;762:9;754:163;;;825:17;;813:30;;863:12;;;;895;;;;786:1;779:9;754:163;;;-1:-1:-1;935:6:1;;256:691;-1:-1:-1;;;;;;;256:691:1:o;952:575::-;994:5;1047:3;1040:4;1032:6;1028:17;1024:27;1014:2;;1069:5;1062;1055:20;1014:2;1109:6;1096:20;-1:-1:-1;;;;;1131:2:1;1128:26;1125:2;;;1157:18;;:::i;:::-;1206:2;1200:9;1218:67;1273:2;1254:13;;-1:-1:-1;;1250:27:1;1279:4;1246:38;1200:9;1218:67;:::i;:::-;1309:2;1301:6;1294:18;1355:3;1348:4;1343:2;1335:6;1331:15;1327:26;1324:35;1321:2;;;1376:5;1369;1362:20;1321:2;1444;1437:4;1429:6;1425:17;1418:4;1410:6;1406:17;1393:54;1467:15;;;1484:4;1463:26;1456:41;;;;1471:6;1004:523;-1:-1:-1;;1004:523:1:o;1532:196::-;1591:6;1644:2;1632:9;1623:7;1619:23;1615:32;1612:2;;;1665:6;1657;1650:22;1612:2;1693:29;1712:9;1693:29;:::i;1733:270::-;1801:6;1809;1862:2;1850:9;1841:7;1837:23;1833:32;1830:2;;;1883:6;1875;1868:22;1830:2;1911:29;1930:9;1911:29;:::i;:::-;1901:39;;1959:38;1993:2;1982:9;1978:18;1959:38;:::i;:::-;1949:48;;1820:183;;;;;:::o;2008:983::-;2162:6;2170;2178;2186;2194;2247:3;2235:9;2226:7;2222:23;2218:33;2215:2;;;2269:6;2261;2254:22;2215:2;2297:29;2316:9;2297:29;:::i;:::-;2287:39;;2345:38;2379:2;2368:9;2364:18;2345:38;:::i;:::-;2335:48;;2434:2;2423:9;2419:18;2406:32;-1:-1:-1;;;;;2498:2:1;2490:6;2487:14;2484:2;;;2519:6;2511;2504:22;2484:2;2547:61;2600:7;2591:6;2580:9;2576:22;2547:61;:::i;:::-;2537:71;;2661:2;2650:9;2646:18;2633:32;2617:48;;2690:2;2680:8;2677:16;2674:2;;;2711:6;2703;2696:22;2674:2;2739:63;2794:7;2783:8;2772:9;2768:24;2739:63;:::i;:::-;2729:73;;2855:3;2844:9;2840:19;2827:33;2811:49;;2885:2;2875:8;2872:16;2869:2;;;2906:6;2898;2891:22;2869:2;;2934:51;2977:7;2966:8;2955:9;2951:24;2934:51;:::i;:::-;2924:61;;;2205:786;;;;;;;;:::o;2996:626::-;3100:6;3108;3116;3124;3132;3185:3;3173:9;3164:7;3160:23;3156:33;3153:2;;;3207:6;3199;3192:22;3153:2;3235:29;3254:9;3235:29;:::i;:::-;3225:39;;3283:38;3317:2;3306:9;3302:18;3283:38;:::i;:::-;3273:48;;3368:2;3357:9;3353:18;3340:32;3330:42;;3419:2;3408:9;3404:18;3391:32;3381:42;;3474:3;3463:9;3459:19;3446:33;-1:-1:-1;;;;;3494:6:1;3491:30;3488:2;;;3539:6;3531;3524:22;3488:2;3567:49;3608:7;3599:6;3588:9;3584:22;3567:49;:::i;3627:699::-;3754:6;3762;3770;3823:2;3811:9;3802:7;3798:23;3794:32;3791:2;;;3844:6;3836;3829:22;3791:2;3872:29;3891:9;3872:29;:::i;:::-;3862:39;;3952:2;3941:9;3937:18;3924:32;-1:-1:-1;;;;;4016:2:1;4008:6;4005:14;4002:2;;;4037:6;4029;4022:22;4002:2;4065:61;4118:7;4109:6;4098:9;4094:22;4065:61;:::i;:::-;4055:71;;4179:2;4168:9;4164:18;4151:32;4135:48;;4208:2;4198:8;4195:16;4192:2;;;4229:6;4221;4214:22;4192:2;;4257:63;4312:7;4301:8;4290:9;4286:24;4257:63;:::i;:::-;4247:73;;;3781:545;;;;;:::o;4331:367::-;4396:6;4404;4457:2;4445:9;4436:7;4432:23;4428:32;4425:2;;;4478:6;4470;4463:22;4425:2;4506:29;4525:9;4506:29;:::i;:::-;4496:39;;4585:2;4574:9;4570:18;4557:32;4632:5;4625:13;4618:21;4611:5;4608:32;4598:2;;4659:6;4651;4644:22;4598:2;4687:5;4677:15;;;4415:283;;;;;:::o;4703:264::-;4771:6;4779;4832:2;4820:9;4811:7;4807:23;4803:32;4800:2;;;4853:6;4845;4838:22;4800:2;4881:29;4900:9;4881:29;:::i;:::-;4871:39;4957:2;4942:18;;;;4929:32;;-1:-1:-1;;;4790:177:1:o;4972:1274::-;5090:6;5098;5151:2;5139:9;5130:7;5126:23;5122:32;5119:2;;;5172:6;5164;5157:22;5119:2;5217:9;5204:23;-1:-1:-1;;;;;5287:2:1;5279:6;5276:14;5273:2;;;5308:6;5300;5293:22;5273:2;5351:6;5340:9;5336:22;5326:32;;5396:7;5389:4;5385:2;5381:13;5377:27;5367:2;;5423:6;5415;5408:22;5367:2;5464;5451:16;5486:4;5509:43;5549:2;5509:43;:::i;:::-;5581:2;5575:9;5593:31;5621:2;5613:6;5593:31;:::i;:::-;5659:18;;;5693:15;;;;-1:-1:-1;5728:11:1;;;5770:1;5766:10;;;5758:19;;5754:28;;5751:41;-1:-1:-1;5748:2:1;;;5810:6;5802;5795:22;5748:2;5837:6;5828:15;;5852:169;5866:2;5863:1;5860:9;5852:169;;;5923:23;5942:3;5923:23;:::i;:::-;5911:36;;5884:1;5877:9;;;;;5967:12;;;;5999;;5852:169;;;-1:-1:-1;6040:6:1;-1:-1:-1;;6084:18:1;;6071:32;;-1:-1:-1;;6115:16:1;;;6112:2;;;6149:6;6141;6134:22;6112:2;;6177:63;6232:7;6221:8;6210:9;6206:24;6177:63;:::i;:::-;6167:73;;;5109:1137;;;;;:::o;6251:255::-;6309:6;6362:2;6350:9;6341:7;6337:23;6333:32;6330:2;;;6383:6;6375;6368:22;6330:2;6427:9;6414:23;6446:30;6470:5;6446:30;:::i;6511:259::-;6580:6;6633:2;6621:9;6612:7;6608:23;6604:32;6601:2;;;6654:6;6646;6639:22;6601:2;6691:9;6685:16;6710:30;6734:5;6710:30;:::i;6775:341::-;6844:6;6897:2;6885:9;6876:7;6872:23;6868:32;6865:2;;;6918:6;6910;6903:22;6865:2;6963:9;6950:23;-1:-1:-1;;;;;6988:6:1;6985:30;6982:2;;;7033:6;7025;7018:22;6982:2;7061:49;7102:7;7093:6;7082:9;7078:22;7061:49;:::i;7121:992::-;7239:6;7247;7255;7263;7307:9;7298:7;7294:23;7337:3;7333:2;7329:12;7326:2;;;7359:6;7351;7344:22;7326:2;7404:9;7391:23;-1:-1:-1;;;;;7429:6:1;7426:30;7423:2;;;7474:6;7466;7459:22;7423:2;7502:49;7543:7;7534:6;7523:9;7519:22;7502:49;:::i;:::-;7492:59;-1:-1:-1;;7598:2:1;7583:18;;7570:32;;-1:-1:-1;7649:2:1;7634:18;;7621:32;;-1:-1:-1;7687:2:1;-1:-1:-1;;7669:16:1;;7665:25;7662:2;;;7708:6;7700;7693:22;7662:2;;7746;7740:9;7758:32;7783:6;7758:32;:::i;:::-;7840:2;7829:9;7825:18;7812:32;7884:4;7877:5;7873:16;7866:5;7863:27;7853:2;;7909:6;7901;7894:22;7853:2;7927:21;;8009:3;7994:19;;7981:33;7976:2;7964:15;;7957:58;8076:3;8061:19;;;8048:33;8043:2;8031:15;;8024:58;-1:-1:-1;7274:839:1;;;;-1:-1:-1;7274:839:1;;7934:6;7274:839::o;8118:190::-;8177:6;8230:2;8218:9;8209:7;8205:23;8201:32;8198:2;;;8251:6;8243;8236:22;8198:2;-1:-1:-1;8279:23:1;;8188:120;-1:-1:-1;8188:120:1:o;8313:409::-;8391:6;8399;8452:2;8440:9;8431:7;8427:23;8423:32;8420:2;;;8473:6;8465;8458:22;8420:2;8514:9;8501:23;8491:33;;8575:2;8564:9;8560:18;8547:32;-1:-1:-1;;;;;8594:6:1;8591:30;8588:2;;;8639:6;8631;8624:22;8588:2;8667:49;8708:7;8699:6;8688:9;8684:22;8667:49;:::i;8727:258::-;8795:6;8803;8856:2;8844:9;8835:7;8831:23;8827:32;8824:2;;;8877:6;8869;8862:22;8824:2;-1:-1:-1;;8905:23:1;;;8975:2;8960:18;;;8947:32;;-1:-1:-1;8814:171:1:o;8990:437::-;9043:3;9081:5;9075:12;9108:6;9103:3;9096:19;9134:4;9163:2;9158:3;9154:12;9147:19;;9200:2;9193:5;9189:14;9221:3;9233:169;9247:6;9244:1;9241:13;9233:169;;;9308:13;;9296:26;;9342:12;;;;9377:15;;;;9269:1;9262:9;9233:169;;;-1:-1:-1;9418:3:1;;9051:376;-1:-1:-1;;;;;9051:376:1:o;9432:257::-;9473:3;9511:5;9505:12;9538:6;9533:3;9526:19;9554:63;9610:6;9603:4;9598:3;9594:14;9587:4;9580:5;9576:16;9554:63;:::i;:::-;9671:2;9650:15;-1:-1:-1;;9646:29:1;9637:39;;;;9678:4;9633:50;;9481:208;-1:-1:-1;;9481:208:1:o;9694:412::-;9923:26;9919:31;9910:6;9906:2;9902:15;9898:53;9893:3;9886:66;9868:3;9981:6;9975:13;9997:62;10052:6;10047:2;10042:3;10038:12;10031:4;10023:6;10019:17;9997:62;:::i;:::-;10079:16;;;;10097:2;10075:25;;9876:230;-1:-1:-1;;;9876:230:1:o;10111:470::-;10290:3;10328:6;10322:13;10344:53;10390:6;10385:3;10378:4;10370:6;10366:17;10344:53;:::i;:::-;10460:13;;10419:16;;;;10482:57;10460:13;10419:16;10516:4;10504:17;;10482:57;:::i;:::-;10555:20;;10298:283;-1:-1:-1;;;;10298:283:1:o;11179:826::-;-1:-1:-1;;;;;11576:15:1;;;11558:34;;11628:15;;11623:2;11608:18;;11601:43;11538:3;11675:2;11660:18;;11653:31;;;11501:4;;11707:57;;11744:19;;11736:6;11707:57;:::i;:::-;11812:9;11804:6;11800:22;11795:2;11784:9;11780:18;11773:50;11846:44;11883:6;11875;11846:44;:::i;:::-;11832:58;;11939:9;11931:6;11927:22;11921:3;11910:9;11906:19;11899:51;11967:32;11992:6;11984;11967:32;:::i;:::-;11959:40;11510:495;-1:-1:-1;;;;;;;;11510:495:1:o;12010:560::-;-1:-1:-1;;;;;12307:15:1;;;12289:34;;12359:15;;12354:2;12339:18;;12332:43;12406:2;12391:18;;12384:34;;;12449:2;12434:18;;12427:34;;;12269:3;12492;12477:19;;12470:32;;;12232:4;;12519:45;;12544:19;;12536:6;12519:45;:::i;:::-;12511:53;12241:329;-1:-1:-1;;;;;;;12241:329:1:o;12575:261::-;12754:2;12743:9;12736:21;12717:4;12774:56;12826:2;12815:9;12811:18;12803:6;12774:56;:::i;12841:465::-;13098:2;13087:9;13080:21;13061:4;13124:56;13176:2;13165:9;13161:18;13153:6;13124:56;:::i;:::-;13228:9;13220:6;13216:22;13211:2;13200:9;13196:18;13189:50;13256:44;13293:6;13285;13256:44;:::i;:::-;13248:52;13070:236;-1:-1:-1;;;;;13070:236:1:o;13906:219::-;14055:2;14044:9;14037:21;14018:4;14075:44;14115:2;14104:9;14100:18;14092:6;14075:44;:::i;14551:404::-;14753:2;14735:21;;;14792:2;14772:18;;;14765:30;14831:34;14826:2;14811:18;;14804:62;-1:-1:-1;;;14897:2:1;14882:18;;14875:38;14945:3;14930:19;;14725:230::o;17381:401::-;17583:2;17565:21;;;17622:2;17602:18;;;17595:30;17661:34;17656:2;17641:18;;17634:62;-1:-1:-1;;;17727:2:1;17712:18;;17705:35;17772:3;17757:19;;17555:227::o;18986:399::-;19188:2;19170:21;;;19227:2;19207:18;;;19200:30;19266:34;19261:2;19246:18;;19239:62;-1:-1:-1;;;19332:2:1;19317:18;;19310:33;19375:3;19360:19;;19160:225::o;21342:404::-;21544:2;21526:21;;;21583:2;21563:18;;;21556:30;21622:34;21617:2;21602:18;;21595:62;-1:-1:-1;;;21688:2:1;21673:18;;21666:38;21736:3;21721:19;;21516:230::o;22890:183::-;22950:4;-1:-1:-1;;;;;22975:6:1;22972:30;22969:2;;;23005:18;;:::i;:::-;-1:-1:-1;23050:1:1;23046:14;23062:4;23042:25;;22959:114::o;23078:128::-;23118:3;23149:1;23145:6;23142:1;23139:13;23136:2;;;23155:18;;:::i;:::-;-1:-1:-1;23191:9:1;;23126:80::o;23211:120::-;23251:1;23277;23267:2;;23282:18;;:::i;:::-;-1:-1:-1;23316:9:1;;23257:74::o;23336:125::-;23376:4;23404:1;23401;23398:8;23395:2;;;23409:18;;:::i;:::-;-1:-1:-1;23446:9:1;;23385:76::o;23466:258::-;23538:1;23548:113;23562:6;23559:1;23556:13;23548:113;;;23638:11;;;23632:18;23619:11;;;23612:39;23584:2;23577:10;23548:113;;;23679:6;23676:1;23673:13;23670:2;;;23714:1;23705:6;23700:3;23696:16;23689:27;23670:2;;23519:205;;;:::o;23729:136::-;23768:3;23796:5;23786:2;;23805:18;;:::i;:::-;-1:-1:-1;;;23841:18:1;;23776:89::o;23870:380::-;23949:1;23945:12;;;;23992;;;24013:2;;24067:4;24059:6;24055:17;24045:27;;24013:2;24120;24112:6;24109:14;24089:18;24086:38;24083:2;;;24166:10;24161:3;24157:20;24154:1;24147:31;24201:4;24198:1;24191:15;24229:4;24226:1;24219:15;24083:2;;23925:325;;;:::o;24255:223::-;24341:2;24333:6;24329:15;24410:6;24398:10;24395:22;-1:-1:-1;;;;;24362:10:1;24359:34;24356:62;24353:2;;;24421:18;;:::i;:::-;24457:2;24450:22;-1:-1:-1;24301:177:1:o;24483:249::-;24593:2;24574:13;;-1:-1:-1;;24570:27:1;24558:40;;-1:-1:-1;;;;;24613:34:1;;24649:22;;;24610:62;24607:2;;;24675:18;;:::i;:::-;24711:2;24704:22;-1:-1:-1;;24530:202:1:o;24737:135::-;24776:3;-1:-1:-1;;24797:17:1;;24794:2;;;24817:18;;:::i;:::-;-1:-1:-1;24864:1:1;24853:13;;24784:88::o;24877:112::-;24909:1;24935;24925:2;;24940:18;;:::i;:::-;-1:-1:-1;24974:9:1;;24915:74::o;24994:127::-;25055:10;25050:3;25046:20;25043:1;25036:31;25086:4;25083:1;25076:15;25110:4;25107:1;25100:15;25126:127;25187:10;25182:3;25178:20;25175:1;25168:31;25218:4;25215:1;25208:15;25242:4;25239:1;25232:15;25258:127;25319:10;25314:3;25310:20;25307:1;25300:31;25350:4;25347:1;25340:15;25374:4;25371:1;25364:15;25390:185;25425:3;25467:1;25449:16;25446:23;25443:2;;;25517:1;25512:3;25507;25492:27;25548:10;25543:3;25539:20;25443:2;25433:142;:::o;25580:671::-;25619:3;25661:4;25643:16;25640:26;25637:2;;;25627:624;:::o;25637:2::-;25703;25697:9;-1:-1:-1;;25768:16:1;25764:25;;25761:1;25697:9;25740:50;25819:4;25813:11;25843:16;-1:-1:-1;;;;;25949:2:1;25942:4;25934:6;25930:17;25927:25;25922:2;25914:6;25911:14;25908:45;25905:2;;;25956:5;;;;;25627:624;:::o;25905:2::-;25993:6;25987:4;25983:17;25972:28;;26029:3;26023:10;26056:2;26048:6;26045:14;26042:2;;;26062:5;;;;;;25627:624;:::o;26042:2::-;26146;26127:16;26121:4;26117:27;26113:36;26106:4;26097:6;26092:3;26088:16;26084:27;26081:69;26078:2;;;26153:5;;;;;;25627:624;:::o;26078:2::-;26169:57;26220:4;26211:6;26203;26199:19;26195:30;26189:4;26169:57;:::i;:::-;-1:-1:-1;26242:3:1;;25627:624;-1:-1:-1;;;;;25627:624:1:o;26256:131::-;-1:-1:-1;;;;;;26330:32:1;;26320:43;;26310:2;;26377:1;26374;26367:12;26310:2;26300:87;:::o

Swarm Source

ipfs://f13a1fe5106584553da9d55a78f1da640192912173624b6e18c06edec653ca9c

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

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