ETH Price: $2,930.35 (+3.91%)
 

Overview

Max Total Supply

2,831 MOJI

Holders

608

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
2 MOJI
0x9b9e35c223b39f908a036e41011d9e3adb06ae0b
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Niftymoji offers limited number of MOJIs (3186 units) NFT for minting based on OpenMoji 12.0. Each Niftymoji is engraved with a unique emoji and power+luck scores. MOJI Experience Points ($MEXP) Tokens are rewards for owning a MOJI.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Niftymoji

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-02-25
*/

pragma solidity ^0.5.16; /*

___________________________________________________________________
  _      _                                        ______           
  |  |  /          /                                /              
--|-/|-/-----__---/----__----__---_--_----__-------/-------__------
  |/ |/    /___) /   /   ' /   ) / /  ) /___)     /      /   )     
__/__|____(___ _/___(___ _(___/_/_/__/_(___ _____/______(___/__o_o_



███╗   ██╗██╗███████╗████████╗██╗   ██╗    ███╗   ███╗ ██████╗      ██╗██╗
████╗  ██║██║██╔════╝╚══██╔══╝╚██╗ ██╔╝    ████╗ ████║██╔═══██╗     ██║██║
██╔██╗ ██║██║█████╗     ██║    ╚████╔╝     ██╔████╔██║██║   ██║     ██║██║
██║╚██╗██║██║██╔══╝     ██║     ╚██╔╝      ██║╚██╔╝██║██║   ██║██   ██║██║
██║ ╚████║██║██║        ██║      ██║       ██║ ╚═╝ ██║╚██████╔╝╚█████╔╝██║
╚═╝  ╚═══╝╚═╝╚═╝        ╚═╝      ╚═╝       ╚═╝     ╚═╝ ╚═════╝  ╚════╝ ╚═╝
                                                                          

=== 'Niftymoji' NFT Management contract with following features ===
    => ERC721 Compliance
    => ERC165 Compliance
    => SafeMath implementation 
    => Generation of new digital assets
    => Destroyal of digital assets


============= Independant Audit of the code ============
    => Multiple Freelancers Auditors


-------------------------------------------------------------------
 Copyright (c) 2019 onwards  Niftymoji Inc. ( https://niftymoji.com )
-------------------------------------------------------------------
*/ 


/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
    address payable internal _owner;

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

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner());
        _;
    }

    /**
     * @return true if `msg.sender` is the owner of the contract.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Allows the current owner to relinquish control of the contract.
     * It will not be possible to call the functions with the `onlyOwner`
     * modifier anymore.
     * @notice Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address payable newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function _transferOwnership(address payable newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


// File: contracts/Strings.sol

pragma solidity ^0.5.2;

library Strings {
  // via https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.5.sol
  function strConcat(string memory _a, string memory _b, string memory _c, string memory _d, string memory _e) internal pure returns (string memory) {
    bytes memory _ba = bytes(_a);
    bytes memory _bb = bytes(_b);
    bytes memory _bc = bytes(_c);
    bytes memory _bd = bytes(_d);
    bytes memory _be = bytes(_e);
    string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length);
    bytes memory babcde = bytes(abcde);
    uint k = 0;
    for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i];
    for (uint i = 0; i < _bb.length; i++) babcde[k++] = _bb[i];
    for (uint i = 0; i < _bc.length; i++) babcde[k++] = _bc[i];
    for (uint i = 0; i < _bd.length; i++) babcde[k++] = _bd[i];
    for (uint i = 0; i < _be.length; i++) babcde[k++] = _be[i];
    return string(babcde);
  }

  function strConcat(string memory _a, string memory _b, string memory _c, string memory _d) internal pure returns (string memory) {
    return strConcat(_a, _b, _c, _d, "");
  }

  function strConcat(string memory _a, string memory _b, string memory _c) internal pure returns (string memory) {
    return strConcat(_a, _b, _c, "", "");
  }

  function strConcat(string memory _a, string memory _b) internal pure returns (string memory) {
    return strConcat(_a, _b, "", "", "");
  }

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

  function fromAddress(address addr) internal pure returns(string memory) {
    bytes20 addrBytes = bytes20(addr);
    bytes16 hexAlphabet = "0123456789abcdef";
    bytes memory result = new bytes(42);
    result[0] = '0';
    result[1] = 'x';
    for (uint i = 0; i < 20; i++) {
      result[i * 2 + 2] = hexAlphabet[uint8(addrBytes[i] >> 4)];
      result[i * 2 + 3] = hexAlphabet[uint8(addrBytes[i] & 0x0f)];
    }
    return string(result);
  }
}

// File: openzeppelin-solidity/contracts/introspection/IERC165.sol

pragma solidity ^0.5.2;

/**
 * @title IERC165
 * @dev https://eips.ethereum.org/EIPS/eip-165
 */
interface IERC165 {
    /**
     * @notice Query if a contract implements an interface
     * @param interfaceId The interface identifier, as specified in ERC-165
     * @dev Interface identification is specified in ERC-165. This function
     * uses less than 30,000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: openzeppelin-solidity/contracts/token/ERC721/IERC721.sol

pragma solidity ^0.5.2;


/**
 * @title ERC721 Non-Fungible Token Standard basic interface
 * @dev see https://eips.ethereum.org/EIPS/eip-721
 */
contract IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    function balanceOf(address owner) public view returns (uint256 balance);
    function ownerOf(uint256 tokenId) public view returns (address owner);

    function approve(address to, uint256 tokenId) public;
    function getApproved(uint256 tokenId) public view returns (address operator);

    function setApprovalForAll(address operator, bool _approved) public;
    function isApprovedForAll(address owner, address operator) public view returns (bool);

    function transferFrom(address from, address to, uint256 tokenId) public;
    function safeTransferFrom(address from, address to, uint256 tokenId) public;

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public;
}

// File: openzeppelin-solidity/contracts/token/ERC721/IERC721Receiver.sol

pragma solidity ^0.5.2;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
contract IERC721Receiver {
    /**
     * @notice Handle the receipt of an NFT
     * @dev The ERC721 smart contract calls this function on the recipient
     * after a `safeTransfer`. This function MUST return the function selector,
     * otherwise the caller will revert the transaction. The selector to be
     * returned can be obtained as `this.onERC721Received.selector`. This
     * function MAY throw to revert and reject the transfer.
     * Note: the ERC721 contract address is always the message sender.
     * @param operator The address which called `safeTransferFrom` function
     * @param from The address which previously owned the token
     * @param tokenId The NFT identifier which is being transferred
     * @param data Additional data with no specified format
     * @return bytes4 `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
     */
    function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data)
    public returns (bytes4);
}

// File: openzeppelin-solidity/contracts/math/SafeMath.sol

pragma solidity ^0.5.2;

/**
 * @title SafeMath
 * @dev Unsigned math operations with safety checks that revert on error
 */
library SafeMath {
    /**
     * @dev Multiplies two unsigned integers, reverts on overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
     * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Adds two unsigned integers, reverts on overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
     * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
     * reverts when dividing by zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}

// File: openzeppelin-solidity/contracts/utils/Address.sol

pragma solidity ^0.5.2;

/**
 * Utility library of inline functions on addresses
 */
library Address {
    /**
     * Returns whether the target address is a contract
     * @dev This function will return false if invoked during the constructor of a contract,
     * as the code is not actually created until after the constructor finishes.
     * @param account address of the account to check
     * @return whether the target address is a contract
     */
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        // XXX Currently there is no better way to check if there is a contract in an address
        // than to check the size of the code at that address.
        // See https://ethereum.stackexchange.com/a/14016/36603
        // for more details about how this works.
        // TODO Check this again before the Serenity release, because all addresses will be
        // contracts then.
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}

// File: openzeppelin-solidity/contracts/drafts/Counters.sol

pragma solidity ^0.5.2;


/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids
 *
 * Include with `using Counters for Counters.Counter;`
 * Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the SafeMath
 * overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never
 * directly accessed.
 */
library Counters {
    using SafeMath for uint256;

    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        counter._value += 1;
    }

    function decrement(Counter storage counter) internal {
        counter._value = counter._value.sub(1);
    }
}

// File: openzeppelin-solidity/contracts/introspection/ERC165.sol

pragma solidity ^0.5.2;


/**
 * @title ERC165
 * @author Matt Condon (@shrugs)
 * @dev Implements ERC165 using a lookup table.
 */
contract ERC165 is IERC165 {
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
    /*
     * 0x01ffc9a7 ===
     *     bytes4(keccak256('supportsInterface(bytes4)'))
     */

    /**
     * @dev a mapping of interface id to whether or not it's supported
     */
    mapping(bytes4 => bool) private _supportedInterfaces;

    /**
     * @dev A contract implementing SupportsInterfaceWithLookup
     * implement ERC165 itself
     */
    constructor () internal {
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    /**
     * @dev implement supportsInterface(bytes4) using a lookup table
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    /**
     * @dev internal method for registering an interface
     */
    function _registerInterface(bytes4 interfaceId) internal {
        require(interfaceId != 0xffffffff);
        _supportedInterfaces[interfaceId] = true;
    }
}

// File: openzeppelin-solidity/contracts/token/ERC721/ERC721.sol

pragma solidity ^0.5.2;




interface OldNiftymoji{
    function powerNLucks(uint256 tokenID) external returns(uint256, uint256);
}




/**
 * @title ERC721 Non-Fungible Token Standard basic implementation
 * @dev see https://eips.ethereum.org/EIPS/eip-721
 */
contract ERC721 is ERC165, IERC721 {
    using SafeMath for uint256;
    using Address for address;
    using Counters for Counters.Counter;
    
        struct powerNLuck
    {
        uint256 power;
        uint256 luck;        
    }
    
    uint256 public totalSupply;
    
    //uint256 is tokenNo and powerNLuck is associated details in uint256
    mapping (uint256 => powerNLuck) public powerNLucks;

    // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
    // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`
    bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;

    // Mapping from token ID to owner
    mapping (uint256 => address) private _tokenOwner;

    // Mapping from token ID to approved address
    mapping (uint256 => address) private _tokenApprovals;

    // Mapping from owner to number of owned token
    mapping (address => Counters.Counter) private _ownedTokensCount;

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

    bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;
    /*
     * 0x80ac58cd ===
     *     bytes4(keccak256('balanceOf(address)')) ^
     *     bytes4(keccak256('ownerOf(uint256)')) ^
     *     bytes4(keccak256('approve(address,uint256)')) ^
     *     bytes4(keccak256('getApproved(uint256)')) ^
     *     bytes4(keccak256('setApprovalForAll(address,bool)')) ^
     *     bytes4(keccak256('isApprovedForAll(address,address)')) ^
     *     bytes4(keccak256('transferFrom(address,address,uint256)')) ^
     *     bytes4(keccak256('safeTransferFrom(address,address,uint256)')) ^
     *     bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)'))
     */

    constructor () public {
        // register the supported interfaces to conform to ERC721 via ERC165
        _registerInterface(_INTERFACE_ID_ERC721);
    }

    /**
     * @dev Gets the balance of the specified address
     * @param owner address to query the balance of
     * @return uint256 representing the amount owned by the passed address
     */
    function balanceOf(address owner) public view returns (uint256) {
        require(owner != address(0));
        return _ownedTokensCount[owner].current();
    }

    /**
     * @dev Gets the owner of the specified token ID
     * @param tokenId uint256 ID of the token to query the owner of
     * @return address currently marked as the owner of the given token ID
     */
    function ownerOf(uint256 tokenId) public view returns (address) {
        address owner = _tokenOwner[tokenId];
        require(owner != address(0));
        return owner;
    }

    /**
     * @dev Approves another address to transfer the given token ID
     * The zero address indicates there is no approved address.
     * There can only be one approved address per token at a given time.
     * Can only be called by the token owner or an approved operator.
     * @param to address to be approved for the given token ID
     * @param tokenId uint256 ID of the token to be approved
     */
    function approve(address to, uint256 tokenId) public {
        address owner = ownerOf(tokenId);
        require(to != owner);
        require(msg.sender == owner || isApprovedForAll(owner, msg.sender));

        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    /**
     * @dev Gets the approved address for a token ID, or zero if no address set
     * Reverts if the token ID does not exist.
     * @param tokenId uint256 ID of the token to query the approval of
     * @return address currently approved for the given token ID
     */
    function getApproved(uint256 tokenId) public view returns (address) {
        require(_exists(tokenId));
        return _tokenApprovals[tokenId];
    }

    /**
     * @dev Sets or unsets the approval of a given operator
     * An operator is allowed to transfer all tokens of the sender on their behalf
     * @param to operator address to set the approval
     * @param approved representing the status of the approval to be set
     */
    function setApprovalForAll(address to, bool approved) public {
        require(to != msg.sender);
        _operatorApprovals[msg.sender][to] = approved;
        emit ApprovalForAll(msg.sender, to, approved);
    }

    /**
     * @dev Tells whether an operator is approved by a given owner
     * @param owner owner address which you want to query the approval of
     * @param operator operator address which you want to query the approval of
     * @return bool whether the given operator is approved by the given owner
     */
    function isApprovedForAll(address owner, address operator) public view returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev Transfers the ownership of a given token ID to another address
     * Usage of this method is discouraged, use `safeTransferFrom` whenever possible
     * Requires the msg.sender to be the owner, approved, or operator
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
     */
    function transferFrom(address from, address to, uint256 tokenId) public {
        require(_isApprovedOrOwner(msg.sender, tokenId));

        _transferFrom(from, to, tokenId);
    }

    /**
     * @dev Safely transfers the ownership of a given token ID to another address
     * If the target address is a contract, it must implement `onERC721Received`,
     * which is called upon a safe transfer, and return the magic value
     * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
     * the transfer is reverted.
     * Requires the msg.sender to be the owner, approved, or operator
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) public {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev Safely transfers the ownership of a given token ID to another address
     * If the target address is a contract, it must implement `onERC721Received`,
     * which is called upon a safe transfer, and return the magic value
     * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
     * the transfer is reverted.
     * Requires the msg.sender to be the owner, approved, or operator
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes data to send along with a safe transfer check
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public {
        transferFrom(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data));
    }

    /**
     * @dev Returns whether the specified token exists
     * @param tokenId uint256 ID of the token to query the existence of
     * @return bool whether the token exists
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        address owner = _tokenOwner[tokenId];
        return owner != address(0);
    }

    /**
     * @dev Returns whether the given spender can transfer a given token ID
     * @param spender address of the spender to query
     * @param tokenId uint256 ID of the token to be transferred
     * @return bool whether the msg.sender is approved for the given token ID,
     * is an operator of the owner, or is the owner of the token
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) {
        address owner = ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Internal function to mint a new token
     * Reverts if the given token ID already exists
     * @param to The address that will own the minted token
     * @param tokenId uint256 ID of the token to be minted
     */
    function _mint(address to, uint256 tokenId, uint256 _userSeed) internal {
        require(to != address(0));
        require(!_exists(tokenId));
        require(totalSupply <= 3187, 'Excedend Max Token Supply');

        _tokenOwner[tokenId] = to;
        _ownedTokensCount[to].increment();
        totalSupply++;
        
        //generating random numbers for luck and power based on previous blockhash and user seed
        //this method of entropy is not very secure, but kept it as consent of client
        uint256 _luck = uint256(keccak256(abi.encodePacked(blockhash( block.number -1), _userSeed))) % 100; //0-99
        uint256 _power = uint256(keccak256(abi.encodePacked(blockhash( block.number -10), now, _userSeed))) % 100; //0-99
        //assigning lucky no and power to tokenId        
        powerNLucks[tokenId].luck = _luck+1;    //this will cause it will never be zero.
        powerNLucks[tokenId].power = _power+1;  //this will cause it will never be zero.

        emit Transfer(address(0), to, tokenId);
    }
    
    function _mintSyncedTokens(uint256 tokenID, address user) internal {
        
        _tokenOwner[tokenID] = user;
        _ownedTokensCount[user].increment();
        totalSupply++;
        
        //generating random numbers for luck and power based on previous blockhash and user seed
        //this method of entropy is not very secure, but kept it as consent of client
        (uint256 _power, uint256 _luck) = OldNiftymoji(0x40b16A1b6bEA856745FeDf7E0946494B895611a2).powerNLucks(tokenID);  //mainnet
        //(uint256 _power, uint256 _luck) = OldNiftymoji(0x03f701FB8EA5441A9Bf98B65461e795931B55298).powerNLucks(tokenID);    //testnet
        
        //assigning lucky no and power to tokenId        
        powerNLucks[tokenID].luck = _luck;    //this will cause it will never be zero.
        powerNLucks[tokenID].power = _power;  //this will cause it will never be zero.

        emit Transfer(address(0), user, tokenID);
    }
    
    

    /**
     * @dev Internal function to burn a specific token
     * Reverts if the token does not exist
     * Deprecated, use _burn(uint256) instead.
     * @param owner owner of the token to burn
     * @param tokenId uint256 ID of the token being burned
     */
    function _burn(address owner, uint256 tokenId) internal {
        require(ownerOf(tokenId) == owner);

        _clearApproval(tokenId);

        _ownedTokensCount[owner].decrement();
        _tokenOwner[tokenId] = address(0);

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Internal function to burn a specific token
     * Reverts if the token does not exist
     * @param tokenId uint256 ID of the token being burned
     */
    function _burn(uint256 tokenId) internal {
        _burn(ownerOf(tokenId), tokenId);
    }

    /**
     * @dev Internal function to transfer ownership of a given token ID to another address.
     * As opposed to transferFrom, this imposes no restrictions on msg.sender.
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
     */
    function _transferFrom(address from, address to, uint256 tokenId) internal {
        require(ownerOf(tokenId) == from);
        require(to != address(0));

        _clearApproval(tokenId);

        _ownedTokensCount[from].decrement();
        _ownedTokensCount[to].increment();

        _tokenOwner[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Internal function to invoke `onERC721Received` on a target address
     * The call is not executed if the target address is not a contract
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
        internal returns (bool)
    {
        if (!to.isContract()) {
            return true;
        }

        bytes4 retval = IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data);
        return (retval == _ERC721_RECEIVED);
    }

    /**
     * @dev Private function to clear current approval of a given token ID
     * @param tokenId uint256 ID of the token to be transferred
     */
    function _clearApproval(uint256 tokenId) private {
        if (_tokenApprovals[tokenId] != address(0)) {
            _tokenApprovals[tokenId] = address(0);
        }
    }
    
    
    
}

// File: openzeppelin-solidity/contracts/token/ERC721/IERC721Enumerable.sol

pragma solidity ^0.5.2;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
contract IERC721Enumerable is IERC721 {
    //function totalSupply() public view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256 tokenId);

    function tokenByIndex(uint256 index) public view returns (uint256);
}

// File: openzeppelin-solidity/contracts/token/ERC721/ERC721Enumerable.sol

pragma solidity ^0.5.2;




/**
 * @title ERC-721 Non-Fungible Token with optional enumeration extension logic
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
contract ERC721Enumerable is ERC165, ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => uint256[]) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;
    /*
     * 0x780e9d63 ===
     *     bytes4(keccak256('totalSupply()')) ^
     *     bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) ^
     *     bytes4(keccak256('tokenByIndex(uint256)'))
     */

    /**
     * @dev Constructor function
     */
    constructor () public {
        // register the supported interface to conform to ERC721Enumerable via ERC165
        _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);
    }

    /**
     * @dev Gets the token ID at a given index of the tokens list of the requested owner
     * @param owner address owning the tokens list to be accessed
     * @param index uint256 representing the index to be accessed of the requested tokens list
     * @return uint256 token ID at the given index of the tokens list owned by the requested address
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) {
        require(index < balanceOf(owner));
        return _ownedTokens[owner][index];
    }

    /**
     * @dev Gets the total amount of tokens stored by the contract
     * @return uint256 representing the total amount of tokens
     */
    function totalSupplyEnum() public view returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev Gets the token ID at a given index of all the tokens in this contract
     * Reverts if the index is greater or equal to the total number of tokens
     * @param index uint256 representing the index to be accessed of the tokens list
     * @return uint256 token ID at the given index of the tokens list
     */
    function tokenByIndex(uint256 index) public view returns (uint256) {
        require(index < totalSupplyEnum());
        return _allTokens[index];
    }

    

    /**
     * @dev Gets the list of token IDs of the requested owner
     * @param owner address owning the tokens
     * @return uint256[] List of token IDs owned by the requested address
     */
    function _tokensOfOwner(address owner) internal view returns (uint256[] storage) {
        return _ownedTokens[owner];
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        _ownedTokensIndex[tokenId] = _ownedTokens[to].length;
        _ownedTokens[to].push(tokenId);
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }
    
    /**
     * @dev Internal function to mint a new token
     * Reverts if the given token ID already exists
     * @param to address the beneficiary that will own the minted token
     * @param tokenId uint256 ID of the token to be minted
     */
    function _mint(address to, uint256 tokenId) internal {
        super._mint(to, tokenId,0);

        _addTokenToOwnerEnumeration(to, tokenId);

        _addTokenToAllTokensEnumeration(tokenId);
    }

    /**
     * @dev Internal function to burn a specific token
     * Reverts if the token does not exist
     * Deprecated, use _burn(uint256) instead
     * @param owner owner of the token to burn
     * @param tokenId uint256 ID of the token being burned
     */
    function _burn(address owner, uint256 tokenId) internal {
        super._burn(owner, tokenId);

        _removeTokenFromOwnerEnumeration(owner, tokenId);
        // Since tokenId will be deleted, we can clear its slot in _ownedTokensIndex to trigger a gas refund
        _ownedTokensIndex[tokenId] = 0;

        _removeTokenFromAllTokensEnumeration(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the _ownedTokensIndex mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _ownedTokens[from].length.sub(1);
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        _ownedTokens[from].length--;

        // Note that _ownedTokensIndex[tokenId] hasn't been cleared: it still points to the old slot (now occupied by
        // lastTokenId, or just over the end of the array if the token was the last one).
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length.sub(1);
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        _allTokens.length--;
        _allTokensIndex[tokenId] = 0;
    }
}

// File: openzeppelin-solidity/contracts/token/ERC721/IERC721Metadata.sol

pragma solidity ^0.5.2;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
contract IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: openzeppelin-solidity/contracts/token/ERC721/ERC721Metadata.sol

pragma solidity ^0.5.2;




contract ERC721Metadata is ERC165, IERC721Metadata, ERC721 {
    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

    bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;
    /*
     * 0x5b5e139f ===
     *     bytes4(keccak256('name()')) ^
     *     bytes4(keccak256('symbol()')) ^
     *     bytes4(keccak256('tokenURI(uint256)'))
     */

    /**
     * @dev Constructor function
     */
    constructor (string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;

        // register the supported interfaces to conform to ERC721 via ERC165
        _registerInterface(_INTERFACE_ID_ERC721_METADATA);
    }

    /**
     * @dev Gets the token name
     * @return string representing the token name
     */
    function name() external view returns (string memory) {
        return _name;
    }

    /**
     * @dev Gets the token symbol
     * @return string representing the token symbol
     */
    function symbol() external view returns (string memory) {
        return _symbol;
    }

    /**
     * @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) external view returns (string memory) {
        require(_exists(tokenId));
        return _tokenURIs[tokenId];
    }

    /**
     * @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) internal {
        require(_exists(tokenId));
        _tokenURIs[tokenId] = uri;
    }

    /**
     * @dev Internal function to burn a specific token
     * Reverts if the token does not exist
     * Deprecated, use _burn(uint256) instead
     * @param owner owner of the token to burn
     * @param tokenId uint256 ID of the token being burned by the msg.sender
     */
    function _burn(address owner, uint256 tokenId) internal {
        super._burn(owner, tokenId);

        // Clear metadata (if any)
        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

// File: openzeppelin-solidity/contracts/token/ERC721/ERC721Full.sol

pragma solidity ^0.5.2;




/**
 * @title Full ERC721 Token
 * This implementation includes all the required and some optional functionality of the ERC721 standard
 * Moreover, it includes approve all functionality using operator terminology
 * @dev see https://eips.ethereum.org/EIPS/eip-721
 */
contract ERC721Full is ERC721, ERC721Enumerable, ERC721Metadata {
    constructor (string memory name, string memory symbol) public ERC721Metadata(name, symbol) {
        // solhint-disable-previous-line no-empty-blocks
    }
}


// File: contracts/TradeableERC721Token.sol

pragma solidity ^0.5.2;




contract OwnableDelegateProxy { }



contract ProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}

/**
 * @title TradeableERC721Token
 * TradeableERC721Token - ERC721 contract that whitelists a trading address, and has minting functionality.
 */
contract TradeableERC721Token is ERC721Full, Ownable {
  using Strings for string;
  
  uint256 public tokenPrice=5 * (10**16) ;  //price of token to buy
  address proxyRegistryAddress;
  uint256 private _currentTokenId = 0;
  
  

  constructor(string memory _name, string memory _symbol) ERC721Full(_name, _symbol) public {
  }

  /**
    * @dev Mints a token to an address with a tokenURI.
    * @param _to address of the future owner of the token
    */
  function mintTo(address _to) public onlyOwner {
    uint256 newTokenId = _getNextTokenId();
    _mint(_to, newTokenId,0);
    _incrementTokenId();
  }


  function setTokenPrice(uint256 _tokenPrice) public onlyOwner returns(bool)
  {
      tokenPrice = _tokenPrice;
      return true;
  }
  

  function buyToken(uint256 _userSeed) public payable returns(bool)
  {
    uint256 paidAmount = msg.value;
    require(paidAmount == tokenPrice, "Invalid amount paid");
    uint256 newTokenId = _getNextTokenId();
    _mint(msg.sender, newTokenId,_userSeed);
    _incrementTokenId(); 
    _owner.transfer(paidAmount);
     return true;
  }
  
  function batchMintToken(address[] memory _buyer) public onlyOwner returns(bool)
  {
      uint256 buyerLength = _buyer.length;
      require(buyerLength <= 100, "please try less then 101");
      for(uint256 i=0;i<buyerLength;i++)
      {
        uint256 newTokenId = _getNextTokenId();
        _mint(_buyer[i], newTokenId,0);
        _incrementTokenId();           
      }
      return true;
  }
  

  /**
    * @dev calculates the next token ID based on value of _currentTokenId 
    * @return uint256 for the next token ID
    */
  function _getNextTokenId() private view returns (uint256) {
    return _currentTokenId.add(1);
  }

  /**
    * @dev increments the value of _currentTokenId 
    */
  function _incrementTokenId() private  {
    _currentTokenId++;
  }

  function baseTokenURI() public view returns (string memory) {
    return "";
  }

  function tokenURI(uint256 _tokenId) external view returns (string memory) {
    return Strings.strConcat(baseTokenURI(),Strings.uint2str(_tokenId)
    );
  }

  /**
   * Override isApprovedForAll to whitelist user's OpenSea proxy accounts to enable gas-less listings.
   */
  function isApprovedForAll(
    address owner,
    address operator
  )
    public
    view
    returns (bool)
  {
    // Whitelist OpenSea proxy contract for easy trading.
    ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);
    if (address(proxyRegistry.proxies(owner)) == operator) {
        return true;
    }

    return super.isApprovedForAll(owner, operator);
  }
  
  function changeProxyURL(address newProxyAddress) public onlyOwner returns(bool){
      proxyRegistryAddress = newProxyAddress;
      return true;
  }
  
  
  function syncFromOldContract(uint256[] memory tokens, address[] memory users) public onlyOwner returns(bool) {
      uint256 arrayLength = tokens.length;
        require(arrayLength <= 150, 'Too many tokens IDs');
        
        //processing each entries
        for(uint8 i=0; i< arrayLength; i++ ){
            if(!_exists(tokens[i])){
                _mintSyncedTokens(tokens[i], users[i]);
                _incrementTokenId(); 
            }
        }
        return true;
    }
  
}

// File: contracts/OpenSeaAsset.sol

pragma solidity ^0.5.2;



/**
 * @title OpenSea Asset
 * OpenSea Asset - A contract for easily creating custom assets on OpenSea. 
 */
contract Niftymoji is TradeableERC721Token {
  string private _baseTokenURI;
  uint256 public changePowerPrice = 20000000000000000; //0.02 ETH
  uint256 public changeLuckPrice =  20000000000000000; //0.02 ETH

  constructor(
    string memory _name,
    string memory _symbol,
    string memory baseURI
  ) TradeableERC721Token(_name, _symbol) public {
    _baseTokenURI = baseURI;
  }

  function openSeaVersion() public pure returns (string memory) {
    return "1.2.0";
  }

  function baseTokenURI() public view returns (string memory) {
    return _baseTokenURI;
  }

  function setBaseTokenURI(string memory uri) public onlyOwner {
    _baseTokenURI = uri;
  }
  
  function changePowerLuckPrice(uint256 powerPrice, uint256 luckPrice) public onlyOwner returns(bool){
      changePowerPrice = powerPrice;
      changeLuckPrice  = luckPrice;
      return true;
  }
  
  /**
   * Status: 0 = only power, 1 = only luck, 2 = both power and luck
   */
  function changePowerLuck(uint256 tokenID, uint8 status) public payable returns(bool){
      require(msg.sender == ownerOf(tokenID), 'This token is not owned by caller');
      if(status == 0){
          require(msg.value == changePowerPrice, 'Invalid ETH amount');
            //generating random numbers for luck and power based on previous blockhash and timestamp
            //this method of entropy is not very secure, but kept it as consent of client
            uint256 _power = uint256(keccak256(abi.encodePacked(blockhash( block.number -10), now))) % 100; //0-99 
            powerNLucks[tokenID].power = _power+1;  //this will cause it will never be zero.
      }
      else if(status == 1){
          require(msg.value == changeLuckPrice, 'Invalid ETH amount');
            uint256 _luck = uint256(keccak256(abi.encodePacked(blockhash( block.number -1)))) % 100;        //0-99
            powerNLucks[tokenID].luck = _luck+1;    //this will cause it will never be zero.
      }
      else if(status == 2){
          require(msg.value == (changePowerPrice + changeLuckPrice), 'Invalid ETH amount');
            uint256 _luck = uint256(keccak256(abi.encodePacked(blockhash( block.number -1)))) % 100;        //0-99
            uint256 _power = uint256(keccak256(abi.encodePacked(blockhash( block.number -10), now))) % 100; //0-99 
            //assigning lucky no and power to tokenId        
            powerNLucks[tokenID].luck = _luck+1;    //this will cause it will never be zero.
            powerNLucks[tokenID].power = _power+1;  //this will cause it will never be zero.
      }
      
        _owner.transfer(msg.value);
        return true;
      
  }
  
  
  
  
  
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"baseURI","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"_buyer","type":"address[]"}],"name":"batchMintToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_userSeed","type":"uint256"}],"name":"buyToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"changeLuckPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"uint8","name":"status","type":"uint8"}],"name":"changePowerLuck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"powerPrice","type":"uint256"},{"internalType":"uint256","name":"luckPrice","type":"uint256"}],"name":"changePowerLuckPrice","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"changePowerPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newProxyAddress","type":"address"}],"name":"changeProxyURL","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"mintTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"openSeaVersion","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"powerNLucks","outputs":[{"internalType":"uint256","name":"power","type":"uint256"},{"internalType":"uint256","name":"luck","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseTokenURI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_tokenPrice","type":"uint256"}],"name":"setTokenPrice","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256[]","name":"tokens","type":"uint256[]"},{"internalType":"address[]","name":"users","type":"address[]"}],"name":"syncFromOldContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupplyEnum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

608060405266b1a2bc2ec50000600f55600060115566470de4df82000060135566470de4df8200006014553480156200003757600080fd5b5060405162003bc438038062003bc4833981810160405260608110156200005d57600080fd5b81019080805160405193929190846401000000008211156200007e57600080fd5b838201915060208201858111156200009557600080fd5b8251866001820283011164010000000082111715620000b357600080fd5b8083526020830192505050908051906020019080838360005b83811015620000e9578082015181840152602081019050620000cc565b50505050905090810190601f168015620001175780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200013b57600080fd5b838201915060208201858111156200015257600080fd5b82518660018202830111640100000000821117156200017057600080fd5b8083526020830192505050908051906020019080838360005b83811015620001a657808201518184015260208101905062000189565b50505050905090810190601f168015620001d45780820380516001836020036101000a031916815260200191505b5060405260200180516040519392919084640100000000821115620001f857600080fd5b838201915060208201858111156200020f57600080fd5b82518660018202830111640100000000821117156200022d57600080fd5b8083526020830192505050908051906020019080838360005b838110156200026357808201518184015260208101905062000246565b50505050905090810190601f168015620002915780820380516001836020036101000a031916815260200191505b50604052505050828281818181620002b66301ffc9a760e01b6200041660201b60201c565b620002ce6380ac58cd60e01b6200041660201b60201c565b620002e663780e9d6360e01b6200041660201b60201c565b81600b9080519060200190620002fe929190620004b6565b5080600c908051906020019062000317929190620004b6565b5062000330635b5e139f60e01b6200041660201b60201c565b5050505033600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505080601290805190602001906200040c929190620004b6565b5050505062000565565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156200044a57600080fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004f957805160ff19168380011785556200052a565b828001600101855582156200052a579182015b82811115620005295782518255916020019190600101906200050c565b5b5090506200053991906200053d565b5090565b6200056291905b808211156200055e57600081600090555060010162000544565b5090565b90565b61364f80620005756000396000f3fe60806040526004361061020f5760003560e01c8063715018a611610118578063a22cb465116100a0578063ce6073f31161006f578063ce6073f314610e58578063d547cfb714610fc9578063e6d5c54714611059578063e985e9c514611136578063f2fde38b146111bf5761020f565b8063a22cb46514610c0a578063ac98628414610c67578063b88d4fde14610c92578063c87b56dd14610da45761020f565b80638a4a33be116100e75780638a4a33be14610a4b5780638abd2be314610aa15780638da5cb5b14610af45780638f32d59b14610b4b57806395d89b4114610b7a5761020f565b8063715018a61461098d578063755edd17146109a45780637ff9b596146109f55780638977f8f314610a205761020f565b80632f745c591161019b57806342842e0e1161016a57806342842e0e146107905780634f6ccce71461080b5780636352211e1461085a5780636a61e5fc146108d557806370a08231146109285761020f565b80632f745c591461056057806330176e13146105cf5780633acf3adc146106975780634060b25e146107005761020f565b80630a21f56f116101e25780630a21f56f146103ec57806318160ddd146104495780631e0bd2fe1461047457806323b872dd1461049f5780632d296bf11461051a5761020f565b806301ffc9a71461021457806306fdde0314610286578063081812fc14610316578063095ea7b314610391575b600080fd5b34801561022057600080fd5b5061026c6004803603602081101561023757600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050611210565b604051808215151515815260200191505060405180910390f35b34801561029257600080fd5b5061029b611277565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102db5780820151818401526020810190506102c0565b50505050905090810190601f1680156103085780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032257600080fd5b5061034f6004803603602081101561033957600080fd5b8101908080359060200190929190505050611319565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561039d57600080fd5b506103ea600480360360408110156103b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611368565b005b3480156103f857600080fd5b5061042f6004803603604081101561040f57600080fd5b8101908080359060200190929190803590602001909291905050506114a9565b604051808215151515815260200191505060405180910390f35b34801561045557600080fd5b5061045e6114d4565b6040518082815260200191505060405180910390f35b34801561048057600080fd5b506104896114da565b6040518082815260200191505060405180910390f35b3480156104ab57600080fd5b50610518600480360360608110156104c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e0565b005b6105466004803603602081101561053057600080fd5b8101908080359060200190929190505050611503565b604051808215151515815260200191505060405180910390f35b34801561056c57600080fd5b506105b96004803603604081101561058357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611613565b6040518082815260200191505060405180910390f35b3480156105db57600080fd5b50610695600480360360208110156105f257600080fd5b810190808035906020019064010000000081111561060f57600080fd5b82018360208201111561062157600080fd5b8035906020019184600183028401116401000000008311171561064357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611686565b005b3480156106a357600080fd5b506106e6600480360360208110156106ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116b1565b604051808215151515815260200191505060405180910390f35b34801561070c57600080fd5b5061071561170e565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561075557808201518184015260208101905061073a565b50505050905090810190601f1680156107825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561079c57600080fd5b50610809600480360360608110156107b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061174b565b005b34801561081757600080fd5b506108446004803603602081101561082e57600080fd5b810190808035906020019092919050505061176b565b6040518082815260200191505060405180910390f35b34801561086657600080fd5b506108936004803603602081101561087d57600080fd5b810190808035906020019092919050505061179f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108e157600080fd5b5061090e600480360360208110156108f857600080fd5b810190808035906020019092919050505061181b565b604051808215151515815260200191505060405180910390f35b34801561093457600080fd5b506109776004803603602081101561094b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061183e565b6040518082815260200191505060405180910390f35b34801561099957600080fd5b506109a26118c7565b005b3480156109b057600080fd5b506109f3600480360360208110156109c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611999565b005b348015610a0157600080fd5b50610a0a6119ce565b6040518082815260200191505060405180910390f35b348015610a2c57600080fd5b50610a356119d4565b6040518082815260200191505060405180910390f35b348015610a5757600080fd5b50610a8460048036036020811015610a6e57600080fd5b81019080803590602001909291905050506119da565b604051808381526020018281526020019250505060405180910390f35b610ada60048036036040811015610ab757600080fd5b8101908080359060200190929190803560ff1690602001909291905050506119fe565b604051808215151515815260200191505060405180910390f35b348015610b0057600080fd5b50610b09611e15565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b5757600080fd5b50610b60611e3f565b604051808215151515815260200191505060405180910390f35b348015610b8657600080fd5b50610b8f611e97565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bcf578082015181840152602081019050610bb4565b50505050905090810190601f168015610bfc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c1657600080fd5b50610c6560048036036040811015610c2d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611f39565b005b348015610c7357600080fd5b50610c7c612073565b6040518082815260200191505060405180910390f35b348015610c9e57600080fd5b50610da260048036036080811015610cb557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610d1c57600080fd5b820183602082011115610d2e57600080fd5b80359060200191846001830284011164010000000083111715610d5057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612080565b005b348015610db057600080fd5b50610ddd60048036036020811015610dc757600080fd5b81019080803590602001909291905050506120a6565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e1d578082015181840152602081019050610e02565b50505050905090810190601f168015610e4a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e6457600080fd5b50610faf60048036036040811015610e7b57600080fd5b8101908080359060200190640100000000811115610e9857600080fd5b820183602082011115610eaa57600080fd5b80359060200191846020830284011164010000000083111715610ecc57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610f2c57600080fd5b820183602082011115610f3e57600080fd5b80359060200191846020830284011164010000000083111715610f6057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506120c8565b604051808215151515815260200191505060405180910390f35b348015610fd557600080fd5b50610fde6121e4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561101e578082015181840152602081019050611003565b50505050905090810190601f16801561104b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561106557600080fd5b5061111c6004803603602081101561107c57600080fd5b810190808035906020019064010000000081111561109957600080fd5b8201836020820111156110ab57600080fd5b803590602001918460208302840111640100000000831117156110cd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612286565b604051808215151515815260200191505060405180910390f35b34801561114257600080fd5b506111a56004803603604081101561115957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612370565b604051808215151515815260200191505060405180910390f35b3480156111cb57600080fd5b5061120e600480360360208110156111e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124a1565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6060600b8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b5050505050905090565b6000611324826124be565b61132d57600080fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006113738261179f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113ae57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113ee57506113ed8133612370565b5b6113f757600080fd5b826004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006114b3611e3f565b6114bc57600080fd5b82601381905550816014819055506001905092915050565b60015481565b60135481565b6114ea3382612530565b6114f357600080fd5b6114fe8383836125c5565b505050565b600080349050600f548114611580576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e76616c696420616d6f756e7420706169640000000000000000000000000081525060200191505060405180910390fd5b600061158a612788565b90506115973382866127a5565b61159f612a46565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611607573d6000803e3d6000fd5b50600192505050919050565b600061161e8361183e565b821061162957600080fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061167357fe5b9060005260206000200154905092915050565b61168e611e3f565b61169757600080fd5b80601290805190602001906116ad929190613554565b5050565b60006116bb611e3f565b6116c457600080fd5b81601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60606040518060400160405280600581526020017f312e322e30000000000000000000000000000000000000000000000000000000815250905090565b61176683838360405180602001604052806000815250612080565b505050565b6000611775612073565b821061178057600080fd5b6009828154811061178d57fe5b90600052602060002001549050919050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561181257600080fd5b80915050919050565b6000611825611e3f565b61182e57600080fd5b81600f8190555060019050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561187957600080fd5b6118c0600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612a5a565b9050919050565b6118cf611e3f565b6118d857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6119a1611e3f565b6119aa57600080fd5b60006119b4612788565b90506119c2828260006127a5565b6119ca612a46565b5050565b600f5481565b60145481565b60026020528060005260406000206000915090508060000154908060010154905082565b6000611a098361179f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806135fa6021913960400191505060405180910390fd5b60008260ff161415611b77576013543414611b0f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f496e76616c69642045544820616d6f756e74000000000000000000000000000081525060200191505060405180910390fd5b60006064600a4303404260405160200180838152602001828152602001925050506040516020818303038152906040528051906020012060001c81611b5057fe5b06905060018101600260008681526020019081526020016000206000018190555050611da2565b60018260ff161415611c5a576014543414611bfa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f496e76616c69642045544820616d6f756e74000000000000000000000000000081525060200191505060405180910390fd5b600060646001430340604051602001808281526020019150506040516020818303038152906040528051906020012060001c81611c3357fe5b06905060018101600260008681526020019081526020016000206001018190555050611da1565b60028260ff161415611da057601454601354013414611ce1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f496e76616c69642045544820616d6f756e74000000000000000000000000000081525060200191505060405180910390fd5b600060646001430340604051602001808281526020019150506040516020818303038152906040528051906020012060001c81611d1a57fe5b06905060006064600a4303404260405160200180838152602001828152602001925050506040516020818303038152906040528051906020012060001c81611d5e57fe5b06905060018201600260008781526020019081526020016000206001018190555060018101600260008781526020019081526020016000206000018190555050505b5b5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611e0a573d6000803e3d6000fd5b506001905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611f2f5780601f10611f0457610100808354040283529160200191611f2f565b820191906000526020600020905b815481529060010190602001808311611f1257829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f7257600080fd5b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b6000600980549050905090565b61208b8484846114e0565b61209784848484612a68565b6120a057600080fd5b50505050565b60606120c16120b36121e4565b6120bc84612c51565b612d7e565b9050919050565b60006120d2611e3f565b6120db57600080fd5b6000835190506096811115612158576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f546f6f206d616e7920746f6b656e73204944730000000000000000000000000081525060200191505060405180910390fd5b60008090505b818160ff1610156121d857612188858260ff168151811061217b57fe5b60200260200101516124be565b6121cb576121c2858260ff168151811061219e57fe5b6020026020010151858360ff16815181106121b557fe5b6020026020010151612dc2565b6121ca612a46565b5b808060010191505061215e565b50600191505092915050565b606060128054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561227c5780601f106122515761010080835404028352916020019161227c565b820191906000526020600020905b81548152906001019060200180831161225f57829003601f168201915b5050505050905090565b6000612290611e3f565b61229957600080fd5b6000825190506064811115612316576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f706c6561736520747279206c657373207468656e20313031000000000000000081525060200191505060405180910390fd5b60008090505b8181101561236557600061232e612788565b905061234f85838151811061233f57fe5b60200260200101518260006127a5565b612357612a46565b50808060010191505061231c565b506001915050919050565b600080601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561242c57600080fd5b505afa158015612440573d6000803e3d6000fd5b505050506040513d602081101561245657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141561248d57600191505061249b565b6124978484612fb7565b9150505b92915050565b6124a9611e3f565b6124b257600080fd5b6124bb8161304b565b50565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b60008061253c8361179f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125ab57508373ffffffffffffffffffffffffffffffffffffffff1661259384611319565b73ffffffffffffffffffffffffffffffffffffffff16145b806125bc57506125bb8185612370565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166125e58261179f565b73ffffffffffffffffffffffffffffffffffffffff161461260557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561263f57600080fd5b61264881613145565b61268f600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613203565b6126d6600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613226565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006127a0600160115461323c90919063ffffffff16565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127df57600080fd5b6127e8826124be565b156127f257600080fd5b610c73600154111561286c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4578636564656e64204d617820546f6b656e20537570706c790000000000000081525060200191505060405180910390fd5b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612905600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613226565b6001600081548092919060010191905055506000606460014303408360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012060001c8161295857fe5b06905060006064600a43034042856040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012060001c816129a457fe5b069050600182016002600086815260200190815260200160002060010181905550600181016002600086815260200190815260200160002060000181905550838573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b601160008154809291906001019190505550565b600081600001549050919050565b6000612a898473ffffffffffffffffffffffffffffffffffffffff1661325b565b612a965760019050612c49565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612b71578082015181840152602081019050612b56565b50505050905090810190601f168015612b9e5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015612bc057600080fd5b505af1158015612bd4573d6000803e3d6000fd5b505050506040513d6020811015612bea57600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b60606000821415612c99576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d79565b600082905060005b60008214612cc3578080600101915050600a8281612cbb57fe5b049150612ca1565b6060816040519080825280601f01601f191660200182016040528015612cf85781602001600182028038833980820191505090505b50905060006001830390505b60008614612d7157600a8681612d1657fe5b0660300160f81b82828060019003935081518110612d3057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8681612d6957fe5b049550612d04565b819450505050505b919050565b6060612dba838360405180602001604052806000815250604051806020016040528060008152506040518060200160405280600081525061326e565b905092915050565b806003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612e5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613226565b6001600081548092919060010191905055506000807340b16a1b6bea856745fedf7e0946494b895611a273ffffffffffffffffffffffffffffffffffffffff16638a4a33be856040518263ffffffff1660e01b8152600401808281526020019150506040805180830381600087803b158015612ed657600080fd5b505af1158015612eea573d6000803e3d6000fd5b505050506040513d6040811015612f0057600080fd5b81019080805190602001909291908051906020019092919050505091509150806002600086815260200190815260200160002060010181905550816002600086815260200190815260200160002060000181905550838373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561308557600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146132005760006004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b61321b6001826000015461353490919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60008082840190508381101561325157600080fd5b8091505092915050565b600080823b905060008111915050919050565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f1916602001820160405280156132ca5781602001600182028038833980820191505090505b5090506060819050600080905060008090505b885181101561334b578881815181106132f257fe5b602001015160f81c60f81b83838060010194508151811061330f57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506132dd565b5060008090505b87518110156133c05787818151811061336757fe5b602001015160f81c60f81b83838060010194508151811061338457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613352565b5060008090505b8651811015613435578681815181106133dc57fe5b602001015160f81c60f81b8383806001019450815181106133f957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506133c7565b5060008090505b85518110156134aa5785818151811061345157fe5b602001015160f81c60f81b83838060010194508151811061346e57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061343c565b5060008090505b845181101561351f578481815181106134c657fe5b602001015160f81c60f81b8383806001019450815181106134e357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506134b1565b50819850505050505050505095945050505050565b60008282111561354357600080fd5b600082840390508091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061359557805160ff19168380011785556135c3565b828001600101855582156135c3579182015b828111156135c25782518255916020019190600101906135a7565b5b5090506135d091906135d4565b5090565b6135f691905b808211156135f25760008160009055506001016135da565b5090565b9056fe5468697320746f6b656e206973206e6f74206f776e65642062792063616c6c6572a265627a7a7231582079b3a09ca0d0a70085882ad9c9690d513cf03a8c3af9a7305903309479ae249064736f6c63430005100032000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000094e696674796d6f6a69000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044d4f4a4900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e687474703a2f2f36382e3138332e3137382e3130303a393039302f69642f0000

Deployed Bytecode

0x60806040526004361061020f5760003560e01c8063715018a611610118578063a22cb465116100a0578063ce6073f31161006f578063ce6073f314610e58578063d547cfb714610fc9578063e6d5c54714611059578063e985e9c514611136578063f2fde38b146111bf5761020f565b8063a22cb46514610c0a578063ac98628414610c67578063b88d4fde14610c92578063c87b56dd14610da45761020f565b80638a4a33be116100e75780638a4a33be14610a4b5780638abd2be314610aa15780638da5cb5b14610af45780638f32d59b14610b4b57806395d89b4114610b7a5761020f565b8063715018a61461098d578063755edd17146109a45780637ff9b596146109f55780638977f8f314610a205761020f565b80632f745c591161019b57806342842e0e1161016a57806342842e0e146107905780634f6ccce71461080b5780636352211e1461085a5780636a61e5fc146108d557806370a08231146109285761020f565b80632f745c591461056057806330176e13146105cf5780633acf3adc146106975780634060b25e146107005761020f565b80630a21f56f116101e25780630a21f56f146103ec57806318160ddd146104495780631e0bd2fe1461047457806323b872dd1461049f5780632d296bf11461051a5761020f565b806301ffc9a71461021457806306fdde0314610286578063081812fc14610316578063095ea7b314610391575b600080fd5b34801561022057600080fd5b5061026c6004803603602081101561023757600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050611210565b604051808215151515815260200191505060405180910390f35b34801561029257600080fd5b5061029b611277565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102db5780820151818401526020810190506102c0565b50505050905090810190601f1680156103085780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032257600080fd5b5061034f6004803603602081101561033957600080fd5b8101908080359060200190929190505050611319565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561039d57600080fd5b506103ea600480360360408110156103b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611368565b005b3480156103f857600080fd5b5061042f6004803603604081101561040f57600080fd5b8101908080359060200190929190803590602001909291905050506114a9565b604051808215151515815260200191505060405180910390f35b34801561045557600080fd5b5061045e6114d4565b6040518082815260200191505060405180910390f35b34801561048057600080fd5b506104896114da565b6040518082815260200191505060405180910390f35b3480156104ab57600080fd5b50610518600480360360608110156104c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e0565b005b6105466004803603602081101561053057600080fd5b8101908080359060200190929190505050611503565b604051808215151515815260200191505060405180910390f35b34801561056c57600080fd5b506105b96004803603604081101561058357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611613565b6040518082815260200191505060405180910390f35b3480156105db57600080fd5b50610695600480360360208110156105f257600080fd5b810190808035906020019064010000000081111561060f57600080fd5b82018360208201111561062157600080fd5b8035906020019184600183028401116401000000008311171561064357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611686565b005b3480156106a357600080fd5b506106e6600480360360208110156106ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116b1565b604051808215151515815260200191505060405180910390f35b34801561070c57600080fd5b5061071561170e565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561075557808201518184015260208101905061073a565b50505050905090810190601f1680156107825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561079c57600080fd5b50610809600480360360608110156107b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061174b565b005b34801561081757600080fd5b506108446004803603602081101561082e57600080fd5b810190808035906020019092919050505061176b565b6040518082815260200191505060405180910390f35b34801561086657600080fd5b506108936004803603602081101561087d57600080fd5b810190808035906020019092919050505061179f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108e157600080fd5b5061090e600480360360208110156108f857600080fd5b810190808035906020019092919050505061181b565b604051808215151515815260200191505060405180910390f35b34801561093457600080fd5b506109776004803603602081101561094b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061183e565b6040518082815260200191505060405180910390f35b34801561099957600080fd5b506109a26118c7565b005b3480156109b057600080fd5b506109f3600480360360208110156109c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611999565b005b348015610a0157600080fd5b50610a0a6119ce565b6040518082815260200191505060405180910390f35b348015610a2c57600080fd5b50610a356119d4565b6040518082815260200191505060405180910390f35b348015610a5757600080fd5b50610a8460048036036020811015610a6e57600080fd5b81019080803590602001909291905050506119da565b604051808381526020018281526020019250505060405180910390f35b610ada60048036036040811015610ab757600080fd5b8101908080359060200190929190803560ff1690602001909291905050506119fe565b604051808215151515815260200191505060405180910390f35b348015610b0057600080fd5b50610b09611e15565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b5757600080fd5b50610b60611e3f565b604051808215151515815260200191505060405180910390f35b348015610b8657600080fd5b50610b8f611e97565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bcf578082015181840152602081019050610bb4565b50505050905090810190601f168015610bfc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c1657600080fd5b50610c6560048036036040811015610c2d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611f39565b005b348015610c7357600080fd5b50610c7c612073565b6040518082815260200191505060405180910390f35b348015610c9e57600080fd5b50610da260048036036080811015610cb557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610d1c57600080fd5b820183602082011115610d2e57600080fd5b80359060200191846001830284011164010000000083111715610d5057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612080565b005b348015610db057600080fd5b50610ddd60048036036020811015610dc757600080fd5b81019080803590602001909291905050506120a6565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e1d578082015181840152602081019050610e02565b50505050905090810190601f168015610e4a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e6457600080fd5b50610faf60048036036040811015610e7b57600080fd5b8101908080359060200190640100000000811115610e9857600080fd5b820183602082011115610eaa57600080fd5b80359060200191846020830284011164010000000083111715610ecc57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610f2c57600080fd5b820183602082011115610f3e57600080fd5b80359060200191846020830284011164010000000083111715610f6057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506120c8565b604051808215151515815260200191505060405180910390f35b348015610fd557600080fd5b50610fde6121e4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561101e578082015181840152602081019050611003565b50505050905090810190601f16801561104b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561106557600080fd5b5061111c6004803603602081101561107c57600080fd5b810190808035906020019064010000000081111561109957600080fd5b8201836020820111156110ab57600080fd5b803590602001918460208302840111640100000000831117156110cd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612286565b604051808215151515815260200191505060405180910390f35b34801561114257600080fd5b506111a56004803603604081101561115957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612370565b604051808215151515815260200191505060405180910390f35b3480156111cb57600080fd5b5061120e600480360360208110156111e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124a1565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6060600b8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b5050505050905090565b6000611324826124be565b61132d57600080fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006113738261179f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113ae57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806113ee57506113ed8133612370565b5b6113f757600080fd5b826004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006114b3611e3f565b6114bc57600080fd5b82601381905550816014819055506001905092915050565b60015481565b60135481565b6114ea3382612530565b6114f357600080fd5b6114fe8383836125c5565b505050565b600080349050600f548114611580576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e76616c696420616d6f756e7420706169640000000000000000000000000081525060200191505060405180910390fd5b600061158a612788565b90506115973382866127a5565b61159f612a46565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611607573d6000803e3d6000fd5b50600192505050919050565b600061161e8361183e565b821061162957600080fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061167357fe5b9060005260206000200154905092915050565b61168e611e3f565b61169757600080fd5b80601290805190602001906116ad929190613554565b5050565b60006116bb611e3f565b6116c457600080fd5b81601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60606040518060400160405280600581526020017f312e322e30000000000000000000000000000000000000000000000000000000815250905090565b61176683838360405180602001604052806000815250612080565b505050565b6000611775612073565b821061178057600080fd5b6009828154811061178d57fe5b90600052602060002001549050919050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561181257600080fd5b80915050919050565b6000611825611e3f565b61182e57600080fd5b81600f8190555060019050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561187957600080fd5b6118c0600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612a5a565b9050919050565b6118cf611e3f565b6118d857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6119a1611e3f565b6119aa57600080fd5b60006119b4612788565b90506119c2828260006127a5565b6119ca612a46565b5050565b600f5481565b60145481565b60026020528060005260406000206000915090508060000154908060010154905082565b6000611a098361179f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806135fa6021913960400191505060405180910390fd5b60008260ff161415611b77576013543414611b0f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f496e76616c69642045544820616d6f756e74000000000000000000000000000081525060200191505060405180910390fd5b60006064600a4303404260405160200180838152602001828152602001925050506040516020818303038152906040528051906020012060001c81611b5057fe5b06905060018101600260008681526020019081526020016000206000018190555050611da2565b60018260ff161415611c5a576014543414611bfa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f496e76616c69642045544820616d6f756e74000000000000000000000000000081525060200191505060405180910390fd5b600060646001430340604051602001808281526020019150506040516020818303038152906040528051906020012060001c81611c3357fe5b06905060018101600260008681526020019081526020016000206001018190555050611da1565b60028260ff161415611da057601454601354013414611ce1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f496e76616c69642045544820616d6f756e74000000000000000000000000000081525060200191505060405180910390fd5b600060646001430340604051602001808281526020019150506040516020818303038152906040528051906020012060001c81611d1a57fe5b06905060006064600a4303404260405160200180838152602001828152602001925050506040516020818303038152906040528051906020012060001c81611d5e57fe5b06905060018201600260008781526020019081526020016000206001018190555060018101600260008781526020019081526020016000206000018190555050505b5b5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611e0a573d6000803e3d6000fd5b506001905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611f2f5780601f10611f0457610100808354040283529160200191611f2f565b820191906000526020600020905b815481529060010190602001808311611f1257829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f7257600080fd5b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b6000600980549050905090565b61208b8484846114e0565b61209784848484612a68565b6120a057600080fd5b50505050565b60606120c16120b36121e4565b6120bc84612c51565b612d7e565b9050919050565b60006120d2611e3f565b6120db57600080fd5b6000835190506096811115612158576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f546f6f206d616e7920746f6b656e73204944730000000000000000000000000081525060200191505060405180910390fd5b60008090505b818160ff1610156121d857612188858260ff168151811061217b57fe5b60200260200101516124be565b6121cb576121c2858260ff168151811061219e57fe5b6020026020010151858360ff16815181106121b557fe5b6020026020010151612dc2565b6121ca612a46565b5b808060010191505061215e565b50600191505092915050565b606060128054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561227c5780601f106122515761010080835404028352916020019161227c565b820191906000526020600020905b81548152906001019060200180831161225f57829003601f168201915b5050505050905090565b6000612290611e3f565b61229957600080fd5b6000825190506064811115612316576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f706c6561736520747279206c657373207468656e20313031000000000000000081525060200191505060405180910390fd5b60008090505b8181101561236557600061232e612788565b905061234f85838151811061233f57fe5b60200260200101518260006127a5565b612357612a46565b50808060010191505061231c565b506001915050919050565b600080601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561242c57600080fd5b505afa158015612440573d6000803e3d6000fd5b505050506040513d602081101561245657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141561248d57600191505061249b565b6124978484612fb7565b9150505b92915050565b6124a9611e3f565b6124b257600080fd5b6124bb8161304b565b50565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b60008061253c8361179f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125ab57508373ffffffffffffffffffffffffffffffffffffffff1661259384611319565b73ffffffffffffffffffffffffffffffffffffffff16145b806125bc57506125bb8185612370565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166125e58261179f565b73ffffffffffffffffffffffffffffffffffffffff161461260557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561263f57600080fd5b61264881613145565b61268f600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613203565b6126d6600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613226565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006127a0600160115461323c90919063ffffffff16565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127df57600080fd5b6127e8826124be565b156127f257600080fd5b610c73600154111561286c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4578636564656e64204d617820546f6b656e20537570706c790000000000000081525060200191505060405180910390fd5b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612905600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613226565b6001600081548092919060010191905055506000606460014303408360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012060001c8161295857fe5b06905060006064600a43034042856040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012060001c816129a457fe5b069050600182016002600086815260200190815260200160002060010181905550600181016002600086815260200190815260200160002060000181905550838573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b601160008154809291906001019190505550565b600081600001549050919050565b6000612a898473ffffffffffffffffffffffffffffffffffffffff1661325b565b612a965760019050612c49565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612b71578082015181840152602081019050612b56565b50505050905090810190601f168015612b9e5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015612bc057600080fd5b505af1158015612bd4573d6000803e3d6000fd5b505050506040513d6020811015612bea57600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b60606000821415612c99576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d79565b600082905060005b60008214612cc3578080600101915050600a8281612cbb57fe5b049150612ca1565b6060816040519080825280601f01601f191660200182016040528015612cf85781602001600182028038833980820191505090505b50905060006001830390505b60008614612d7157600a8681612d1657fe5b0660300160f81b82828060019003935081518110612d3057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8681612d6957fe5b049550612d04565b819450505050505b919050565b6060612dba838360405180602001604052806000815250604051806020016040528060008152506040518060200160405280600081525061326e565b905092915050565b806003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612e5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613226565b6001600081548092919060010191905055506000807340b16a1b6bea856745fedf7e0946494b895611a273ffffffffffffffffffffffffffffffffffffffff16638a4a33be856040518263ffffffff1660e01b8152600401808281526020019150506040805180830381600087803b158015612ed657600080fd5b505af1158015612eea573d6000803e3d6000fd5b505050506040513d6040811015612f0057600080fd5b81019080805190602001909291908051906020019092919050505091509150806002600086815260200190815260200160002060010181905550816002600086815260200190815260200160002060000181905550838373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561308557600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146132005760006004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b61321b6001826000015461353490919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b60008082840190508381101561325157600080fd5b8091505092915050565b600080823b905060008111915050919050565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f1916602001820160405280156132ca5781602001600182028038833980820191505090505b5090506060819050600080905060008090505b885181101561334b578881815181106132f257fe5b602001015160f81c60f81b83838060010194508151811061330f57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506132dd565b5060008090505b87518110156133c05787818151811061336757fe5b602001015160f81c60f81b83838060010194508151811061338457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613352565b5060008090505b8651811015613435578681815181106133dc57fe5b602001015160f81c60f81b8383806001019450815181106133f957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506133c7565b5060008090505b85518110156134aa5785818151811061345157fe5b602001015160f81c60f81b83838060010194508151811061346e57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061343c565b5060008090505b845181101561351f578481815181106134c657fe5b602001015160f81c60f81b8383806001019450815181106134e357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506134b1565b50819850505050505050505095945050505050565b60008282111561354357600080fd5b600082840390508091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061359557805160ff19168380011785556135c3565b828001600101855582156135c3579182015b828111156135c25782518255916020019190600101906135a7565b5b5090506135d091906135d4565b5090565b6135f691905b808211156135f25760008160009055506001016135da565b5090565b9056fe5468697320746f6b656e206973206e6f74206f776e65642062792063616c6c6572a265627a7a7231582079b3a09ca0d0a70085882ad9c9690d513cf03a8c3af9a7305903309479ae249064736f6c63430005100032

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000094e696674796d6f6a69000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044d4f4a4900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e687474703a2f2f36382e3138332e3137382e3130303a393039302f69642f0000

-----Decoded View---------------
Arg [0] : _name (string): Niftymoji
Arg [1] : _symbol (string): MOJI
Arg [2] : baseURI (string): http://68.183.178.100:9090/id/

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [4] : 4e696674796d6f6a690000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 4d4f4a4900000000000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [8] : 687474703a2f2f36382e3138332e3137382e3130303a393039302f69642f0000


Deployed Bytecode Sourcemap

45826:2706:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15372:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15372:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15372:135:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;39674:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39674:85:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;39674:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19887:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19887:154:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19887:154:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;19295:299;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19295:299:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19295:299:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46523:200;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46523:200:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46523:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16361:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16361:26:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45907:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45907:51:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21478:184;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21478:184:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21478:184:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43034:346;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;43034:346:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31721:185;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31721:185:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31721:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;46422:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46422:93:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46422:93:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;46422:93:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;46422:93:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;46422:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;46422:93:0;;;;;;;;;;;;;;;:::i;:::-;;44972:152;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44972:152:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;44972:152:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;46228:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46228:89:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;46228:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22308:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22308:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22308:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32509:155;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32509:155:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32509:155:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18683:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18683:181:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18683:181:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;42887:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42887:137:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;42887:137:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18295:163;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18295:163:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18295:163:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3613:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3613:140:0;;;:::i;:::-;;42725:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42725:154:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;42725:154:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;42340:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42340:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45974:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45974:51:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16474:50;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16474:50:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16474:50:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;46814:1695;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46814:1695:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2823:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2823:79:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3158:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3158:92:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;39873:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39873:89:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;39873:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20341:217;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20341:217:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20341:217:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32064:100;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32064:100:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23161:214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23161:214:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;23161:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;23161:214:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;23161:214:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;23161:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;23161:214:0;;;;;;;;;;;;;;;:::i;:::-;;44278:160;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44278:160:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;44278:160:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;44278:160:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45136:496;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45136:496:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;45136:496:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;45136:496:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;45136:496:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;45136:496:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;45136:496:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;45136:496:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;45136:496:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;45136:496:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;45136:496:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;46323:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46323:93:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;46323:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43388:408;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43388:408:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;43388:408:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;43388:408:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;43388:408:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;43388:408:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;43388:408:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;44562:402;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44562:402:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;44562:402:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3930:117;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3930:117:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3930:117:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;15372:135;15442:4;15466:20;:33;15487:11;15466:33;;;;;;;;;;;;;;;;;;;;;;;;;;;15459:40;;15372:135;;;:::o;39674:85::-;39713:13;39746:5;39739:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39674:85;:::o;19887:154::-;19946:7;19974:16;19982:7;19974;:16::i;:::-;19966:25;;;;;;20009:15;:24;20025:7;20009:24;;;;;;;;;;;;;;;;;;;;;20002:31;;19887:154;;;:::o;19295:299::-;19359:13;19375:16;19383:7;19375;:16::i;:::-;19359:32;;19416:5;19410:11;;:2;:11;;;;19402:20;;;;;;19455:5;19441:19;;:10;:19;;;:58;;;;19464:35;19481:5;19488:10;19464:16;:35::i;:::-;19441:58;19433:67;;;;;;19540:2;19513:15;:24;19529:7;19513:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;19578:7;19574:2;19558:28;;19567:5;19558:28;;;;;;;;;;;;19295:299;;;:::o;46523:200::-;46617:4;3035:9;:7;:9::i;:::-;3027:18;;;;;;46650:10;46631:16;:29;;;;46688:9;46669:15;:28;;;;46713:4;46706:11;;46523:200;;;;:::o;16361:26::-;;;;:::o;45907:51::-;;;;:::o;21478:184::-;21569:39;21588:10;21600:7;21569:18;:39::i;:::-;21561:48;;;;;;21622:32;21636:4;21642:2;21646:7;21622:13;:32::i;:::-;21478:184;;;:::o;43034:346::-;43094:4;43110:18;43131:9;43110:30;;43169:10;;43155;:24;43147:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43210:18;43231:17;:15;:17::i;:::-;43210:38;;43255:39;43261:10;43273;43284:9;43255:5;:39::i;:::-;43301:19;:17;:19::i;:::-;43328:6;;;;;;;;;;;:15;;:27;43344:10;43328:27;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43328:27:0;43370:4;43363:11;;;;43034:346;;;:::o;31721:185::-;31801:7;31837:16;31847:5;31837:9;:16::i;:::-;31829:5;:24;31821:33;;;;;;31872:12;:19;31885:5;31872:19;;;;;;;;;;;;;;;31892:5;31872:26;;;;;;;;;;;;;;;;31865:33;;31721:185;;;;:::o;46422:93::-;3035:9;:7;:9::i;:::-;3027:18;;;;;;46506:3;46490:13;:19;;;;;;;;;;;;:::i;:::-;;46422:93;:::o;44972:152::-;45046:4;3035:9;:7;:9::i;:::-;3027:18;;;;;;45083:15;45060:20;;:38;;;;;;;;;;;;;;;;;;45114:4;45107:11;;44972:152;;;:::o;46228:89::-;46275:13;46297:14;;;;;;;;;;;;;;;;;;;46228:89;:::o;22308:134::-;22395:39;22412:4;22418:2;22422:7;22395:39;;;;;;;;;;;;:16;:39::i;:::-;22308:134;;;:::o;32509:155::-;32567:7;32603:17;:15;:17::i;:::-;32595:5;:25;32587:34;;;;;;32639:10;32650:5;32639:17;;;;;;;;;;;;;;;;32632:24;;32509:155;;;:::o;18683:181::-;18738:7;18758:13;18774:11;:20;18786:7;18774:20;;;;;;;;;;;;;;;;;;;;;18758:36;;18830:1;18813:19;;:5;:19;;;;18805:28;;;;;;18851:5;18844:12;;;18683:181;;;:::o;42887:137::-;42956:4;3035:9;:7;:9::i;:::-;3027:18;;;;;;42987:11;42974:10;:24;;;;43014:4;43007:11;;42887:137;;;:::o;18295:163::-;18350:7;18395:1;18378:19;;:5;:19;;;;18370:28;;;;;;18416:34;:17;:24;18434:5;18416:24;;;;;;;;;;;;;;;:32;:34::i;:::-;18409:41;;18295:163;;;:::o;3613:140::-;3035:9;:7;:9::i;:::-;3027:18;;;;;;3712:1;3675:40;;3696:6;;;;;;;;;;;3675:40;;;;;;;;;;;;3743:1;3726:6;;:19;;;;;;;;;;;;;;;;;;3613:140::o;42725:154::-;3035:9;:7;:9::i;:::-;3027:18;;;;;;42778;42799:17;:15;:17::i;:::-;42778:38;;42823:24;42829:3;42834:10;42845:1;42823:5;:24::i;:::-;42854:19;:17;:19::i;:::-;3056:1;42725:154;:::o;42340:38::-;;;;:::o;45974:51::-;;;;:::o;16474:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46814:1695::-;46893:4;46929:16;46937:7;46929;:16::i;:::-;46915:30;;:10;:30;;;46907:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47005:1;46995:6;:11;;;46992:1437;;;47041:16;;47028:9;:29;47020:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47288:14;47379:3;47365:2;47351:12;:16;47340:28;47370:3;47323:51;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;47323:51:0;;;47313:62;;;;;;47305:71;;:77;;;;;;47288:94;;47441:1;47434:6;:8;47405:11;:20;47417:7;47405:20;;;;;;;;;;;:26;;:37;;;;46992:1437;;;;47520:1;47510:6;:11;;;47507:922;;;47556:15;;47543:9;:28;47535:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47609:13;47693:3;47685:1;47671:12;:15;47660:27;47643:45;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;47643:45:0;;;47633:56;;;;;;47625:65;;:71;;;;;;47609:87;;47759:1;47753:5;:7;47725:11;:20;47737:7;47725:20;;;;;;;;;;;:25;;:35;;;;47507:922;;;;47840:1;47830:6;:11;;;47827:602;;;47896:15;;47877:16;;:34;47863:9;:49;47855:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47950:13;48034:3;48026:1;48012:12;:15;48001:27;47984:45;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;47984:45:0;;;47974:56;;;;;;47966:65;;:71;;;;;;47950:87;;48066:14;48157:3;48143:2;48129:12;:16;48118:28;48148:3;48101:51;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;48101:51:0;;;48091:62;;;;;;48083:71;;:77;;;;;;48066:94;;48280:1;48274:5;:7;48246:11;:20;48258:7;48246:20;;;;;;;;;;;:25;;:35;;;;48376:1;48369:6;:8;48340:11;:20;48352:7;48340:20;;;;;;;;;;;:26;;:37;;;;47827:602;;;47507:922;46992:1437;48447:6;;;;;;;;;;;:15;;:26;48463:9;48447:26;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48447:26:0;48491:4;48484:11;;46814:1695;;;;:::o;2823:79::-;2861:7;2888:6;;;;;;;;;;;2881:13;;2823:79;:::o;3158:92::-;3198:4;3236:6;;;;;;;;;;;3222:20;;:10;:20;;;3215:27;;3158:92;:::o;39873:89::-;39914:13;39947:7;39940:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39873:89;:::o;20341:217::-;20427:10;20421:16;;:2;:16;;;;20413:25;;;;;;20486:8;20449:18;:30;20468:10;20449:30;;;;;;;;;;;;;;;:34;20480:2;20449:34;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;20537:2;20510:40;;20525:10;20510:40;;;20541:8;20510:40;;;;;;;;;;;;;;;;;;;;;;20341:217;;:::o;32064:100::-;32112:7;32139:10;:17;;;;32132:24;;32064:100;:::o;23161:214::-;23268:31;23281:4;23287:2;23291:7;23268:12;:31::i;:::-;23318:48;23341:4;23347:2;23351:7;23360:5;23318:22;:48::i;:::-;23310:57;;;;;;23161:214;;;;:::o;44278:160::-;44337:13;44366:66;44384:14;:12;:14::i;:::-;44399:26;44416:8;44399:16;:26::i;:::-;44366:17;:66::i;:::-;44359:73;;44278:160;;;:::o;45136:496::-;45239:4;3035:9;:7;:9::i;:::-;3027:18;;;;;;45254:19;45276:6;:13;45254:35;;45323:3;45308:11;:18;;45300:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45410:7;45418:1;45410:9;;45406:197;45424:11;45421:1;:14;;;45406:197;;;45461:18;45469:6;45476:1;45469:9;;;;;;;;;;;;;;;;45461:7;:18::i;:::-;45457:135;;45499:38;45517:6;45524:1;45517:9;;;;;;;;;;;;;;;;45528:5;45534:1;45528:8;;;;;;;;;;;;;;;;45499:17;:38::i;:::-;45556:19;:17;:19::i;:::-;45457:135;45437:3;;;;;;;45406:197;;;;45620:4;45613:11;;;45136:496;;;;:::o;46323:93::-;46368:13;46397;46390:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46323:93;:::o;43388:408::-;43462:4;3035:9;:7;:9::i;:::-;3027:18;;;;;;43480:19;43502:6;:13;43480:35;;43547:3;43532:11;:18;;43524:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43592:9;43602:1;43592:11;;43588:183;43606:11;43604:1;:13;43588:183;;;43641:18;43662:17;:15;:17::i;:::-;43641:38;;43690:30;43696:6;43703:1;43696:9;;;;;;;;;;;;;;43707:10;43718:1;43690:5;:30::i;:::-;43731:19;:17;:19::i;:::-;43588:183;43618:3;;;;;;;43588:183;;;;43786:4;43779:11;;;43388:408;;;:::o;44562:402::-;44672:4;44747:27;44791:20;;;;;;;;;;;44747:65;;44864:8;44823:49;;44831:13;:21;;;44853:5;44831:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44831:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44831:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;44831:28:0;;;;;;;;;;;;;;;;44823:49;;;44819:85;;;44892:4;44885:11;;;;;44819:85;44919:39;44942:5;44949:8;44919:22;:39::i;:::-;44912:46;;;44562:402;;;;;:::o;3930:117::-;3035:9;:7;:9::i;:::-;3027:18;;;;;;4011:28;4030:8;4011:18;:28::i;:::-;3930:117;:::o;23576:155::-;23633:4;23650:13;23666:11;:20;23678:7;23666:20;;;;;;;;;;;;;;;;;;;;;23650:36;;23721:1;23704:19;;:5;:19;;;;23697:26;;;23576:155;;;:::o;24100:249::-;24185:4;24202:13;24218:16;24226:7;24218;:16::i;:::-;24202:32;;24264:5;24253:16;;:7;:16;;;:51;;;;24297:7;24273:31;;:20;24285:7;24273:11;:20::i;:::-;:31;;;24253:51;:87;;;;24308:32;24325:5;24332:7;24308:16;:32::i;:::-;24253:87;24245:96;;;24100:249;;;;:::o;27867:374::-;27981:4;27961:24;;:16;27969:7;27961;:16::i;:::-;:24;;;27953:33;;;;;;28019:1;28005:16;;:2;:16;;;;27997:25;;;;;;28035:23;28050:7;28035:14;:23::i;:::-;28071:35;:17;:23;28089:4;28071:23;;;;;;;;;;;;;;;:33;:35::i;:::-;28117:33;:17;:21;28135:2;28117:21;;;;;;;;;;;;;;;:31;:33::i;:::-;28186:2;28163:11;:20;28175:7;28163:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;28225:7;28221:2;28206:27;;28215:4;28206:27;;;;;;;;;;;;27867:374;;;:::o;43942:100::-;43991:7;44014:22;44034:1;44014:15;;:19;;:22;;;;:::i;:::-;44007:29;;43942:100;:::o;24600:1051::-;24705:1;24691:16;;:2;:16;;;;24683:25;;;;;;24728:16;24736:7;24728;:16::i;:::-;24727:17;24719:26;;;;;;24779:4;24764:11;;:19;;24756:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24849:2;24826:11;:20;24838:7;24826:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;24862:33;:17;:21;24880:2;24862:21;;;;;;;;;;;;;;;:31;:33::i;:::-;24906:11;;:13;;;;;;;;;;;;;25125;25220:3;25201:1;25187:12;:15;25176:27;25205:9;25159:56;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;25159:56:0;;;25149:67;;;;;;25141:76;;:82;;;;;;25125:98;;25241:14;25343:3;25318:2;25304:12;:16;25293:28;25323:3;25328:9;25276:62;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;25276:62:0;;;25266:73;;;;;;25258:82;;:88;;;;;;25241:105;;25457:1;25451:5;:7;25423:11;:20;25435:7;25423:20;;;;;;;;;;;:25;;:35;;;;25549:1;25542:6;:8;25513:11;:20;25525:7;25513:20;;;;;;;;;;;:26;;:37;;;;25635:7;25631:2;25610:33;;25627:1;25610:33;;;;;;;;;;;;24600:1051;;;;;:::o;44116:68::-;44161:15;;:17;;;;;;;;;;;;;44116:68::o;14181:114::-;14246:7;14273;:14;;;14266:21;;14181:114;;;:::o;28780:356::-;28902:4;28929:15;:2;:13;;;:15::i;:::-;28924:60;;28968:4;28961:11;;;;28924:60;28996:13;29028:2;29012:36;;;29049:10;29061:4;29067:7;29076:5;29012:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;29012:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29012:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29012:70:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29012:70:0;;;;;;;;;;;;;;;;28996:86;;16750:10;29111:16;;29101:26;;;:6;:26;;;;29093:35;;;28780:356;;;;;;;:::o;5912:406::-;5962:27;6008:1;6002:2;:7;5998:40;;;6020:10;;;;;;;;;;;;;;;;;;;;;5998:40;6044:6;6053:2;6044:11;;6062:8;6077:53;6089:1;6084;:6;6077:53;;6101:5;;;;;;;6120:2;6115:7;;;;;;;;;6077:53;;;6136:17;6166:3;6156:14;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;6156:14:0;;;;6136:34;;6177:6;6192:1;6186:3;:7;6177:16;;6200:87;6213:1;6207:2;:7;6200:87;;6258:2;6253;:7;;;;;;6248:2;:12;6237:25;;6225:4;6230:3;;;;;;;6225:9;;;;;;;;;;;:37;;;;;;;;;;;6277:2;6271:8;;;;;;;;;6200:87;;;6307:4;6293:19;;;;;;5912:406;;;;:::o;5764:142::-;5842:13;5871:29;5881:2;5885;5871:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:29::i;:::-;5864:36;;5764:142;;;;:::o;25663:956::-;25774:4;25751:11;:20;25763:7;25751:20;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;25789:35;:17;:23;25807:4;25789:23;;;;;;;;;;;;;;;:33;:35::i;:::-;25835:11;;:13;;;;;;;;;;;;;26055:14;26071:13;26101:42;26088:68;;;26157:7;26088:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26088:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26088:77:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26088:77:0;;;;;;;;;;;;;;;;;;;;;;;;;26054:111;;;;26421:5;26393:11;:20;26405:7;26393:20;;;;;;;;;;;:25;;:33;;;;26510:6;26481:11;:20;26493:7;26481:20;;;;;;;;;;;:26;;:35;;;;26603:7;26597:4;26576:35;;26593:1;26576:35;;;;;;;;;;;;25663:956;;;;:::o;20887:147::-;20967:4;20991:18;:25;21010:5;20991:25;;;;;;;;;;;;;;;:35;21017:8;20991:35;;;;;;;;;;;;;;;;;;;;;;;;;20984:42;;20887:147;;;;:::o;4197:195::-;4299:1;4279:22;;:8;:22;;;;4271:31;;;;;;4347:8;4318:38;;4339:6;;;;;;;;;;;4318:38;;;;;;;;;;;;4376:8;4367:6;;:17;;;;;;;;;;;;;;;;;;4197:195;:::o;29303:175::-;29403:1;29367:38;;:15;:24;29383:7;29367:24;;;;;;;;;;;;;;;;;;;;;:38;;;29363:108;;29457:1;29422:15;:24;29438:7;29422:24;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;29363:108;29303:175;:::o;14402:110::-;14483:21;14502:1;14483:7;:14;;;:18;;:21;;;;:::i;:::-;14466:7;:14;;:38;;;;14402:110;:::o;14303:91::-;14385:1;14367:7;:14;;;:19;;;;;;;;;;;14303:91;:::o;11448:150::-;11506:7;11526:9;11542:1;11538;:5;11526:17;;11567:1;11562;:6;;11554:15;;;;;;11589:1;11582:8;;;11448:150;;;;:::o;12428:627::-;12488:4;12505:12;13012:7;13000:20;12992:28;;13046:1;13039:4;:8;13032:15;;;12428:627;;;:::o;4566:842::-;4698:13;4720:16;4745:2;4720:28;;4755:16;4780:2;4755:28;;4790:16;4815:2;4790:28;;4825:16;4850:2;4825:28;;4860:16;4885:2;4860:28;;4895:19;4980:3;:10;4967:3;:10;4954:3;:10;4941:3;:10;4928:3;:10;:23;:36;:49;:62;4917:74;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;4917:74:0;;;;4895:96;;4998:19;5026:5;4998:34;;5039:6;5048:1;5039:10;;5061:6;5070:1;5061:10;;5056:58;5077:3;:10;5073:1;:14;5056:58;;;5108:3;5112:1;5108:6;;;;;;;;;;;;;;;;5094;5101:3;;;;;;5094:11;;;;;;;;;;;:20;;;;;;;;;;;5089:3;;;;;;;5056:58;;;;5126:6;5135:1;5126:10;;5121:58;5142:3;:10;5138:1;:14;5121:58;;;5173:3;5177:1;5173:6;;;;;;;;;;;;;;;;5159;5166:3;;;;;;5159:11;;;;;;;;;;;:20;;;;;;;;;;;5154:3;;;;;;;5121:58;;;;5191:6;5200:1;5191:10;;5186:58;5207:3;:10;5203:1;:14;5186:58;;;5238:3;5242:1;5238:6;;;;;;;;;;;;;;;;5224;5231:3;;;;;;5224:11;;;;;;;;;;;:20;;;;;;;;;;;5219:3;;;;;;;5186:58;;;;5256:6;5265:1;5256:10;;5251:58;5272:3;:10;5268:1;:14;5251:58;;;5303:3;5307:1;5303:6;;;;;;;;;;;;;;;;5289;5296:3;;;;;;5289:11;;;;;;;;;;;:20;;;;;;;;;;;5284:3;;;;;;;5251:58;;;;5321:6;5330:1;5321:10;;5316:58;5337:3;:10;5333:1;:14;5316:58;;;5368:3;5372:1;5368:6;;;;;;;;;;;;;;;;5354;5361:3;;;;;;5354:11;;;;;;;;;;;:20;;;;;;;;;;;5349:3;;;;;;;5316:58;;;;5395:6;5381:21;;;;;;;;;;4566:842;;;;;;;:::o;11210:150::-;11268:7;11301:1;11296;:6;;11288:15;;;;;;11314:9;11330:1;11326;:5;11314:17;;11351:1;11344:8;;;11210:150;;;;:::o;45826:2706::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://79b3a09ca0d0a70085882ad9c9690d513cf03a8c3af9a7305903309479ae2490
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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